Текущий архив: 2002.08.29;
Скачать: CL | DM;
ВнизКак сделать запрос при помощи временных таблиц? Найти похожие ветки
← →
masanovetc (2002-08-06 11:40) [0]делаю следующий запрос к базе informix
Create temp table mas1 (.....);
Create temp table mas2 (.....);
Insert into mas1 select aaa,bbb from mas3;
Insert into mas2 select ccc,ddd from mas4;
Select ... from mas1,mas2;
drop table mas1;
drop table mas2;
на этапе выполнения выдаёт ошибку table mas1 is not in the database.
Как в дельфи осуществить это запрос?
Утилита позволяющая делать запросы SQL к базе informix отрабатывает этот запрос без ошибок.
← →
ЮЮ (2002-08-06 11:51) [1]С помощью чего в Delphi исполняете несколько SQL-предложений сразу?
← →
masanovetc (2002-08-06 12:06) [2]Пытаюсь через Query.
А как по другому?
← →
ЮЮ (2002-08-06 12:10) [3]А разве он поддерживает несколько SQL-предложений сразу?
← →
masanovetc (2002-08-06 12:15) [4]:-(
Я так понимаю мне надо 3 query кинуть на форму.
Как тогда на основании запроса 2 отдельных query сделать запрос из 3-го Query к Query1 и Query2 ???
← →
ЮЮ (2002-08-06 12:18) [5]Нет, я к тому, что временные таблицы, скорей всего, живут во время одной транзакции. Поэтому надо открыть транзакцию, выполнить все предложения, закрыть транзакцию
← →
masanovetc (2002-08-06 13:12) [6]Конструкция
begin work;
select....
.....
commit work;
Не помогает. Ругается Sql error.
Что можно сделать?
← →
ЮЮ (2002-08-06 13:19) [7]Database.StartTransaction;
Query.SQL.Text:="Create temp table mas1 (.....)"
Query.ExecSql;
...
Query.SQL.Text:=Select ... from mas1,mas2"
Query.ExecSql;
Database.Commit;
← →
ЮЮ (2002-08-06 13:30) [8]В MS SQL временные таблицы существуют во время сессии, а не транзакции. Так же наверное и в Informix-е.
← →
masanovetc (2002-08-06 15:44) [9]Попробовал через Database - ошибок не выдаёт, но возвращает пустой результат в DBGRID. Запрос по идее верен, т.к. через dbaccess в informix выполняется на ура.
Если временные таблицы существуют во время сессии, а не транзакции то как можно осуществить такой запрос за одну сессию?
← →
Johnmen (2002-08-06 15:54) [10]>возвращает пустой результат
>Query.SQL.Text:="Select ... from mas1,mas2"
>Query.ExecSql;
Query.Open;
← →
masanovetc (2002-08-06 16:12) [11]Делаю:
Database1.StartTransaction;
Query1.SQL.Text:="Create temp table mas1 (.....)"
Query1.ExecSql;
...
Query1.SQL.Text:=Select ... from mas1,mas2"
Query1.ExecSql;
Query1.Open;
Database1.Commit;
Результат аналогичен :пусто. :-(
А есть какая-то возможность в дельфи смотреть промежуточные результаты SQL-запросов?
← →
Johnmen (2002-08-06 16:33) [12]Не ExecSql, а Open !!!!!!!!!!!
← →
masanovetc (2002-08-06 16:48) [13]Database1.StartTransaction;
Query1.SQL.Text:="Create temp table mas1 (.....)"
Query1.Open;
...
Query1.SQL.Text:=Select ... from mas1,mas2"
Query1.Open;
Database1.Commit;
На 1-м OPEN вылетает ошибка Error creating cursor handle
← →
Lusha (2002-08-06 17:06) [14]>masanovetc (06.08.02 16:48)
Повнимательнее, пожалуйста... Вызов Open должен с выражением SELECT... А все остальные ExecSQL...
← →
Johnmen (2002-08-06 17:08) [15]Уважаемый, ну нельзя же так тупить...:)
Для SELECT Open, для др.запросов ExecSql. Читай книги !
← →
masanovetc (2002-08-06 17:20) [16]Без ошибок...но рез-т тот-же:пустой dbgrid.
Готовлю мыло и верёвку :-(
← →
Johnmen (2002-08-06 17:25) [17]>masanovetc (06.08.02 17:20)
>Готовлю мыло и верёвку :-(
Торопиться не надо ! Лучше запасись соотв.литературой...
:))))))))))))))))
← →
Val (2002-08-06 17:34) [18]и я влезу :)
>masanovetc (06.08.02 17:20)
Query1.Open;
...
Query1.SQL.Text:=Select ... from mas1,mas2"
простите, а ... что означает?
← →
masanovetc (2002-08-06 17:45) [19]Единый скрипт через dbaccess работает. В дельфи никак не хочет.
Database1.Connected:=true;
Database1.StartTransaction;
Query1.SQL.Text:="create temp table mfo_rec_d_tmp (filename varchar(14),idpayord serial not null,receive_time datetime hour to minute,dacc varchar(17),cacc varchar(17),amount money(20,2),namemfo varchar(38),remark varchar(160));";
Query1.ExecSql;
Query1.Sql.Text:="create temp table mfo_rec_c_tmp (idpayord serial not null,namemfo varchar(38));";
Query1.ExecSql;
test1:="insert into mfo_rec_d_tmp select A.filename, P.idpayord, A.receive_time, P.dacc, P.cacc, P.amount, N.namemfo, P.remark from arm_hab A, arm_pay P, mfo_name N, mfo M";
test:=test1+" where A.idpack = P.idpack and P.dmfo = M.mfo and M.idnamemfo = N.idnamemfo and P.dtpd = "12.06.2002"";
Query1.SQL.Text:=test;
Query1.ExecSql;
Query1.SQL.Text:="insert into mfo_rec_c_tmp select P.idpayord, N.namemfo from arm_hab A, arm_pay P, mfo_name N, mfo M where A.idpack = P.idpack and P.cmfo = M.mfo and M.idnamemfo = N.idnamemfo and P.dtpd = "12.06.2002";";
Query1.ExecSql;
Query1.SQL.Text:="select D.filename, D.receive_time, D.dacc, D.cacc, D.amount, D.namemfo as dmfo, D.remark, C.namemfo as cmfo from mfo_rec_d_tmp D, mfo_rec_c_tmp C where C.idpayord = D.idpayord;";
Query1.Open;
Database1.Commit;
Database1.Connected:=false;
← →
Johnmen (2002-08-06 17:52) [20]>Database1.Commit;
>Database1.Connected:=false;
А это то зачем ?????
← →
Val (2002-08-06 17:54) [21]нужен коммит после вставки
← →
masanovetc (2002-08-06 18:02) [22]???
Вложенный коммит после обоих insert-ов
Или после обоих один коммит?
← →
Val (2002-08-06 18:58) [23]изменение данных должно коммититься, правильно?
а как, решать вам.
← →
ЮЮ (2002-08-07 05:08) [24]После Database1.Connected:=false Сессия закроется и прощай временные таблицы
← →
masanovetc (2002-08-07 18:34) [25]СПАСИБО ВСЕМ!!!
РАБОТАЕТ!!!!!!:-)))))))))))))))))))))))))))))))))))
Страницы: 1 вся ветка
Текущий архив: 2002.08.29;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.008 c