На главную Наши проекты:
Журнал   ·   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_
  
> Запись данных из DBGrid в базу данных
    Здравствуйте, я столкнулся со следующей задачей.
    Записи DBGrid формируются с помощью sql запроса в query и отображаются в dbgrid.
    Мне необходимо записать данные из DBGrid в другую таблицу, я думаю лучше через AdoTable.
    Но чтобы записи в таблице не повторялись. Вот пример:

    ExpandedWrap disabled
      DBGZhur.DataSource.DataSet.First;
      dm.ATUsp.First;
      for k:=0 to DBGZhur.DataSource.DataSet.FieldCount do    begin
        if (DBGZhur.DataSource.DataSet.Fields.FieldByName('Класс').Asstring = DM.ATUsp.FieldByName('Класс').Asstring)
      and (DBGZhur.DataSource.DataSet.Fields.FieldByName('Предмет').Asstring = DM.ATUsp.FieldByName('Предмет').Asstring)
      and (DBGZhur.DataSource.DataSet.Fields.FieldByName('Дата').Asstring = DM.ATUsp.FieldByName('Дата').Asstring)
      then
         beep
         else                  begin
         DM.ATUsp.Append;
      DM.ATUsp.FieldByName('Класс').Asstring:=DBGZhur.DataSource.DataSet.Fields.FieldByName('Класс').Asstring;
      DM.ATUsp.FieldByName('Предмет').Asstring:=DBGZhur.DataSource.DataSet.Fields.FieldByName('Предмет').Asstring;
      DM.ATUsp.FieldByName('Дата').Asstring:=DBGZhur.DataSource.DataSet.Fields.FieldByName('Дата').Asstring;
      end;  DM.ATUsp.Next; DBGZhur.DataSource.DataSet.Next;
      end;
      DM.ATUsp.Close;
      DM.ATUsp.Open;

    Данный программный код записывает данные в таблицу но условие не работают и записи повторяются
    Буду очень благодарен, если поможете. :)
    Сообщение отредактировано: Bas -
      Цитата telepusik321 @
      необходимо записать данные из DBGrid в другую таблицу
      Не из DBGrid, а из запроса. Грид только отображает результаты.
      Цитата telepusik321 @
      думаю лучше через AdoTable

      А ещё лучше вот так (процедура для Oracle, ЕМНИП, даже для Акцесса само тело процедуры можно упихать в TADOCommand):
      ExpandedWrap disabled
        procedure saveTMPVariants(objID in int) as
        begin
          insert into dat_variants (obj_id, kind_name, geoname, src_id)
                 select objID, kind_name, geoname, src_id
                   from tmp_variants tmp
                  order by tmp.v_id;
          commit;
        end saveTMPVariants;

      Теория тут https://technet.microsoft.com/ru-ru/library...sql.105%29.aspx.
        В приведенном программном коде запись в бд уже осуществляется. Проблема лишь в том, что записываются совершенно одинаковые записи. Мне надо подкорректировать условие, чтобы записи в таблице не повторялись. У самого никак не получается((((
          Для начала - Append() есть, а вместо парного Post() для него ты вызываешь Next() (и оно работает???).
          Второе - у тебя есть результаты запроса в каком-то Query. Вот и читай из него, а не из грида.
          Третье - тыц!. Или забудь про базы данных. Цикл for не для них придуман.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0215 ]   [ 15 queries used ]   [ Generated: 13.07.25, 13:17 GMT ]