Cześć, za pomocą komponentów ado łączę się z bazą Accessową i MSSQL. Problem jest taki, że mam przenieść dane z bazy Access do bazy MSSQL.
Oto kawałek kodu:
var
SourceQuery, DestQuery: TADOQuery;
begin
try
//import
//pobieranie danych z accessa
//selectSQL działa tak, że pobiera dane do przekazanego ADO(robi open)
myQuery:='SELECT * FROM tb_userInfo WHERE dtExpireDate>'+DateToStr(now);
selectSQL(myQuery, Source, SourceQuery);
//pobranie danych z MSSQL
myQuery:='SELECT * FROM users';
SelectSQL(myQuery, Dest, DestQuery);
DestQuery.First;
SourceQuery.First;
//dodawanie nowych pracowników
while not SourceQuery.Eof do
begin
if IsValueInDataset(SourceQuery.FieldByName('nUserID').AsInteger, 'ID', DestQuery) then
begin //modyfikacja
DestQuery.Locate('ID', SourceQuery.FieldByName('nUserID').AsInteger, []);
DestQuery.Edit;
DestQuery.FieldByName('name').AsString:=SourceQuery.FieldByName('strUserName').AsString;
DestQuery.FieldByName('DID').AsInteger:=SourceQuery.FieldByName('nDepartment').AsInteger; //błąd
DestQuery.Post;
end else
begin //dodanie
DestQuery.Append;
DestQuery.FieldByName('ID').AsInteger:=SourceQuery.FieldByName('nUserID').AsInteger;
DestQuery.FieldByName('name').AsString:=SourceQuery.FieldByName('strUserName').AsString;
DestQuery.FieldByName('DID').AsInteger:=SourceQuery.FieldByName('nDepartment').AsInteger;
DestQuery.Post;
end;
SourceQuery.Next;
end;
Problem polega na tym, że na jednym kompie działa ok, na drugim wywala mi Invalid Variant Type.
Co jest nie tak z linijką:
DestQuery.FieldByName('DID').AsInteger:=SourceQuery.FieldByName('nDepartment').AsInteger;
??
Pole DID w MSSQL jest typu BigInt, natomiast uDepartment w Accessie Numberic(tak mi pokazuje MDB Viewer plus)
Próbowałem też rzutowania na wszelkie możliwe sposoby, a także zamiast AsInteger pisałem AsVariant.