Конференция "Базы" » ADO. Работа с двумя провадерами [D7, dBase, FoxPro]
 
  • Очень злой (24.02.11 11:15) [0]
    Требуется выбрать некую информацию, которая формируется из таблиц, часть которых находится в Oracle а часть в VFP
    Каким образом проще работать с двумя СУБД ?

    Я так понимаю что нужно создать временные таблицы в одной СУБД, и перенести в них информацию из другой СУБД, чтобы потом нормально работать с SQL.

    Но как тогда проще переносить таблицы?
    Создавать временные таблицы и в цикле переносить построчно все записи или можно проще, чтобы не городить лишних циклов?
  • Sergey13 © (24.02.11 11:27) [1]
    Можно попробовать прилинковать к ораклу ваши фокпрошные таблицы. Тогда ничего не надо переносить.
  • Очень злой (24.02.11 15:44) [2]

    > Можно попробовать прилинковать к ораклу ваши фокпрошные
    > таблицы. Тогда ничего не надо переносить.


    Это можно сделать из своей программы? Чтобы вручную ничего не менять, например настройки ОДБС...

    Если да, то по возможности приведите пример, или ткните мордой в гугл... :)
  • Sergey13 © (24.02.11 16:04) [3]
    > Это можно сделать из своей программы?
    Это можно сделать из программы управления Ораклом, типа TOAD, PL/SQL Developer и т.д. и т.п. Даже из плюсов можно.
    Наверное можно и из своей.

    > ткните мордой в гугл...
    http://www.google.ru/search?hl=ru&newwindow=1&q=Oracle+DataBase+Links&aq=f&aqi=g1&aql=&oq=
  • Очень злой (25.02.11 12:43) [4]
    По некоторым причинам решил все-таки отказаться от прилинковки.

    Теперь делаю необходимые запросы в фокспро и в результате получаю 1 набор данных, который далее нужно перенести в Оракл, для дальнейших операций с уже имеющимися в Оракле таблицами.

    Получается что-то типа этого: (ADOReceipt - это уже открытый TADODataset c нужными данными)

           with TADODataSet.Create(Application) do
             try
               Connection:=AdoOra;
               CommandText:='select * from TMP_NS where 0=1';
               open;
               try
                 AdoOra.BeginTrans;
                 AdoReceipt.First;
                 while not AdoReceipt.Eof do
                 begin
                   insert;
                   for i:=0 to AdoReceipt.Fields.Count-1 do Fields[i].Value:=AdoReceipt.Fields[i].Value;
                   post;
                   AdoReceipt.Next;
                 end;
                 AdoOra.CommitTrans;
               except
                 AdoOra.RollbackTrans;
               end;
             finally
               free;
             end;



    Это нормально 2 цикла по записям и по полям? Или можно как-то попроще и красивее в смысле реализации в Дельфи?
  • Очень злой (25.02.11 12:44) [5]
    * ADOReceipt - это уже открытый TADODataset c нужными данными, выбранными из таблиц VFP
  • Sergey13 © (25.02.11 17:16) [6]
    Коммитить вставку каждой записи вовсе необязательно.
  • Очень злой (25.02.11 19:09) [7]

    > Sergey13 ©   (25.02.11 17:16) [6]
    >
    > Коммитить вставку каждой записи вовсе необязательно.

    насчет комита немного не понял.
    т.е. post убрать из цикла?

    А вообще интересовало меня то, правильный ли это подход? либо есть попроще конструкции?
  • Sergey13 © (28.02.11 11:51) [8]
    > [7] Очень злой   (25.02.11 19:09)

    Сори. Похоже это я что то протупил. Мне показалось, что коммит внутри цикла.
  • Кщд (28.02.11 15:02) [9]
    >Очень злой   (25.02.11 19:09) [7]
    >А вообще интересовало меня то, правильный ли это подход? либо есть попроще конструкции?
    если есть возможность(административная. техническая есть точно) создать dblink из Oracle на фокс, то так и нужно сделать.
  • Очень злой (01.03.11 00:06) [10]

    > если есть возможность(административная. техническая есть
    > точно) создать dblink из Oracle на фокс, то так и нужно
    > сделать.


    Теоретически можно... Но если тут не обойтись без настройки ODBC - то в моем случае смысла нет.
 
Конференция "Базы" » ADO. Работа с двумя провадерами [D7, dBase, FoxPro]
Есть новые Нет новых   [134431   +16][b:0][p:0.002]