![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать запрос при помощи временных таблиц? [D6, informix]
masanovetc © (2002-08-06 11:40:00)делаю следующий запрос к базе 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 отрабатывает этот запрос без ошибок.
masanovetc (2002-08-07 18:34:00) [1]СПАСИБО ВСЕМ!!!
РАБОТАЕТ!!!!!!:-)))))))))))))))))))))))))))))))))))
ЮЮ (2002-08-07 05:08:00) [2]После Database1.Connected:=false Сессия закроется и прощай временные таблицы
Val (2002-08-06 18:58:00) [3]изменение данных должно коммититься, правильно?
а как, решать вам.
masanovetc (2002-08-06 18:02:00) [4]???
Вложенный коммит после обоих insert-ов
Или после обоих один коммит?
Val (2002-08-06 17:54:00) [5]нужен коммит после вставки
Johnmen (2002-08-06 17:52:00) [6]>Database1.Commit;
>Database1.Connected:=false;
А это то зачем ?????
masanovetc (2002-08-06 17:45:00) [7]Единый скрипт через 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;
Val (2002-08-06 17:34:00) [8]и я влезу :)
>masanovetc (06.08.02 17:20)
Query1.Open;
...
Query1.SQL.Text:=Select ... from mas1,mas2"
простите, а ... что означает?
Johnmen (2002-08-06 17:25:00) [9]>masanovetc (06.08.02 17:20)
>Готовлю мыло и верёвку :-(
Торопиться не надо ! Лучше запасись соотв.литературой...
:))))))))))))))))
masanovetc (2002-08-06 17:20:00) [10]Без ошибок...но рез-т тот-же:пустой dbgrid.
Готовлю мыло и верёвку :-(
Johnmen (2002-08-06 17:08:00) [11]Уважаемый, ну нельзя же так тупить...:)
Для SELECT Open, для др.запросов ExecSql. Читай книги !
Lusha (2002-08-06 17:06:00) [12]>masanovetc (06.08.02 16:48)
Повнимательнее, пожалуйста... Вызов Open должен с выражением SELECT... А все остальные ExecSQL...
masanovetc (2002-08-06 16:48:00) [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
Johnmen (2002-08-06 16:33:00) [14]Не ExecSql, а Open!!!!!!!!!!!
masanovetc (2002-08-06 16:12:00) [15]Делаю:
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 15:54:00) [16]>возвращает пустой результат
>Query.SQL.Text:="Select ... from mas1,mas2"
>Query.ExecSql;
Query.Open;
masanovetc (2002-08-06 15:44:00) [17]Попробовал через Database - ошибок не выдаёт, но возвращает пустой результат в DBGRID. Запрос по идее верен, т.к. через dbaccess в informix выполняется на ура.
Если временные таблицы существуют во время сессии, а не транзакции то как можно осуществить такой запрос за одну сессию?
ЮЮ (2002-08-06 13:30:00) [18]В MS SQL временные таблицы существуют во время сессии, а не транзакции. Так же наверное и в Informix-е.
ЮЮ (2002-08-06 13:19:00) [19]Database.StartTransaction;
Query.SQL.Text:="Create temp table mas1 (.....)"
Query.ExecSql;
...
Query.SQL.Text:=Select ... from mas1,mas2"
Query.ExecSql;
Database.Commit;
masanovetc (2002-08-06 13:12:00) [20]Конструкция
begin work;
select....
.....
commit work;
Не помогает. Ругается Sql error.
Что можно сделать?