- 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;
Хочу заметить, что в настоящее время очень популярны портативные компьютеры. К ним относятся и КПК и ноутбуки. Главным преимуществом их являются мобильность и размеры. Если Вы хотите ноутбук витебск, то Вам подберут ноутбук, удовлетворяющим Вашим требованиям и Вашему бюджету, а самое главное очень хорошо качества. |
Автор статьи - Andrey53
Похожие записи
Метки: Access, Ado, ADoconnection, AdoQuery, Excel, MS Access, MS Excel, конвертация данных. конвертация БД
А как наоборот из Access в Excel переконвертировать и сохранить в указанном месте. Данные скажем ADO DBGridEh Access при нажатии кнопки сохранить как, сохраняет данные в указанное пользователем место в файле Еxcel.
Точно также как и сейчас, делаем запрос в Access и этот запрос по одной записи записываем в excel-лист, будет время у меня рассмотрю это.!
Добрый день, ознакомился с вашей статьей. Но возникает ошибка при компиляции:
[DCC Error] Unit1.pas(118): E2034 Too many actual parameters
ругается на данную строчку:
ADOQuery2.Fields[j].AsVariant:=ToString(ADOQuery1.Fields.Fields[j].AsVariant);
Здравствуйте, Мой исходник не компилирует? если Вы делаете свой, то не забудьте описать функцию ToString, которая преобразует любые значения в текстовые
По-русски надо писать ВыберИте файл, а не выберЕте.
спасибо
Привет Андрей. Вот вынужден обратиться к тебе снова, поскольку нигде не могу найти вразумительного объяснения, как в ADO ACCESS, по нажатию клавиши Button, данные из DBGridEh сохранить в Excelевский файл? Если знаешь, объясни пожалуйста…
можно импортировать в Excel, а можно создать заготовку Excel-файла с нужнеыми полями и подключить его как БД и с помощью запросов переносить туда данные
а как конвертировать не в мемо а в другие форматы, у меня проблема дбгрид не отображает данные типа мемо
Доброго времени суток Андрей!
При исполнении запроса к таблице Exl выдает следующее » Missing Connection or ConnectionString» Почему?
Значит не правильное подключение делаете!