- TADOConnection — 2 шт
- TADOQuery — 2 шт
- TEdit — 2 шт
- TButton — 2 шт
- TBitBtn — 2 шт
- TProgressBar
- TOpenDialog
procedure TForm1.Button1Click(Sender: TObject);
begin
try
if OpenDialog1.Execute then
begin
Edit1.Text:=OpenDialog1.FileName;
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Файлы Excel;DBQ='+OpenDialog1.FileName+';DefaultDir='+ExtractFileDir(OpenDialog1.FileName)+';DriverId=790;MaxBufferSize=2048;PageTimeout=5;"';
ADOConnection1.Connected:=True;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$]');
ADOQuery1.Active:=True;
end;
except
on e:Exception do
end;
end;
Как видите мы вручную прописываем путь подключения и вручную указываем Connected - True. Да кстати чуть не забыл настройте за ранее AdoConnection1 и AdoConnection2, в свойствах LongPromt выставим — False, а в свойстве Mode - cmShareDenyNone. Итак данные из Excel файла мы получили, затем нам надо подключить нашу БД MS Access, делается это анологичным способом, на событие Button2 - OnClick пишем
procedure TForm1.Button2Click(Sender: TObject);
begin
try
if OpenDialog1.Execute then
begin
Edit2.Text:=OpenDialog1.FileName;
ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+OpenDialog1.FileName+';Persist Security Info=False';
ADOConnection2.Connected:=True;
end
else
exit;
except
on e:Exception do
end;
end;
Как видите тоже все вручную подлючаем, только отличается подключение от подключения MS Excel - драйвером БД. Все данные у нас получены, нам придется теперь создать таблицы в MS Access, чтобы потом записывать туда данные из Excel. Для это делаем следующее.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j:integer;
name_fields:string;
begin
try
name_fields:='';
for i:=0 to ADOQuery1.FieldCount-1 do
begin
name_fields:=name_fields+'pole'+IntToStr(i)+' MEMO,';
end;
Delete(name_fields,length(name_fields),1);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('CREATE TABLE OUT ('+name_fields+')');
ADOQuery2.ExecSQL;
except
on e:Exception do
Application.MessageBox(Pchar(e.Message),'Внимание',MB_OK);
end;
function ToString(Value: Variant): String;
begin
case TVarData(Value).VType of
varSmallInt,
varInteger : Result := IntToStr(Value);
varSingle,
varDouble,
varCurrency : Result := FloatToStr(Value);
varDate : Result := FormatDateTime('dd/mm/yyyy', Value);
varBoolean : if Value then Result := 'T' else Result := 'F';
varString : Result := Value;
else Result := '';
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j:integer;
name_fields:string;
begin
try
name_fields:='';
for i:=0 to ADOQuery1.FieldCount-1 do
begin
name_fields:=name_fields+'pole'+IntToStr(i)+' MEMO,';
end;
Delete(name_fields,length(name_fields),1);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('CREATE TABLE OUT ('+name_fields+')');
ADOQuery2.ExecSQL;
ADOQuery1.First;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT * FROM OUT');
ADOQuery2.Active:=True;
ADOQuery2.First;
for i:=0 to ADOQuery1.RecordCount-1 do
begin
ProgressBar1.Max:=ADOQuery1.RecordCount;
ADOQuery2.Insert;
for j:=0 to ADOQuery1.FieldCount-1 do
begin
ADOQuery2.Fields[j].AsVariant:=ToString(ADOQuery1.Fields.Fields[j].AsVariant);
end;
ProgressBar1.Position:=ProgressBar1.Position+1;
ADOQuery2.Post;
ADOQuery1.Next;
end;
except
on e:Exception do
Application.MessageBox(Pchar(e.Message),'Внимание',MB_OK);
end;
end;