Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 20:20   #1
alex1313
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 12
Вопрос Связанные combobox

Помогите пожалуйста.
Нужно сделать чтобы, в Memo1 записывались a,b,c,d,e,f как по отдельным комбобоксам (любому из четырех), так и по различным комбинациям комбобоксов (т.е. комбобоксы были связанными) и все что находилось в базе записывалось столбцом.
Вложения
Тип файла: txt программа.txt (3.0 Кб, 133 просмотров)
alex1313 вне форума Ответить с цитированием
Старый 08.03.2013, 12:38   #2
alex1313
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 12
По умолчанию

Немого разобрался c FormCreate и в запросах добавил distinct

Код:
 procedure TForm1.FormCreate(Sender: TObject);
 var
 i,j,k,p: integer;

 begin
 i:=0;
 while i<adoquery1.RecordCount do

begin
 combobox1.Items.Add (adoquery1e.AsString);
inc (i);
adoquery1.Next;
end;

 j:=0;
 while j<adoquery2.RecordCount do

begin
 combobox2.Items.Add (adoquery2d.AsString);
inc (j);
adoquery2.Next;
end;

 k:=0;
 while k<adoquery3.RecordCount do

begin
 combobox3.Items.Add (adoquery3f.AsString);
inc (k);
adoquery3.Next;
end;

 p:=0;
 while p<adoquery7.RecordCount do

begin
 combobox4.Items.Add (adoquery7a.AsString);
inc (p);
adoquery7.Next;
end;


end;
но связать комбобоксы не получается

Последний раз редактировалось alex1313; 08.03.2013 в 12:40.
alex1313 вне форума Ответить с цитированием
Старый 08.03.2013, 14:04   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Я енмного недопонимаю, почему у вас цикл открывается по одному ADOQuery а данные записываются обсалютно издругогО?
Код:
 while i<adoquery1.RecordCount do
begin
 combobox1.Items.Add (adoquery1e.AsString);
inc (i);
adoquery1.Next;
end;
Как так? НУ и потом цикл открывайте лучше так
Код:
with ADOQuery do
begin
  While not EOF do 
   begin
    ...
   end;
end;
Дальше, данные записываются не из всего квери а из записи на которой находится указатель например ADOQuery.FieldByName('myField').ASS tring;
Dozent вне форума Ответить с цитированием
Старый 08.03.2013, 16:41   #4
alex1313
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 12
По умолчанию

хотя бы combobox1, combobox1+combobox2, combobox1+combobox3

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, ExtCtrls, DBCtrls, XPMan;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ComboBox1: TComboBox;
    ADOQuery1: TADOQuery;
    ADOQuery4: TADOQuery;
    ComboBox2: TComboBox;
    ADOQuery2: TADOQuery;
    ADOQuery2d: TWideStringField;
    ComboBox3: TComboBox;
    ADOQuery3: TADOQuery;
    ADOQuery3a: TWideStringField;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText4: TStaticText;
    StaticText5: TStaticText;
    StaticText6: TStaticText;
    ADOQuery1e: TWideStringField;
    StaticText7: TStaticText;
    StaticText8: TStaticText;
    StaticText9: TStaticText;
    ADOQuery5: TADOQuery;
    ADOQuery5a: TWideStringField;
    ADOQuery5b: TWideStringField;
    ADOQuery5c: TWideStringField;
    ADOQuery5d: TWideStringField;
    ADOQuery5e: TWideStringField;
    ADOQuery5f: TIntegerField;
    Memo1: TMemo;
    ADOQuery4a: TWideStringField;
    ADOQuery4b: TWideStringField;
    ADOQuery4c: TWideStringField;
    ADOQuery4d: TWideStringField;
    ADOQuery4e: TWideStringField;
    ADOQuery4f: TIntegerField;
    ADOQuery6: TADOQuery;
    ADOQuery6a: TWideStringField;
    ADOQuery6b: TWideStringField;
    ADOQuery6c: TWideStringField;
    ADOQuery6d: TWideStringField;
    ADOQuery6e: TWideStringField;
    ADOQuery6f: TIntegerField;


    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

 procedure TForm1.FormCreate(Sender: TObject);
 var
 i,j,k: integer;

 begin
 i:=0;
 while i<adoquery1.RecordCount do

begin
 combobox1.Items.Add (adoquery1e.AsString);
inc (i);
adoquery1.Next;
end;

 j:=0;
 while j<adoquery2.RecordCount do

begin
 combobox2.Items.Add (ADOQuery2.FieldByName('d').ASString);
inc (j);
adoquery2.Next;
end;

 k:=0;
 while k<adoquery3.RecordCount do

begin
 combobox3.Items.Add (adoquery3a.AsString);
inc (k);
adoquery3.Next;
end;



end;

procedure TForm1.ComboBox1Change(Sender: TObject);
  var
  i: Integer;
begin
adoquery4.Parameters.ParamByName('param').Value:=combobox1.Text;

adoquery4.Open;

memo1.Text:= adoquery4a.AsString +#32 +#32 +#32 + adoquery4b.AsString +#32 +#32 +#32 + adoquery4c.AsString +#32 +#32 +#32 + adoquery4d.AsString +#32 +#32 +#32 + adoquery4e.AsString +#32 +#32 +#32 + adoquery4f.AsString;
for i := 0 to 15 do Memo1.Lines.Add(memo1.Text);
   inc(i);
 adoquery4.Close;

end;

 procedure TForm1.ComboBox2Change(Sender: TObject);
begin
 adoquery5.Parameters.ParamByName('param').Value:=combobox1.Text;
 adoquery5.Parameters.ParamByName('param1').Value:=combobox2.Text;

 adoquery5.Open;

memo1.Text:= adoquery5a.AsString +#32 +#32 +#32 + adoquery5b.AsString +#32 +#32 +#32 + adoquery5c.AsString +#32 +#32 +#32 + adoquery5d.AsString +#32 +#32 +#32 + adoquery5e.AsString +#32 +#32 +#32 + adoquery5f.AsString;

   adoquery5.Close;


end;


procedure TForm1.ComboBox3Change(Sender: TObject);
begin
  adoquery6.Parameters.ParamByName('param').Value:=combobox1.Text;
 adoquery6.Parameters.ParamByName('param2').Value:=combobox3.Text;

 adoquery6.Open;

memo1.Text:= adoquery6a.AsString +#32 +#32 +#32 + adoquery6b.AsString +#32 +#32 +#32 + adoquery6c.AsString +#32 +#32 +#32 + adoquery6d.AsString +#32 +#32 +#32 + adoquery5e.AsString +#32 +#32 +#32 + adoquery6f.AsString;

   adoquery6.Close;
end;

end.


Запросы:
ADOQuery1 - select distinct e from R1
ADOQuery2 - select distinct d from R1
ADOQuery3 - select distinct a from R1
ADOQuery4 - select a, b,c,d,e,f from R1 where e =aram
ADOQuery5 - select a, b,c,d,e,f from R1 where e =aram and d =aram1
ADOQuery6 - select a, b,c,d,e,f from R1 where e =aram and a =aram2

Пытаюсь записать в столбец, но это неправильно, как сделать?
Код:
for i := 0 to 15 do Memo1.Lines.Add(memo1.Text);
Программа вытягивает из базы только одну строку, надо чтобы все возможные (значения a,b,с,d,e,f d ,f в таблице повторяются), как сделать?

Последний раз редактировалось alex1313; 08.03.2013 в 18:07.
alex1313 вне форума Ответить с цитированием
Старый 09.03.2013, 12:35   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

for i := 0 to 15 do Memo1.Lines.Add(memo1.Text); смысл? записать в мемо свой же текст мемо?
Что у вам нужн осделать, откуда берётся данные, обьясняйте подробнее...
ИЗ всего что вы тут анписали, я понял что у вас есть какаято база какие-то данные отображаются в Комбобоксах и вам по какому то признаку их нужно объединить...
Dozent вне форума Ответить с цитированием
Старый 09.03.2013, 13:33   #6
alex1313
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 12
По умолчанию

Есть база из одной таблицы в access.
В таблице поля:
"e" - некоторые группы;
"d" - некоторые подгруппы, причем эти подгруппы могут относиться к разным группам;
"a","b" - обозначение и соответствующее название некоторых элементов, причем одинаковые элементы могут входить в разные группы и разные подгруппы (по несколько раз записаны в таблице);
в "c" указанно количество.

Данная СУБД нужна, чтобы знать:
какие строки в таблице записаны по группе (combobox1);
какие строки совпадения по группе и подгруппе (combobox1+combobox2);
какие строки совпадения по группе и обозначению элемента (combobox1+combobox3).


По выбору "группы" с помощью combobox1 записать соответствующие подгруппы в список combobox2 и соответствующие элементы в список combobox3. И после выбора в combobox1 или combobox1+combobox2 или combobox1+combobox3 записывать соответствующие запросу строки таблицы базы в Memo1.

Последний раз редактировалось alex1313; 09.03.2013 в 21:43.
alex1313 вне форума Ответить с цитированием
Старый 11.03.2013, 23:54   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Эм, вы помойму изобретаете свой велосипед.
Для того чтобы находить подгруппы в группах советую сделать так:
Создать отдельную таблицу по группам Group(id_gr, name), таблицы для подгрупп Parent_Group (id_p, id_gr, name) где id_p Это поле счётчик подгруппы, а id_gr поле которое показывает к какой группе относится подгруппа. ТАк будит правильнее.
Ну или можете сделать это в одной табилце MyTable(id, id_p, name, .... какие там вам нужно ешё данные) А потом просто находить если id_p не равно нулю то это подгруппа, и можно вывести по id_p. Если чесно не совсем понял структуру ваше БД...
Dozent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные списки в ComboBox Trimbl Microsoft Office Excel 4 01.12.2012 04:15
связанные списки Lusin Общие вопросы C/C++ 3 27.08.2011 10:08
Webbrowser и combobox: сделать чтобы в combobox-е оставалась история посещенных сайтов uasya2 Общие вопросы Delphi 6 06.03.2011 20:24
Связанные поля??? Gridnev_Kirill Microsoft Office Access 3 05.11.2009 11:54
Не могу внести строку из combobox в combobox!? tacer Помощь студентам 1 30.11.2007 19:45