Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.01.2015, 23:21
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию Конвертер СУБД

Задача:
Нужно из одной субд перенести таблицы с данными в другую субд.
FoxPro --> MSSQL
Коннект ADOConnection - ADOQuery наладил с двух сторон.
Как теперь сгенерировать запрос Create table из данных ADOQuery(FoxPro)??
Ответить с цитированием
  #2  
Старый 16.01.2015, 01:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Никак. Если хочется перетащить данные из одной СУБД в другую, то варианты:
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;
Будет работать, если нет BLOB полей, порядок и типы полей совпадают.
Ответить с цитированием
  #3  
Старый 16.01.2015, 02:31
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Можно перетащить через Access или BDE DataPump, в старых версиях Delphi была.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #4  
Старый 02.02.2015, 16:39
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Код:
    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  
Старый 02.02.2015, 19:24
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от aqula
Может что-то можно исправить, или другое предложить?
Настройки нужно выставить для пакетной обработки, для чего почитать справку об их смысле. В одной из пакетных программ для Access настройки у меня такие:
Код:
object DestTable: TADOTable
  CacheSize = 65536
  CursorLocation = clUseServer
  CursorType = ctOpenForwardOnly
  ExecuteOptions = [eoAsyncFetch]
  TableDirect = True
end
Цитата:
Сообщение от aqula
А что это за DataPump (у меня D6 установлена)?
BDE DataPump, интерфейс в виде мастера.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #6  
Старый 03.02.2015, 00:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от aqula
Сделал пока так, но очень долго он добавляет. Ужасно долго. Может что-то можно исправить, или другое предложить?
А что это за DataPump (у меня D6 установлена)?

А сколько записей?
И отключи визуальные компоненты, если прицеплены (от обоих источников данных).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025