Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > работа с массивами


Автор: dize 11.9.2009, 15:18
Здесь выполняется заполнение массива с номерами тех клиентов, которые выбраны в combobox(query[0]) и по соответствию выбранного названия документа в combobox(query[1]). 
Код

  //заполнение массива с номерами
  ADOQ_nomera.Close;
  ADOQ_nomera.SQL.Clear;
  ADOQ_nomera.SQL.Add('SELECT Nomer_sd.Kod_klienta, Nomer_sd.Nomer, Nomer_sd.Sec_name');
  ADOQ_nomera.SQL.Add('FROM Nomer_sd INNER JOIN groups ON Nomer_sd.id_group=groups.id_group');
  ADOQ_nomera.SQL.Add('WHERE Nomer_sd.Sec_name="'+query[1]+'" and groups.group="'+query[0]+'"');
  ADOQ_nomera.Open;

  SetLength(nomer,ADOQ_nomera.RecordCount);
  count3:=ADOQ_nomera.RecordCount-1;
  k:=0;
  while (not ADOQ_nomera.Eof) do
   begin
      nomer[k]:=ADOQ_nomera.FieldByName('Nomer').AsString;
      ADOQ_nomera.Next();
      k:=k+1;
   end;



Здесь выполняется заполнение массива с клиентами, которые выбраны в combobox(query[0]) и по соответствию выбранного названия документа в combobox(query[1]). 
Код

//заполнение массива с клиентами
 ADOQ_sex.Close;
  ADOQ_sex.SQL.Clear;
  ADOQ_sex.SQL.Add('SELECT Nomer_sd.Kod_klienta, Nomer_sd.Sec_name');
  ADOQ_sex.SQL.Add('FROM Nomer_sd INNER JOIN groups ON Nomer_sd.id_group=groups.id_group');
  ADOQ_sex.SQL.Add('WHERE Nomer_sd.Sec_name="'+query[1]+'" and groups.group="'+query[0]+'"');
  ADOQ_sex.Open;

  SetLength(cli,ADOQ_sex.RecordCount);
  count4:=ADOQ_sex.RecordCount-1;
  z:=0;
  while (not ADOQ_sex.Eof) do
   begin
      cli[z]:=ADOQ_sex.FieldByName('Kod_klienta').AsString;
      ADOQ_sex.Next();
      z:=z+1;
   end;


Для заполнения бд используется следующий код
Код

begin
    for z:=0 to count4 do
    begin
      for k:=0 to count3 do
      begin
      sql:= 'INSERT INTO Zayavki (Kod_klienta, Bumaga_socr, CLASSCODE, Kod_bumagi, [Action], Nomer_zayvki) VALUES ("'+cli[z]+'", "'+sec+'", "'+class_code+'", "'+id_paper+'", "KILL_ORDER", "'+nomer[k]+'")';

    showmessage(sql);
    ADOQ_new.Close;
    ADOQ_new.SQL.Clear;
    ADOQ_new.SQL.Text:=sql;
    ADOQ_new.ExecSQL;
    end;
    end;
    end;

Заполняет бд ест-но неверно. Собственно вопрос, как сделать принадлежность клиентам именно их номеров(номера всегда разные).
Вставляться должно по принципу: столько строк каждому клиенту, сколько у него номеров с заданными условиями содержит таблица Nomer_sd(условия: принадлежность клиента к выбираемой группе из комбобокса и наличие названия бумаги, выбираемой из другого комбобокса). Заранее извиняюсь, если слишком размыто объяснил суть проблемы.

Автор: dize 14.9.2009, 14:19
Слишком простой вопрос или слишком мало исходных данных, что никто не отвечает?

Автор: Frees 14.9.2009, 14:24
Цитата(dize @  14.9.2009,  17:19 Найти цитируемый пост)
Слишком простой вопрос или слишком мало исходных данных, что никто не отвечает?

не слишком понятный

по моему тебе нужно посмотреть в сторону TDBLookupComboBox

Автор: dize 14.9.2009, 14:36
Цитата(Frees @  14.9.2009,  14:24 Найти цитируемый пост)
по моему тебе нужно посмотреть в сторону TDBLookupComboBox

Хм..непонятно только как это может помочь. Обычные cobobox работают как надо, выборки по ним тоже. Проблема в соответствии двух выборок между собой, либо надо каким-то образом эти два вышеописанных запроса объединить в один, что наверно логичнее и решит проблему, но лично я не знаю как это сделать.

Автор: dize 15.9.2009, 14:36
Чтобы лучше объяснить ситуацию..
user posted image
При условии выборки из одной группы(query[0]), в которую входят данные клиенты из таблицы Nomer_sd и имеют Sec_name(query[1]) "a", добавление данных в таблицу Kill_o должна выглядеть как на изображении.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)