Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

Запрос не видит временную таблицу   Найти похожие ветки 

 
Dust ©   (2007-06-30 19:26) [0]

Второй запрос не видит временную таблицу, созданную в первом запросе
QrySP_open.SQL :=
//--------------------------
BEGIN TRANSACTION ZarplataReport;

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N"[tempdb].[dbo].[ #per_tmp_ZarplataUFtable]"))
drop table #per_tmp_ZarplataUFtable

CREATE TABLE #per_tmp_ZarplataUFtable(
   [FK_TypeWork] [int] NULL,
 [nameTypeWork] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL,
 [FK_TypeDelo] [int] NULL,
 [nameTypeDelo] [varchar](60) COLLATE Cyrillic_General_CI_AS NULL,
 [FK_User] [int] NULL,
 [UserFIO] [varchar](65) COLLATE Cyrillic_General_CI_AS NULL,
 [CountForUser] [int] NULL, --сумма в рублях
 [CountForUserYear] [int] NULL, --сумма в рублях
 [WorkPrice] [money] NULL,
 [SummForUser] [money] NULL, --сумма в рублях
 [SummForUserYear] [money] NULL --сумма в рублях
) ;

exec  dbo.per_ZarplataReportUF :BeginDate, :EndDate, :BeginYearDate, :EndYearDate
//---------------------------------

Второй запрос:
QrySelectDataUF.SQL :=
---Упрощённая форма (Операторы ПВМ)
select *
from #per_tmp_ZarplataUFtable
where FK_TypeWork = 1
order by  FK_TypeWork, FK_TypeDelo, UserFIO;

Второй запрос не видит временную таблицу #per_tmp_ZarplataUFtable, созданную в первом запросе.
Можно ли его заставить его её видеть, и если можно то как?


 
Dust ©   (2007-06-30 19:28) [1]

QrySP_open.Parameters.ParamByName("BeginDate").Value := DTPckrBeginDate.DateTime;
QrySP_open.Parameters.ParamByName("EndDate").Value := DTPckrEndDate.DateTime;
QrySP_open.Parameters.ParamByName("BeginYearDate").Value := DTPckrBeginDate.DateTime;
QrySP_open.Parameters.ParamByName("EndYearDate").Value := DTPckrEndDate.DateTime;

QrySP_open.Open(); //return all
QrySelectDataUF.Open(); //Exception


 
Desdechado ©   (2007-06-30 20:08) [2]

Может, они в разных транзакциях?


 
Dust ©   (2007-06-30 20:59) [3]

Локальные временные таблицы существуют до тех пор пока существует соединение с SQL Server"ом, в котором эти таблицы были созданы и автоматически уничтожаются при его закрытии.

т.е., насколько я понимаю пока я не закрыл AdoConnection временная таблица должна существовать. Причём тут транзакции?


 
sniknik ©   (2007-07-01 11:09) [4]

вообще у временной таблицы как и у переменных есть область видимости, процедура например. т.е. сделанную в одной процедуре в другой (и извне не увидишь)
> exec  dbo.per_ZarplataReportUF :BeginDate, :EndDate, :BeginYearDate, :EndYearDate
а вот это у тебя случаем не процедура? в которой и создается временная таблица. из показанного кода ничего не понять, какието разрозненные, надерганные с разных мест куски.

если нужны таблицы с общей видимостью то делай их глобальными (2 символа # вместо одного)

> пока я не закрыл AdoConnection временная таблица должна существовать.
он может закрываться и сам, когда не нужен, есть свойство коннекта "кипконнектион"  указывает поддерживать его или нет.


 
Павел Калугин ©   (2007-07-01 13:34) [5]

Откуда запускаешь? в qwery analizer тот же результат?

Смотреть внимательно в процедуре есть ли там  
drop table #per_tmp_ZarplataUFtable

что между exec и select?


 
Dust ©   (2007-07-01 17:07) [6]

2 sniknik Временная таблица создаётся в первом запросе, в нём же выполняется вызов хранимой процедуры. Оба запроса приведены в порядке исполнения. ADOConnection1.KeepConnection =true;

2 Павел Калугин
все запросы проверялись перед загоном в делфю в qwery analizer"е
внутри хранимой процедуры drop table нет.

Если все селекты загнать в один ADOQuery, в котором создаётся временная таблица и выполняется хранимая процедура, то всё работает, соотвественно в квери аналайзере всё тоже работает.

вообще в проекте есть всего пять запросов, первый из них содаёт временную таблицу и вызывает хранимую процедуру, остальные 4  должны выбирать данные из временной таблицы. Привожу в порядке выполнения.
   QrySP_open: TADOQuery; //создаёт таблицу, вызывает хранимую процедуру
   QrySelectDataUF: TADOQuery; //выбирает из временной таблицы, которую же и не видит
   QrySelectDataPhoto: TADOQuery;
   QrySelectDataProv: TADOQuery;
   QrySelectDataArchiv: TADOQuery;


 
Dust ©   (2007-07-01 17:07) [7]

Что я недопонимаю, что может быть не так?


 
Desdechado ©   (2007-07-01 18:06) [8]

> вообще в проекте есть всего пять запросов,
ADOConnection у них общий или у каждой прописана строка подключения?


 
Dust ©   (2007-07-01 18:27) [9]

2Desdechado ADOConnection у них общий


 
Gadenysh   (2007-07-01 19:11) [10]

а к чему это  BEGIN TRANSACTION в данном случае?


 
Dust ©   (2007-07-01 19:38) [11]

BEGIN TRANSACTION было добавлено в порядке экперимента, чтобы всё выполнять внутри одной транзакции, а так - оно там не нужно, и соотв ничего не меняет


 
sniknik ©   (2007-07-01 19:50) [12]

> BEGIN TRANSACTION было добавлено в порядке экперимента
для экспериментов надо не добавлять, а убирать все лишнее...
попробуй сделай "чистое" приложение куда добавь связанные 1 коннект и 2 компонента - ADOCommand и ADODataSet (а вовсе не TADOQuery) в первый положи запрос создания таблицы во второй ее открытие, без всяких лишних вещей типа вызова процедур, транзакций...
с таким минимумом работает?


 
Dust ©   (2007-07-01 20:13) [13]

Кажется на вопрос "почему " я  нашёл ответ.
Запустил SQL Profiler и посмотрел AUDIT Login. Перед выполнением второго запроса происходит очередной "лог ин"... Но как это побороть я пока не знаю... вообще это выглядит весьма странно, так как ADOConnection - только один.....


 
Dust ©   (2007-07-01 20:54) [14]

Вопро "Как побороть - решён"

ADOConnection.CursorLocation := clUseClient;
ADOQuery.CursorLocation := clUseClient;


 
sniknik ©   (2007-07-01 20:54) [15]

> Кажется на вопрос "почему " я  нашёл ответ.
с самого начала говорили, что коннект может не держаться... (может конечно причину не совсем ту указали...)

вообще это не ответ на "почему", это подтверждение догадок того "что происходит", а вот как только найдешь "почему" так и ответишь на "что делать".


 
sniknik ©   (2007-07-01 21:17) [16]

> Вопро "Как побороть - решён"
> ADOConnection.CursorLocation := clUseClient;
> ADOQuery.CursorLocation := clUseClient;

решен неверно, причину ты так и не нашел, а если и заработало то не изза этих параметров (возможно от пере создания компонент с установкой чегото по дефаулту, либо ошибка вовсе не ту озвучил)

замечательно работает и с серверным курсором, только что проверил.


 
Dust ©   (2007-07-01 22:33) [17]

Вернусь к этому вопросу чуть позже. Мне до утра надо 2 отчётика сделать.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.057 c
2-1192606931
ari_9
2007-10-17 11:42
2007.11.11
в run-time расположить отн. друг друга комп. с одинаковым align


2-1191676736
Jiku
2007-10-06 17:18
2007.11.11
Как определить адрес в строке активного окна проводника


2-1192870890
Sorry
2007-10-20 13:01
2007.11.11
Прорисовка SubItems в ТListView


15-1191043444
Washington
2007-09-29 09:24
2007.11.11
Delphi vs. VB


11-1176185434
Dy1
2007-04-10 10:10
2007.11.11
не работает сохранение в jpeg





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский