![]() |
|
#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; |
#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 Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#6
|
|||
|
|||
![]() Цитата:
А сколько записей? И отключи визуальные компоненты, если прицеплены (от обоих источников данных). |