procedure TForm1.N2Click(Sender: TObject);
var
ea:variant;
row,x:integer;
i: word;
ArData: Variant;
begin
try
begin
if opendialog1.Execute then
begin
Screen.Cursor := crSQLWait;
form1.ADOQuery1.open;
form1.ADOQuery4.Close;
form1.ADOQuery4.SQL.Clear;
form1.ADOQuery4.SQL.Add('Delete from Ëèñò2');
form1.ADOQuery4.ExecSQL;
ea:=CreateOleObject('Excel.Application');
ea.Workbooks.Open(opendialog1.FileName);
ea.Visible:=false;
row:=ea.ActiveSheet.UsedRange.Rows.Count;
ArData := VarArrayCreate([1, row, 1, 6], varOleStr);
ArData := ea.ActiveSheet.Range['A1:H' + IntToStr(row)].Value;
for i:=1 to row do begin
adotable1.Open;
adotable1.Append;
adotable1.Fields[0].Value:=ArData[i, 1];
adotable1.Fields[1].Value:=ArData[i, 2];
adotable1.Fields[2].Value:=ArData[i, 3];
adotable1.Fields[3].Value:=strtodate (ArData[i, 4]);<---вот тут видимо проблема
adotable1.Fields[4].Value:=ArData[i, 5];
adotable1.Fields[5].Value:=ArData[i, 6];
adotable1.Fields[6].Value:=ArData[i, 7];
adotable1.Fields[7].Value:=ArData[i, 8];
application.ProcessMessages;
x:=row;
ProgressBar1.Position:=Round(100*i/x);
end;
adotable1.Post;
ea.quit;
adotable1.First;
ProgressBar1.Position:=0;
form1.ADOQuery2.SQL.Clear;
form1.ADOQuery2.SQL.Add('Select Фамилия,Имя,Отчество,Дата,Город,Улица,Дом,Квартира From Лист2 order by Фамилия');
form1.ADOQuery2.Open;
form1.ADOQuery5.Close;
form1.ADOQuery5.Open;
Screen.Cursor := crDefault;
end;
end;
except
begin
Screen.Cursor := crDefault;
ea.quit;
MessageDlg('Ошибка загрузки данных',mtError,[mbOK],0);
exit;
end;
end;
end;
Копирование данных типа Дата из Excel в mdb таблицу
Код:
Выдаёт сообщение о несовпадении типов данных, немогу понять в чём проблема, так как форматы полей в базе и в таблице Экселя совпадают. Что я делаю не так, немогу понять....
подскажите плиз....
проверьте что реально находится в элементе массива. кстати, индексация разве не снуля начинается? (не помню просто)
а я бы подключался к экселю не через оле а как к базе данных, потом бы считывал данные в датасет и постил бы их в акцес. это было бы проще и быстрее. Также теоретически можно заставить эксель соединить с акцесом и перекинуть данные самому.
У тебя строка: "adotable1.Open;" внутри цикла, вынеси перед циклом, зачем каждый раз таблицу открывать?