На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> MS Access/ADO - выборка
    Всем привет. Пишу прогу для работы с БД Access с использованием ADO. Столкнулся с очень неприятной ситуацией при выборке/вставке данных из одной таблицы в другую. Постараюсь вкратце описать суть.
    Есть БД, которая разделена следующим образом:
    - "Основная" таблица, с данными клиентов типа ИД, ФИО, Улица, Дом...
    - Доп. таблицы, в которых раскиданы данные по оплате для для каждого клиента по месяцам (возможно структура с приколом, но мне так подходит).
    - При добавлении нового клиента, в каждой доп таблице создаются значения по-дефолту и копируется ИД записи из первой таблицы.
    Когда я добавляю нового клиента - норм, когда открываю запись клиента для редактирования - норм (все данные для него подтягиваются без проблем), а вот дальше...
    Задача: выборка из "основной" таблицы строк по условию + выборка из любой доп. таблицы записи, которая соотв ИД из основной, а затем отобразить всю строку в отдельной таблице на форме... и так для всех строк из основной таблицы. Код ниже описывает сам процесс и вот с ним трабла:
    ExpandedWrap disabled
      procedure TForm3.BitBtn2Click(Sender: TObject);
      var
      id2: integer;
      begin
      if Form3.RadioButton1.Checked then
      Form3.ADOQuery14.SQL.Clear;
      Form3.ADOQuery14.SQL.Add('SELECT * FROM delo WHERE  DV="*"'); //поле текстовое, и заполняется *, если нужно
      Form3.ADOQuery14.Open;
      id2:=Form3.ADOQuery14.FieldByName('id').AsInteger;
      if Form3.ComboBox1.Text='Январь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Jan WHERE  id=id3');
      Form3.ADOQuery2.Parameters[0].Value:=id2;
      Form3.ADOQuery2.Open;
      end
      else
      if Form3.ComboBox1.Text='Февраль' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Feb WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Март then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM March WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Апрель' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Май' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM May WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Июнь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Jun WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Июль' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Jul WHERE  id=:id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Август' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Aug WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Сентябрь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Sept WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Октябрь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Oct WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Ноябрь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Nov WHERE  id=id2');
      Form3.ADOQuery2.Open
      end
      else
      if Form3.ComboBox1.Text='Декабрь' then
      begin
      Form3.ADOQuery2.SQL.Clear;
      Form3.ADOQuery2.SQL.Add('SELECT * FROM Dec12 WHERE  id=id2');
      Form3.ADOQuery2.Open
      end;
      try
      Form3.ADOQuery1.Insert;
      Form3.ADOQuery1.FieldByName('id').AsInteger:=Form3.ADOQuery14.FieldByName('id').AsInteger;
      Form3.ADOQuery1.FieldByName('FIO').AsString:=Form3.ADOQuery14.FieldByName('FIO').AsString;
      Form3.ADOQuery1.FieldByName('Order').AsString:=Form3.ADOQuery14.FieldByName('Order').AsString;
      Form3.ADOQuery1.FieldByName('House').AsString:=Form3.ADOQuery14.FieldByName('House').AsString;
      Form3.ADOQuery1.FieldByName('Street').AsString:=Form3.ADOQuery14.FieldByName('Street').AsString;
      Form3.ADOQuery1.FieldByName('DV').AsString:=Form3.ADOQuery14.FieldByName('DV').AsString;
      Form3.ADOQuery1.FieldByName('MD').AsString:=Form3.ADOQuery14.FieldByName('MD').AsString;
      Form3.ADOQuery1.FieldByName('God').AsString:=Form3.ADOQuery2.FieldByName('God').AsString;
      Form3.ADOQuery1.FieldByName('Mes').AsString:=Form3.ADOQuery2.FieldByName('Mes').AsString;
      Form3.ADOQuery1.FieldByName('Data').AsDateTime:=Form3.ADOQuery2.FieldByName('Data').AsDateTime;
      Form3.ADOQuery1.FieldByName('Subs').AsInteger:=Form3.ADOQuery2.FieldByName('Subs').AsInteger;
      Form3.ADOQuery1.FieldByName('PK').AsInteger:=Form3.ADOQuery2.FieldByName('PK').AsInteger;
      Form3.ADOQuery1.FieldByName('UPSN').AsInteger:=Form3.ADOQuery2.FieldByName('UPSN').AsInteger;
      Form3.ADOQuery1.ExecSQL;
      except
      on e:Exception do
      end;
      Form3.ADOQuery1.Refresh;
      end;

    Теперь весь процесс:
    Прикреплённый файлПрикреплённый файл11.jpg (43,13 Кбайт, скачиваний: 532)
    в БД записи есть :)
    Прикреплённый файлПрикреплённый файл1.jpg (70,23 Кбайт, скачиваний: 505)
    само окно поиска
    Прикреплённый файлПрикреплённый файл12.jpg (67,93 Кбайт, скачиваний: 520)
    условия выбраны и кнопка выбрать нажата
    Прикреплённый файлПрикреплённый файл13.jpg (74,05 Кбайт, скачиваний: 511)
    Повторное нажатие....
    Прикреплённый файлПрикреплённый файл15.jpg (65,56 Кбайт, скачиваний: 515)
    ... и финал...
    В чем м.б. загвоздка? Код приведённый выше - на форме поиска/добавления (форма №1) и редактирования (форма №2) всё прекрасно вытаскивает, а здесь.... Подскажите плиз
      Уважаемые форумчане, очень нужна помощь!
        Цитата WinFack @
        Код ниже описывает сам процесс и вот с ним трабла

        Что такое "трабла"?
        Тrабла с кодом или процессом?
          Это что
          Цитата WinFack @
          Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE  id=id2');
          ?
          ExpandedWrap disabled
            Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE  id='+String(id2));

          Лучше через параметр передавать id2,id3.
          Сообщение отредактировано: Bas -
            Цитата MIF @
            Трабла таки с кодом, т.к. при выполнении в нужной таблице появляется строка с "0"


            Добавлено
            Цитата Bas @

            При использовании кода, предложенного вами, получаю ошибку - ошибка синтаксиса (пропущен оператор) в выражении запроса 'id="

            Добавлено
            Цитата Bas @
            Это что
            Цитата WinFack @
            Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE  id=id2');
            ?
            ExpandedWrap disabled
              Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE  id='+String(id2));

            Лучше через параметр передавать id2,id3.

            Для меня остается загадкой, почему код
            ExpandedWrap disabled
              Form1.ADOQuery2.SQL.Add('SELECT *  FROM Jan WHERE id='+Form1.ADOQuery1.FieldByName('id').AsString);

            на первых 2-х формах работает просто отлично, а здесь упорно отказывается?
            Сообщение отредактировано: WinFack -
              Цитата WinFack @
              ошибка синтаксиса (пропущен оператор) в выражении запроса 'id="

              Синтаксис надо знать, у вас и подстановка и параметры, используйте что-то одно.
              ExpandedWrap disabled
                Form3.ADOQuery2.SQL.Clear;
                Form3.ADOQuery2.SQL.Add('SELECT * FROM Jan WHERE  id=:id');
                Form3.ADOQuery2.Parameters[0].Value:=id2;
                Form3.ADOQuery2.Open;

              Если используете ADOQuery
              Цитата WinFack @
              Form3.ADOQuery1.Insert;

              То используйте запрос на вставку
              ExpandedWrap disabled
                INSERT INTO "Customer.db"
                (CustNo, Company)
                VALUES (9842, "Inprise Corporation")


              Добавлено
              Цитата WinFack @
              на первых 2-х формах работает просто отлично, а здесь упорно отказывается?

              Потому что ('id').AsString - это явное преобразование. Мое изобретение (+String(id2)) может и не пройти , давно не писал на делфях.

              Добавлено
              Прочтите свой код.
              Цитата WinFack @
              if Form3.ComboBox1.Text='Июнь' then
              begin
              Form3.ADOQuery2.SQL.Clear;
              Form3.ADOQuery2.SQL.Add('SELECT * FROM Jun WHERE  id=id2');
              Form3.ADOQuery2.Open
              end
              else
              if Form3.ComboBox1.Text='Июль' then
              begin
              Form3.ADOQuery2.SQL.Clear;
              Form3.ADOQuery2.SQL.Add('SELECT * FROM Jul WHERE  id=:id2');
              Form3.ADOQuery2.Open
              end

              В первом случае запрос будет
              ExpandedWrap disabled
                SELECT * FROM Jun WHERE  id=id2

              Где id2 не известно что , то есть null.
              Во втором случае, тоже самое , так как вы объявили параметр (:id2) и его не заполнили.
              Сообщение отредактировано: Bas -
                Цитата Bas @
                Цитата WinFack @
                ошибка синтаксиса (пропущен оператор) в выражении запроса 'id="

                Синтаксис надо знать, у вас и подстановка и параметры, используйте что-то одно.
                ExpandedWrap disabled
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Jan WHERE  id=:id');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open;

                Если используете ADOQuery
                Цитата WinFack @
                Form3.ADOQuery1.Insert;

                То используйте запрос на вставку
                ExpandedWrap disabled
                  INSERT INTO "Customer.db"
                  (CustNo, Company)
                  VALUES (9842, "Inprise Corporation")


                Добавлено
                Цитата WinFack @
                на первых 2-х формах работает просто отлично, а здесь упорно отказывается?

                Потому что ('id').AsString - это явное преобразование. Мое изобретение (+String(id2)) может и не пройти , давно не писал на делфях.

                Добавлено
                Прочтите свой код.
                Цитата WinFack @
                if Form3.ComboBox1.Text='Июнь' then
                begin
                Form3.ADOQuery2.SQL.Clear;
                Form3.ADOQuery2.SQL.Add('SELECT * FROM Jun WHERE  id=id2');
                Form3.ADOQuery2.Open
                end
                else
                if Form3.ComboBox1.Text='Июль' then
                begin
                Form3.ADOQuery2.SQL.Clear;
                Form3.ADOQuery2.SQL.Add('SELECT * FROM Jul WHERE  id=:id2');
                Form3.ADOQuery2.Open
                end

                В первом случае запрос будет
                ExpandedWrap disabled
                  SELECT * FROM Jun WHERE  id=id2

                Где id2 не известно что , то есть null.
                Во втором случае, тоже самое , так как вы объявили параметр (:id2) и его не заполнили.

                Итак... докрутил код кнопки до такого вида:
                ExpandedWrap disabled
                  procedure TForm3.BitBtn2Click(Sender: TObject);
                  var
                  id2: integer;
                  fio: string;
                  ord: string;
                  hs: string;
                  str: string;
                  dv: string;
                  md: string;
                  god: string;
                  mes: string;
                  data: string;
                  sub: integer;
                  pk: integer;
                  upsn: integer;
                  begin
                  if Form3.RadioButton1.Checked then
                  begin
                  Form3.ADOQuery14.SQL.Clear;
                  Form3.ADOQuery14.SQL.Add('SELECT id,FIO,Order,Street,House,DV,MD FROM selo WHERE  DV="x"');
                  Form3.ADOQuery14.Open;
                  end
                  else
                  if Form3.RadioButton2.Checked then
                  begin
                  Form3.ADOQuery14.SQL.Clear;
                  Form3.ADOQuery14.SQL.Add('SELECT id,FIO,Order,Street,House,DV,MD FROM selo WHERE  MD="x"');
                  Form3.ADOQuery14.Open;
                  end;
                  Form3.Edit1.Text:=Form3.ADOQuery14.FieldByName('id').AsString;
                  id2:=Form3.ADOQuery14.FieldByName('id').AsInteger;
                  if Form3.ComboBox1.Text='ßíâàðü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Jan WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open;
                  end
                  else
                  if Form3.ComboBox1.Text='Ôåâðàëü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Feb WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Ìàðò' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM March WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Àïðåëü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Ìàé' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM May WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Èþíü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Jun WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Èþëü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Jul WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Àâãóñò' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Aug WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Ñåíòÿáðü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Sept WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Îêòÿáðü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Oct WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Íîÿáðü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Nov WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end
                  else
                  if Form3.ComboBox1.Text='Äåêàáðü' then
                  begin
                  Form3.ADOQuery2.SQL.Clear;
                  Form3.ADOQuery2.SQL.Add('SELECT * FROM Dec12 WHERE id=:id2');
                  Form3.ADOQuery2.Parameters[0].Value:=id2;
                  Form3.ADOQuery2.Open
                  end;
                  fio:=Form3.ADOQuery14.FieldByName('FIO').AsString;
                  ord:=Form3.ADOQuery14.FieldByName('Order').AsString;
                  hs:=Form3.ADOQuery14.FieldByName('House').AsString;
                  str:=Form3.ADOQuery14.FieldByName('Street').AsString;
                  dv:=Form3.ADOQuery14.FieldByName('DV').AsString;
                  md:=Form3.ADOQuery14.FieldByName('MD').AsString;
                  god:=Form3.ADOQuery2.FieldByName('God').AsString;
                  mes:=Form3.ADOQuery2.FieldByName('Mes').AsString;
                  data:=Form3.ADOQuery2.FieldByName('Data').AsString;
                  sub:=Form3.ADOQuery2.FieldByName('Subs').AsInteger;
                  pk:=Form3.ADOQuery2.FieldByName('PK').AsInteger;
                  upsn:=Form3.ADOQuery2.FieldByName('UPSN').AsInteger;
                  ////
                  Form3.ADOQuery1.SQL.Clear;
                  Form3.ADOQuery1.SQL.Add('INSERT INTO Lgot ([id], [FIO], [House], [Order], [Street], [DV], [MD], [God], [Mes], [Data], [Subs], [PK], [UPSN]) VALUES (:id2, :fio, :hs, :ord, :str, :dv, :md, :god, :mes, :data, :sub, :pk, :upsn)');
                  Form3.ADOQuery1.Parameters[0].Value:=id2;
                  Form3.ADOQuery1.Parameters[1].Value:=fio;
                  Form3.ADOQuery1.Parameters[2].Value:=hs;
                  Form3.ADOQuery1.Parameters[3].Value:=ord;
                  Form3.ADOQuery1.Parameters[4].Value:=str;
                  Form3.ADOQuery1.Parameters[5].Value:=dv;
                  Form3.ADOQuery1.Parameters[6].Value:=md;
                  Form3.ADOQuery1.Parameters[7].Value:=god;
                  Form3.ADOQuery1.Parameters[8].Value:=mes;
                  Form3.ADOQuery1.Parameters[9].Value:=data;
                  Form3.ADOQuery1.Parameters[10].Value:=sub;
                  Form3.ADOQuery1.Parameters[11].Value:=pk;
                  Form3.ADOQuery1.Parameters[12].Value:=upsn;
                  try
                  Form3.ADOQuery1.ExecSQL; // затыкается именно здесь
                  except
                  on e:Exception do
                  end;
                  end;

                При нажатии кнопки в гриде нифига не отображается.... повторное нажатие доводит до ошибки
                [attach=#0][/attach]
                НО... после повторного запуска приложения в гриде таки отображаются строки... (снова строка с 0 и первая, которая соотв. условиям отбора).&!#@%$&^$ :wall:
                Как я понимаю - select * должен выбирать все строки и таблицы, которые соотв условию. Или здесь еще нужно организовывать цикл на заполнение?
                Сообщение отредактировано: WinFack -

                Прикреплённый файлПрикреплённый файл____________________.jpg (61,77 Кбайт, скачиваний: 663)
                  Еще немного подковырял код:
                  ExpandedWrap disabled
                    procedure TForm3.BitBtn2Click(Sender: TObject);
                    var
                    id2: integer;
                    fio: string;
                    ord: string;
                    hs: string;
                    str: string;
                    dv: string;
                    md: string;
                    god: string;
                    mes: string;
                    data: string;
                    sub: integer;
                    pk: integer;
                    upsn: integer;
                    begin
                    if Form3.RadioButton1.Checked then
                    begin
                    Form3.ADOQuery14.SQL.Clear;
                    //Form3.ADOQuery14.SQL.Add('SELECT id,FIO,Order,Street,House,DV,MD FROM selo WHERE  DV="x"');
                    Form3.ADOQuery14.SQL.Add('SELECT * FROM selo WHERE  DV="x"');
                    Form3.ADOQuery14.Open;
                    end
                    else
                    if Form3.RadioButton2.Checked then
                    begin
                    Form3.ADOQuery14.SQL.Clear;
                    //Form3.ADOQuery14.SQL.Add('SELECT id,FIO,Order,Street,House,DV,MD FROM selo WHERE  MD="x"');
                    Form3.ADOQuery14.SQL.Add('SELECT * FROM selo WHERE  MD="x"');
                    Form3.ADOQuery14.Open;
                    end;
                    Form3.Edit1.Text:=Form3.ADOQuery14.FieldByName('id').AsString;
                    id2:=Form3.ADOQuery14.FieldByName('id').AsInteger;
                    if Form3.ComboBox1.Text='ßíâàðü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Jan WHERE id=:id2 AND Mes="ßíâàðü"');//здесь и далее название месяца
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open;
                    end
                    else
                    if Form3.ComboBox1.Text='Ôåâðàëü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Feb WHERE id=:id2 AND Mes="Ôåâðàëü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Ìàðò' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM March WHERE id=:id2 AND Mes="Ìàðò"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Àïðåëü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Apr WHERE id=:id2 AND Mes="Àïðåëü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Ìàé' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM May WHERE id=:id2 AND Mes="Ìàé"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Èþíü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Jun WHERE id=:id2 AND Mes="Èþíü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Èþëü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Jul WHERE id=:id2 AND Mes="Èþëü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Àâãóñò' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Aug WHERE id=:id2 AND Mes="Àâãóñò"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Ñåíòÿáðü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Sept WHERE id=:id2 AND Mes="Ñåíòÿáðü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Îêòÿáðü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Oct WHERE id=:id2 AND Mes="Îêòÿáðü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Íîÿáðü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Nov WHERE id=:id2 AND Mes="Íîÿáðü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end
                    else
                    if Form3.ComboBox1.Text='Äåêàáðü' then
                    begin
                    Form3.ADOQuery2.SQL.Clear;
                    Form3.ADOQuery2.SQL.Add('SELECT * FROM Dec12 WHERE id=:id2 AND Mes="Äåêàáðü"');
                    Form3.ADOQuery2.Parameters[0].Value:=id2;
                    Form3.ADOQuery2.Open
                    end;
                    fio:=Form3.ADOQuery14.FieldByName('FIO').AsString;
                    ord:=Form3.ADOQuery14.FieldByName('Order').AsString;
                    hs:=Form3.ADOQuery14.FieldByName('House').AsString;
                    str:=Form3.ADOQuery14.FieldByName('Street').AsString;
                    dv:=Form3.ADOQuery14.FieldByName('DV').AsString;
                    md:=Form3.ADOQuery14.FieldByName('MD').AsString;
                    god:=Form3.ADOQuery2.FieldByName('God').AsString;
                    mes:=Form3.ADOQuery2.FieldByName('Mes').AsString;
                    data:=Form3.ADOQuery2.FieldByName('Data').AsString;
                    sub:=Form3.ADOQuery2.FieldByName('Subs').AsInteger;
                    pk:=Form3.ADOQuery2.FieldByName('PK').AsInteger;
                    upsn:=Form3.ADOQuery2.FieldByName('UPSN').AsInteger;
                    ////
                    try
                    Form3.ADOQuery1.SQL.Clear;
                    Form3.ADOQuery1.SQL.Add('INSERT INTO Lgot ([id], [FIO], [House], [Order], [Street], [DV], [MD], [God], [Mes], [Data], [Subs], [PK], [UPSN]) VALUES (:id2, :fio, :hs, :ord, :str, :dv, :md, :god, :mes, :data, :sub, :pk, :upsn)');
                    Form3.ADOQuery1.Parameters[0].Value:=id2;
                    Form3.ADOQuery1.Parameters[1].Value:=fio;
                    Form3.ADOQuery1.Parameters[2].Value:=hs;
                    Form3.ADOQuery1.Parameters[3].Value:=ord;
                    Form3.ADOQuery1.Parameters[4].Value:=str;
                    Form3.ADOQuery1.Parameters[5].Value:=dv;
                    Form3.ADOQuery1.Parameters[6].Value:=md;
                    Form3.ADOQuery1.Parameters[7].Value:=god;
                    Form3.ADOQuery1.Parameters[8].Value:=mes;
                    Form3.ADOQuery1.Parameters[9].Value:=data;
                    Form3.ADOQuery1.Parameters[10].Value:=sub;
                    Form3.ADOQuery1.Parameters[11].Value:=pk;
                    Form3.ADOQuery1.Parameters[12].Value:=upsn;
                    Form3.ADOQuery1.ExecSQL;
                    except
                    on e:Exception do
                    end;
                    end;

                  В итоговой таблице пришлось убрать ключевое поле, а точнее выставить его просто числовым и разрешить повторения значений...
                  Теперь ошибок при поиске/вставке нет, но опять-таки в таблицу вставляется только первая строка из условия... причем столько раз, сколько будет нажата кнопка. И содержимое таблицы не отображается, хотя данные записываются... Как можно побороть?
                  Сообщение отредактировано: WinFack -
                    Цитата WinFack @
                    причем столько раз, сколько будет нажата кнопка.

                    Вы же разрешили
                    Цитата WinFack @
                    разрешить повторения значений...

                    Вот она и вставляет сколько раз вы нажали кнопку.
                      Цитата Bas @
                      Цитата WinFack @
                      причем столько раз, сколько будет нажата кнопка.

                      Вы же разрешили
                      Цитата WinFack @
                      разрешить повторения значений...

                      Вот она и вставляет сколько раз вы нажали кнопку.

                      Ну да ладно.... вернуть уникальность полю не так и сложно (правда будет снова ругаться на повторение значений), а вот почему выбирается и соотв. вставляется только первая строка из поиска - вопрос остается открытым...
                        Цитата WinFack @
                        а вот почему выбирается и соотв. вставляется только первая строка из поиска - вопрос остается открытым...

                        Что надо сделать? Вставить в Lgot запись? В нем id это внешний ключ или уникальное поле?
                          Цитата Bas @
                          Цитата WinFack @
                          а вот почему выбирается и соотв. вставляется только первая строка из поиска - вопрос остается открытым...

                          Что надо сделать? Вставить в Lgot запись? В нем id это внешний ключ или уникальное поле?

                          По-факту, да. В таблицу Lgot необходимо вставить все строки, которые соотв. условию.
                          Сам запрос такой:
                          - сначала выбираем все строки из таблицы selo, в которых в поле DV или MD имеет х;
                          - затем, в зависимости от "месяца", который указывается до нажатия кнопки, выбрать из соотв. таблицы строку в которой id равен id из таблицы selo;
                          - после, результирующую строку нужно записать в таблицу Lgot...
                          и этот процесс нужно повторить для всех строк из таблицы selo
                            Блин.. прям какой-то заколдованный круг... Как мысль, решил попробовать заключить процесс селекта по месяцам в цикл:
                            ExpandedWrap disabled
                                  while not Form3.ADOQuery14.Eof do
                                  begin
                              .......
                              Form3.ADOQuery1.Refresh;
                              Form3.ADOQuery14.Next;
                              end;
                              Form3.ADOQuery14.Close;
                              end;

                            Правда толку нет, т.к. в гриде них... не отображается и в таблицу также ничего не записывается...
                              Всё... разобрался. Всем откликнувшимся, огромное спасибо. Тема закрыта
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0679 ]   [ 23 queries used ]   [ Generated: 5.05.24, 22:40 GMT ]