Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать запрос при помощи временных таблиц? [D6, informix]


Страницы:   1 2

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.
Что можно сделать?



Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо