Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование данных типа Дата из Excel в mdb таблицу

47K
14 марта 2009 года
Dimok82
1 / / 14.03.2009
Копирую данные из Excel в mdb но вот проблема, немогу корректно перенести поле Дата, поля в Excel и MDB имеют одинаковый формат, Типа (01.01.9999), собственно сам исходник:
Код:
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;

Выдаёт сообщение о несовпадении типов данных, немогу понять в чём проблема, так как форматы полей в базе и в таблице Экселя совпадают. Что я делаю не так, немогу понять....
подскажите плиз....
1
14 марта 2009 года
kot_
7.3K / / 20.01.2000
а с чего вы взяли что они имеют одинаковый формат? Если мерседес и запорожец - автомобили - это вовсе не значит что у них одинаковы формат.
проверьте что реально находится в элементе массива. кстати, индексация разве не снуля начинается? (не помню просто)
6
15 марта 2009 года
George
4.1K / / 05.01.2007
а я бы подключался к экселю не через оле а как к базе данных, потом бы считывал данные в датасет и постил бы их в акцес. это было бы проще и быстрее. Также теоретически можно заставить эксель соединить с акцесом и перекинуть данные самому.
11K
15 марта 2009 года
proc
32 / / 23.07.2006
Видимо kot_ прав, дело не в формате полей, а в том что функция strtodate (ArData[i, 4]) выдает исключение, т.е. в ArData[i,4] лежит строка, которую Delphi не может перевести в дату. А если просто вбить строку strtodate('01.01.1999'), ошибка выскакивает?

У тебя строка: "adotable1.Open;" внутри цикла, вынеси перед циклом, зачем каждый раз таблицу открывать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог