Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-95951
Hellman
2002-08-03 20:10
2002.08.29
Win XP Style


6-95927
mixVictor
2002-06-17 02:05
2002.08.29
Имя dial-up соединения


1-95776
SERY
2002-08-18 19:25
2002.08.29
Не могу разобраться


1-95847
просто панк
2002-08-17 01:50
2002.08.29
Rich Edit


14-95957
artgamer
2002-08-03 13:20
2002.08.29
Как настроить IPX? (В продолжение вчерашней темы)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский