![]() |
|
|
#1
|
|||
|
|||
|
Задача:
Нужно из одной субд перенести таблицы с данными в другую субд. FoxPro --> MSSQL Коннект ADOConnection - ADOQuery наладил с двух сторон. Как теперь сгенерировать запрос Create table из данных ADOQuery(FoxPro)?? |
|
#2
|
|||
|
|||
|
Никак. Если хочется перетащить данные из одной СУБД в другую, то варианты:
1. воспользоваться спец. тулами, в MS SQL есть специальный тул для импорта данных. 2. Выгрузить в текст и загрузить из текста (если не ошибаюсь, в обеих БД есть такая возможность). 3. На Дельфи - честно идти по одному датасету и переписывать записи в другой, типа: Код:
while Not ADOQuery1.EOF Do
Begin
ADOQuery2.Applend;
For I := 0 To ADOQuery1.Fields.count-1 Do
ADOQuery2.Fields[i].Value := ADOQuery1.Fields[i].Value;
ADOQuery2.Post;
ADOQuery1.Next;
end; |
|
#3
|
||||
|
||||
|
Можно перетащить через Access или BDE DataPump, в старых версиях Delphi была.
|
|
#4
|
|||
|
|||
|
Код:
if SysUtils.FindFirst(s+CheckListBox1.Items[i]+'\*.dbf',faAnyFile,f)=0 then
repeat
//if (f.name='.') or (f.name='..') then continue;
if (f.Attr=32) and FileExists(s+CheckListBox1.Items[i]+'\'+f.Name) then begin
SQL.Text:='select * from \'+CheckListBox1.Items[i]+'\'+f.Name;
Open;
First;
ADOMSSQL.SQL.Text:= 'select * from protocol';
try
ADOMSSQL.Open;
except on E:Exception do showmessage(E.Message);
end;
// цикл вставки
DisableControls;
ADOMSSQL.DisableControls;
while not EOF do //долгаааааааа
begin
ADOMSSQL.Insert;
ADOMSSQL.FieldByName('m_rec').Value:= FieldByName('m_rec').Value;
ADOMSSQL.FieldByName('d_rec').Value:= FieldByName('d_rec').Value;
ADOMSSQL.FieldByName('p_rec').Value:= FieldByName('p_rec').Value;
ADOMSSQL.FieldByName('s_rec').Value:= FieldByName('s_rec').Value;
ADOMSSQL.FieldByName('sensor').Value:= FieldByName('sensor').Value;
ADOMSSQL.FieldByName('date').Value:= FieldByName('date').Value;
ADOMSSQL.FieldByName('time').Value:= FieldByName('time').Value;
ADOMSSQL.FieldByName('dopmess').Value:= FieldByName('dopmess').Value;
ADOMSSQL.FieldByName('alarm').Value:= FieldByName('alarm').Value;
ADOMSSQL.Post;
Next;
end;
ADOMSSQL.EnableControls;
EnableControls;
end; // if
//showmessage(inttostr(SysUtils.FindNext(f))+' - '+f.Name);
until (SysUtils.FindNext(f)<>0);
Сделал пока так, но очень долго он добавляет. Ужасно долго. Может что-то можно исправить, или другое предложить? А что это за DataPump (у меня D6 установлена)? |
|
#5
|
||||
|
||||
|
Цитата:
Код:
object DestTable: TADOTable CacheSize = 65536 CursorLocation = clUseServer CursorType = ctOpenForwardOnly ExecuteOptions = [eoAsyncFetch] TableDirect = True end Цитата:
|
|
#6
|
|||
|
|||
|
Цитата:
А сколько записей? И отключи визуальные компоненты, если прицеплены (от обоих источников данных). |