Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.01.2026, 06:42
ngur ngur вне форума
Прохожий
 
Регистрация: 14.01.2026
Сообщения: 3
Версия Delphi: delphi12
Репутация: 10
По умолчанию Добавление данных из SCV файла в таблицу базы данных

Здравствуйте, подскажите пожалуйста как реализовать такое:
на форме два dbgrid,один отображает данные одного dataset через FDQuery,
другой dbgrid отображает данные другого dataset через ADOQury который смотрит на CSV файл. Нажимая кнопку все данные столбцов из CSV должны добавится в столбцы таблицы базы данных. Не понимаю с чем работать либо с DataSetами,либо как то еще.....Если не сложно то помогите кодом??
Ответить с цитированием
  #2  
Старый 20.01.2026, 16:18
depotop depotop вне форума
Прохожий
 
Регистрация: 20.01.2026
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Для реализации этой задачи в Delphi 7 или более современных версиях наиболее эффективным способом будет работа на уровне объектов DataSet. Поскольку данные в DBGrid уже отображаются, это означает, что оба набора данных (ADOQuery для CSV и FDQuery для БД) открыты и готовы к чтению/записи.
Наиболее простой и понятный алгоритм — это цикл по исходному набору данных (CSV), внутри которого для каждой строки выполняется команда добавления в целевой набор данных (БД).


Код:
 procedure TForm1.btnImportClick(Sender: TObject);
begin
  // Отключаем визуальное обновление DBGrid для ускорения процесса
  FDQuery1.DisableControls;
  ADOQuery1.DisableControls;
  try
    // Переходим в начало CSV-файла
    ADOQuery1.First;
    
    while not ADOQuery1.Eof do
    begin
      // Переводим целевую таблицу в режим добавления записи
      FDQuery1.Append;
      
      // Копируем данные по именам полей
      // Замените 'FieldName' на реальные названия ваших колонок
      FDQuery1.FieldByName('TargetColumn1').Value := ADOQuery1.FieldByName('SourceColumn1').Value;
      FDQuery1.FieldByName('TargetColumn2').Value := ADOQuery1.FieldByName('SourceColumn2').Value;
      FDQuery1.FieldByName('TargetColumn3').Value := ADOQuery1.FieldByName('SourceColumn3').Value;
      
      // Сохраняем запись в БД
      FDQuery1.Post;
      
      // Переходим к следующей строке в CSV
      ADOQuery1.Next;
    end;
    
    ShowMessage('Данные успешно импортированы!');
  finally
    // Включаем обновление интерфейса обратно
    ADOQuery1.EnableControls;
    FDQuery1.EnableControls;
  end;
 end;
Админ: Пользуемся тегами при оформлении кода!


Если данных в CSV очень много (десятки тысяч строк), использование метода Append/Post может быть медленным, так как каждый Post отправляет отдельный запрос к серверу. В таком случае для FDQuery (FireDAC) лучше использовать механизм Batch Move или сформировать один SQL-запрос типа INSERT INTO ... SELECT, но работа через циклы DataSet является самой гибкой, так как позволяет легко добавить проверки данных или трансформацию типов «на лету».

Убедитесь, что свойства ReadOnly у целевого FDQuery и его DataSource установлены в False, иначе метод Append вызовет ошибку доступа.

Последний раз редактировалось Admin, 25.01.2026 в 11:55.
Ответить с цитированием
Этот пользователь сказал Спасибо depotop за это полезное сообщение:
ngur (21.01.2026)
  #3  
Старый 21.01.2026, 01:35
ngur ngur вне форума
Прохожий
 
Регистрация: 14.01.2026
Сообщения: 3
Версия Delphi: delphi12
Репутация: 10
По умолчанию

Спасибо большое что помогли
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2026