![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите кто уже это проходил.
Можно ли выполнить запрос к таблицам разных бд. есть база данных VFXP (*.dbf) и временна база данных на PARADOX (*.db)нужно обратится запросом к полям этих таблиц и получить разность. запрос примерно такой ADOQuery1.SQL.Add('select j from base.db,base.dbf where j<>keyforbank and datepay='''+dateform+'''') |
|
#2
|
||||
|
||||
|
да, такие вещи выполнимы.
запрос примерно такой: Код:
ADOQuery1.SQL.Text:='select j from base.db b1,base.dbf b2 where b1.j<>keyforbank and b2.datepay='''+dateform+''' and b1.key=b2.key' |
|
#3
|
||||
|
||||
|
Курите поиск по "гетерогенные запросы".
|
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
||||
|
||||
|
VINCENT, если через разные драйверы обращаетесь к базам - то нельзя одновременно.
|
|
#6
|
|||
|
|||
|
В том то и вопрос как сравнить таблицы используя разное подключение к ним.
|
|
#7
|
||||
|
||||
|
Создать 2 временные таблицы (подключенных через 1 (один) драйвер), по очереди залить из них данные из имеющихся, потом сделать запрос.
|
|
#8
|
|||
|
|||
|
НУ так то понятно что можно выгрузить даныые или перечитать с запроса по записям . Тут хотелось бы грамотно подойти к вопросу и оптимально решить задачу без ущерба к производительности.
Ищу методы так как опыта программирования 2 недели .А нельза сравнить данные не создавая ничего лишнего например из хранимаого курсора в памяти. допустим Код:
query1.sql.add('sect j from ":test:te.db"');
query1.open
ADOQuery1.sql.add('slect keyforbank from testdb where datepay=:dats');
ADOQuery1.Open; |
|
#9
|
|||
|
|||
|
Цитата:
Цитата:
|
|
#10
|
||||
|
||||
|
Немного добавлю к предыдущему оратору и напомню что я говорил ранее.
Сама среда Delphi не работает с базами данных, за нее это делают так называемые "движки", и если один движок не умеет цепляться к другому (BDE - точно не умеет, с ADO я не уверен на 100%) то ты никак, повторяю НИКАК не получишь гетерогенного запроса. Теперь о том что я говорил выше. Сливать данные можно и в таблицу в памяти, сейчас много всяких MemTable по сети валяется, юзай их. Ну это если записей в таблице разумное количество. ЗЫЖ А вообще-то хотелось бы узнать задачу более полнее, чтоль. Может быть есть решение совсем другим способом. |
|
#11
|
|||
|
|||
|
чето долго думал.... решил привести все к общему знаминателю, а именно выбрал запросом данные из dbf и записал их во временную таблицу, птом сравнил с первой каторя db
сам запрос получился такого характере может кому пригодится хотя во многих местах уже описан этот метод. Код:
Query2.close;
Query2.SQL.clear;
Query2.SQL.Add('select j from ":bank:te.db" AS T1 LEFT JOIN ":bank:temp.db" AS T2 ON T1.j=T2.kluch WHERE T2.kluch IS NULL');
Query2.Open; |