Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.07.2022
Сообщений: 2

Загрузка данных из Excel в БД MS SQL server

10.08.2022, 10:17. Показов 2069. Ответов 7

Студворк — интернет-сервис помощи студентам
Доброго времени суток, столкнулась с такой проблемой - необходимо брать файл Exel из указанной папки и заносить данные из него в БД, таблица Exel имеет определенный вид и для каждого столба из него в БД создана таблица с такими же названиями полей. Проблема состоит в том что, Exel таблица подключена через ADOconnection и с помощью ADOQuery выводиться в 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit Unit5;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB,
  Data.Win.ADODB, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.StdCtrls, ComObj;
 
type
  TForm5 = class(TForm)
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    Timer1: TTimer;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Button1: TButton;
    ADOConnection2: TADOConnection;
    ADOQuery2: TADOQuery;
    OpenDialog1: TOpenDialog;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form5: TForm5;
 
implementation
 
{$R *.dfm}
 
procedure TForm5.Button1Click(Sender: TObject);
begin
 
end;
 
procedure TForm5.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
 
  ADOConnection1.Connected := False;
  ADOConnection1.ConnectionString := 'Provider=SQLNCLI11.1;Persist Security Info=False;User ID=sa;password=opa579zx;Initial Catalog=123;Data Source=tcp:localhost,11357;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=DESKTOP-CSU6SAP;Initial File Name=""; ';
  ADOConnection1.ConnectionString := ADOConnection1.ConnectionString + 'Use Encryption for Data=False;Tag with column collation when possible=False;MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=False;Application Intent=READWRITE;';
  ADOConnection1.Connected := True;
 
  ADOConnection2.Connected := False;
  ADOConnection2.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Work5\Desktop\Droch\Exel\OTPB_Ecology_20220802.xlsx;Mode=Share Deny None; extended properties="excel 12.0 macro;HDR:YES"; ';
  ADOConnection2.Connected := True;
 
  ADOQuery2.Active := False;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('SELECT * FROM  [OTPB_Ecology_20220802.xlsx$]');
  ADOQuery2.Active := True;
 
  ADOQuery1.Active := False;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * FROM [123].[dbo].[Exel] ');
  ADOQuery1.Active := True;
end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2022, 10:17
Ответы с готовыми решениями:

Загрузка поля базы данных Sql Server в Label C#
Существует таблица пользователей с полями Id и Name. Как загрузить поле Name в label или Textbox из базы. Запрос выглядит так :Select name...

Перенос данных из Excel в две таблицы баз данных SQL-Server
Люди добрые помогите пожалуйста. Есть таблица Excel, я сделал перенос всех данных из нее в таблицу SQL-Server. Нужно, чтобы паралельно...

Импорт данных из Excel в базу данных SQL Server 2014
Добрый день! Мне нужно импортировать данные из Excel в базу данных SQL Server 2014, на этом форуме нашла похожую тему и попыталать...

7
Модератор
 Аватар для D1973
9926 / 6462 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
10.08.2022, 11:46
Цитата Сообщение от SatanavPigame Посмотреть сообщение
и для каждого столба из него в БД создана таблица с такими же названиями полей.
Это вообще как? На примере можете показать?
Цитата Сообщение от SatanavPigame Посмотреть сообщение
Exel таблица подключена через ADOconnection и с помощью ADOQuery выводиться в DBGrid
Вот не надо ничего никуда выводить. Соединились с Excel, выполнили запрос, получили набор данных. Теперь соединились с БД и, в цикле обходя ранее полученный набор данных, формируем запрос на заполнение таблицы БД
0
408 / 242 / 88
Регистрация: 28.04.2022
Сообщений: 1,207
10.08.2022, 12:12
Цитата Сообщение от SatanavPigame Посмотреть сообщение
вопрос как теперь перенести данные в БД поставил меня в тупик.
1) Для начала дайте человеческое имя для ADOQuery1.
2) Далее делаете цикл примерно такого вида:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
   ADOQuery1.DisableControls;    
try
    while not ADOQuery1.EoF do
       begin
            
           { Здесь берем данные из текущей записи в ADOQuery1 
            и помещаем их туда куда надо }
 
           ADOQuery1.Next;  // переходим на след. запись
       end;
finally
   ADOQuery1.EnableControls;
end;
1
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
10.08.2022, 15:04
А вы в курсе, что MSSQL имеет собственные средства импорта? Там есть даже специальный мастер, который позволяет это делать в несколько шагов.
0
0 / 0 / 0
Регистрация: 12.07.2022
Сообщений: 2
10.08.2022, 15:07  [ТС]
В курсе, но мне поставили задачу сделать это через код
0
5980 / 4555 / 1095
Регистрация: 29.08.2013
Сообщений: 28,184
Записей в блоге: 3
12.08.2022, 14:43
Цитата Сообщение от SatanavPigame Посмотреть сообщение
а вот вопрос как теперь перенести данные в БД поставил меня в тупик.
для начала выводишь данные из экселя в Stringgrid (на первых порах)
потом проходишь по гриду и для каждой строки формируешь запрос INSERT
типа
Code
1
insert into mytable (column1,column2,column3) select'+ stringgrid.cells[0,0]+','+ stringgrid.cells[0,1]+','+ stringgrid.cells[0,2]
и выполняешь эту строку

когда все отработает, можно отказываться от stringgrid - читаешь строку из файла, формируешь запрос, выполняешь
когда и это отработает, то можно с помощью Firedac формировать массив запросов и их выполнять
0
408 / 242 / 88
Регистрация: 28.04.2022
Сообщений: 1,207
13.08.2022, 01:32
Цитата Сообщение от qwertehok Посмотреть сообщение
запрос INSERT типа
Работать, в принципе, будет, но синтаксис странный, не говоря уже о конкатенации, которую нагляднее делать через формат:
Delphi
1
format('%s, %s, %s;', [stringgrid.cells[0, 0], stringgrid.cells[0, 1], stringgrid.cells[0, 2]]);
Если задействуются все поля таблицы, то гораздо проще (имена полей не нужны):
SQL
1
INSERT INTO MyTable VALUES (:Value1, :Value2, :Value3);
Если не все поля, то тоже несложно:
SQL
1
INSERT INTO MyTable (Field1, Field2, Field3) VALUES (:Value1, :Value2, :Value3);
Далее присваиваем параметрам значения и отправляем код на сервер.
0
 Аватар для Beltar
831 / 445 / 39
Регистрация: 05.05.2022
Сообщений: 3,075
31.08.2022, 09:15
А вы в курсе, что MSSQL имеет собственные средства импорта? Там есть даже специальный мастер, который позволяет это делать в несколько шагов.
Для разового импорта пойдет, а если юзеры типа "баба в офисе" должны эти файлы брать и заносить в базу, и никакого доступа к Managment Studio у них нет? Ну и это может быть файл с определенной структурой, который надо не построчно перегонять, а как-то парсить.

Насчет вывода в StringGrid и т. п. программы все-таки делаются не для компьютеров, а для людей делаются, и для юзеров, и для программистов, если можно стандартными средствами работы с БД создать превьюшку, то заморачиваться с ручным выводом в StringGrid, который надо руками чистить, руками ставить размеры, как-то странно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2022, 09:15
Помогаю со студенческими работами здесь

Выгрузка данных из SQL Server в Excel
Как сделать запрос через OPENROWSET желательно без OLEDB Добавлено через 4 часа 15 минут insert into ...

Загрузка изображения в базу данных SQL server из ASP.NET страницы
Доброго время суток! Написал страницу для загрузки изображений в базу даних, на локальной машине работает отлично, залил сайт на сервер,...

Экспорт данных из MS SQL Server 2005 в MS Excel 2003-2007
Здравствуйте! У меня такой вопрос. Можно ли средствами T-SQL экспортировать данные в файл MS Excel 2003-2007. Полная версия...

Импорт данных из Excel в SQL Server 2005 Express Edition(для чайника)
Всегда импортировал данные при помощи: SELECT * INTO ApproverList FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data...

В чём лучше сделать базу данных: в MS Access или связке Excel+SQL Server?
Приветствую! Так как склоняюсь в сторону MS Access, поэтому разместил вопрос в этой ветке. Есть таблица в гугл докс, которая считает...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru