С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/79: Рейтинг темы: голосов - 79, средняя оценка - 4.90
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112

Импорт из Excel в DBGridEh

17.05.2014, 16:20. Показов 17327. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как импортировать данные из Excel в DBGrid с последующем добавление в БД из DBGrid?

есть пример добавление из Excel в DBGrid, но выдает ошибку:
Внешняя таблица не имеет предполагаемый формат
Пример:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 procedure ConnectToExcel;
procedure TForm1.ConnectToExcel;
var strConn: widestring;
begin
strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' +Edit1.Text+ ';' +
'Extended Properties=Excel 8.0;';
AdoConnection1.Connected:=False;
AdoConnection1.ConnectionString:=strConn;
try
AdoConnection1.Open;
except
ShowMessage('Не могу соединиться с Excel книгой, которая расположена по адресу: '+Edit1.Text+' !');
raise;
end;
end;
 
procedure TForm1.FetchData;
begin
ConnectToExcel;
AdoQuery1.Close;
AdoQuery1.SQL.Text:=Edit2.Text;
try
AdoQuery1.Open;
except
ShowMessage( 'Не могу выполнить Sql запрос ' + Edit1.Text +'!');
raise;
end;
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2014, 16:20
Ответы с готовыми решениями:

DBGridEh в Excel
Требуется открыть содержимое грида в Excel. На данный момент набор данных сохраняется в файле, а открывается только если указать полный...

DBGridEh экспорт в Excel
Привет, как пользоваться функцией экспорта в С++ ? #include "DBGridEhImpExp.h" ..... SaveDBGridEhToExportFile() #include...

Экспорт DBGridEh в Excel с неправильной кодировкой
Доброе время суток, При Const s = 'D:\1.xls'; … SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, DBGridEh, s, true); -...

22
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
17.05.2014, 16:28
Цитата Сообщение от Нуб по СИ Посмотреть сообщение
импортировать данные из Excel в DBGrid с последующем добавление в БД из DBGrid
Начнем с того, что в DBGrid ничего не добавляется и не импортируется! Тем более из DBGrid в БД. DBGrid служит только для отображения информации из таблиц БД (ничего в себе не хранит), которая напрямую в нее заносится.
СУБД Access?

Если да, то эта тема в помощь.
0
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
17.05.2014, 18:00  [ТС]
СУБД SQL Server.
Значит данные загружать из Excel в StringGrid, а потом запросом добавлять в БД?

Ну так тогда как загрузить из Excel в StrinGrid?
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
17.05.2014, 18:18
Цитата Сообщение от Нуб по СИ Посмотреть сообщение
Значит данные загружать из Excel в StringGrid
нет, их нужно загружать в таблицу БД и затем отображать в DBGrid. Для работы с MS SQL Server можно использовать ADO.
Соответственно, можно применить код, который я указал по ссылке, переделав его под свой документ Excel. StringGrid тут вообще ни при чем.
0
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
17.05.2014, 19:04  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
нет, их нужно загружать в таблицу БД и затем отображать в DBGrid. Для работы с MS SQL Server можно использовать ADO.
Соответственно, можно применить код, который я указал по ссылке, переделав его под свой документ Excel. StringGrid тут вообще ни при чем.
Нее, суть в том, что мне надо так: есть данные в екселе и нужно загрузить в программу, подсчитать среднее значение и вывести, так же надо записать в БД по каким данным считалось (таблица из екселя)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
17.05.2014, 19:52
Нуб по СИ, Вам ведь надо загрузить данные из Excel в программу, так? Загружайте их сразу в БД, выполняйте там же расчет и т.д.
0
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
17.05.2014, 20:54  [ТС]
Т.е. надо сначала из Excel загрузить в БД с помощью ADO, а потом вывести эти данные из БД в Грид загруженное для дальнейшей обработки?

Как загрузить данные из Excel в SQL Server в определенные поля?
Есть допустим таблица с полями (ID, ID_auto, name, god...)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
17.05.2014, 21:50
Цитата Сообщение от Нуб по СИ Посмотреть сообщение
Т.е. надо сначала из Excel загрузить в БД с помощью ADO, а потом вывести эти данные из БД в Грид загруженное для дальнейшей обработки?
именно так.

Цитата Сообщение от Нуб по СИ Посмотреть сообщение
Как загрузить данные из Excel в SQL Server в определенные поля?
Я Вам дал пример по ссылке выше. Что непонятно? В чем проблема?

Вот, еще раз
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Uses ComObj;
 
const xlCellTypeLast=$000000B;
var
excel:OLEVariant;
i, j, id,  idauto, god:integer;
name:string;
begin
excel :=CreateOleObject('Excel.Application');
excel.DisplayAlerts :=False;//отключаем запросы Excel
if not Dialog1.Execute then Exit;
try
excel.workbooksOpen(OpenDialog1.FileName); //открываем книгу Excel
i :=2;   //считываем данные со 2-й строки книги (или нужной Вам)
j := excel.ActiveCell.SpecialCells(xlCellTypeLast).Row;// последняя непустая строка
  // Процедура загрузки
   while i<>j do begin //до последней заполненной строки Excel документа
  id :=excel.cells[i,1].value; //считываем значение 1-й колонки (если оно берется из файла), 
                                // это зависит от нумерации колонок с Вашими данными
  idauto :=excel.cells[i,2].value; //2-й колонки (id машины)
  name :=excel.cells[i,3].value; //3-й… (название)
  god:=excel.cells[i,4].value;  // (год выпуска)
 with ADOTable1 do
begin
 Insert; // соответственно добавляем значения
//в поля таблицы БД
  FieldByName('ID').AsInteger :=id; 
  FieldByName('ID_AUTO').AsInteger :=idauto;
  FieldByName('NAME').AsString :=name;
  FieldByName('GOD').AsInteger :=god; //отдельно год
   end;  
  inc(i); //переходим на следующую строку в Excel
……
  end;
……
    Excel.ActiveWorkBook.Close;
    Excel.Quit; // после завершения работы закрываем объект Excel
    Excel:=Unassigned;
    except;
  end;
  end;
1
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
18.05.2014, 09:54  [ТС]
Ошибка вылазит на строке :
Delphi
1
excel.workbooksOpen(dlgOpen1.FileName);
Миниатюры
Импорт из Excel в DBGridEh  
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 12:55
Нуб по СИ,
Delphi
1
Excel.WorkBooks.Open(dlgOpen1.FileName);
1
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
18.05.2014, 15:02
Интересное тема . Но как то у меня это конструкция не работает .

1. MS SQL

T-SQL
1
2
3
4
5
6
7
8
9
create database test;
---------------------------------------------------
create table tovar
(
t_id int identity,
t_name nvarchar(40) not null,
t_kol_vo integer,
t_price money
);
2.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TfrmMain.btnImportClick(Sender: TObject);
 const xlCellTypeLast=$000000B;
  var
  excel:OLEVariant;
  i, j, id:integer;
  s1:string;       // , s2, s3, s4, s5
  s2: Integer;
  s3: string;
begin
 excel :=CreateOleObject('Excel.Application');
  excel.DisplayAlerts :=False; 
  if not OpenDialog1.Execute then Exit;
    try
     Excel.WorkBooks(OpenDialog1.FileName);  
     i :=1;  
     j := excel.ActiveCell.SpecialCells(xlCellTypeLast).Row; 
      while i<>j do
      begin
        s1 :=excel.cells[i,1].value; 
        s2 :=excel.cells[i,2].value; 
        s3 :=excel.cells[i,3].value;  
        qryTovar.Insert;  
        //в поля таблицы БД
        qryTovar.FieldByName('t_id').AsInteger := id;
        qryTovar.FieldByName('t_name').AsString :=s1;  //t_id
        qryTovar.FieldByName('t_kol_vo').AsInteger :=s2;
        qryTovar.FieldByName('t_price').AsString :=s3;
        inc(i); //переходим на следующую строку в Excel
        qryTovar.Post; // Думаю что Post тоже надо 
      end;
    excel.Quit;  
    excel:=Unassigned;
    except
 
    end;
end;
 
end.
Файл Excel для тест
Вложения
Тип файла: xlsx Лист Microsoft Office Excel.xlsx (10.9 Кб, 55 просмотров)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 16:21
Прилагаю демо пример по загрузке файла от xxbesoxx в таблицу БД Access. Excel файл в архиве с проектом.
Вложения
Тип файла: rar import from excel to access db.rar (340.4 Кб, 291 просмотров)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 16:22
Цитата Сообщение от xxbesoxx Посмотреть сообщение
qryTovar.Post; // Думаю что Post тоже надо
необязательно. Данные прекрасно сохраняются в таблице.
1
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
18.05.2014, 17:19  [ТС]
Можно как нибудь без использования компонента Table, а с Query?
Не нравится мне этот table

Ошибку выдает на строке где FieldByName....
Миниатюры
Импорт из Excel в DBGridEh  
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
18.05.2014, 17:23
Да огромное спасибо . Работает делает import . Но удивительно что добавляет личное строк . Работаю через AboQuery и субд ms.sql server

Структура таблиц тоже самое . Но выложу проект и видео как он меня добавляет личное строк
Вложения
Тип файла: rar Import_iz_Excel_MS_SQL_Delphi.rar (3.50 Мб, 288 просмотров)
Тип файла: rar Video_Имп_Excel.rar (4.46 Мб, 143 просмотров)
0
5 / 5 / 5
Регистрация: 09.02.2011
Сообщений: 112
18.05.2014, 17:29  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
Прилагаю демо пример по загрузке файла от xxbesoxx в таблицу БД Access. Excel файл в архиве с проектом.
Вложения
Тип файла: rar import from excel to access db.rar (340.4 Кб, 1 просмотров)
Странно, в некоторых файлах не все загружает строки, а в некоторых лишние пустые строки (в данном примере 3-4 пустые строки)
Вложения
Тип файла: xls Excel1.xls (23.5 Кб, 33 просмотров)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 17:49
Цитата Сообщение от Нуб по СИ Посмотреть сообщение
Можно как нибудь без использования компонента Table, а с Query?
С ADOQuery можно аналогичным образом добавлять данные или через SQL.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
18.05.2014, 17:57
Я прошу прощения! А пустые строки почему он добавляет ?
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 18:16
Цитата Сообщение от xxbesoxx Посмотреть сообщение
А пустые строки почему он добавляет ?
Не совсем понял причину такого поведения, но я скопировал таблицу в новый файл, сохранил в формате 2003-го и пустые строки перестали добавляться в таблицу.
Чтобы не терялась последняя строка, нужно еще добавить в начале цикла единицу

Delphi
1
2
 while i<>j+1 do
...
Сам файл
Вложения
Тип файла: xls for import.xls (27.0 Кб, 43 просмотров)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,249
18.05.2014, 18:29
P.S. Сейчас еще сохранил этот файл в новом формате Excel, тоже без проблем добавил - нет пустых записей. Видимо, дело в Вашем файле.
Миниатюры
Импорт из Excel в DBGridEh  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2014, 18:29
Помогаю со студенческими работами здесь

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в общую базу в Access. Для отчета...

Импорт внешних данных в Excel из Excel
Дайте, пожалуйста, ссылку или название книги и главы, где есть описание этого подробно. Что-то вроде учебника.

Обработка Excel и импорт из Excel в Access
Прошу совета профессионалов. С Excel-м ранее дел не имел. Задание: файлы Excel из одной папки отредактировать, и сохранить в другой. Из...

Excel -> Access -> Excel, импорт - экспорт
Добрый день! Есть табель учета рабочего времени в таблице Excel, задача - переместить данные со всех листов книги в DB Access, позже...

Импорт таблицы Excel в БД Access через VBA через кнопку в Excel
Форумчане, помогите, пожалуйста с кодом макроса в excel. Задача состоит в следующем:в файле обработчик через кнопку импортировать данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru