Главная страница
    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.043 c
1-1187796570
Дмитрий Белькевич
2007-08-22 19:29
2007.11.11
Полупрозрачность tpngimage на прозрачной форме.


15-1190797843
Ega23
2007-09-26 13:10
2007.11.11
Бесплатная Embedded-СУБД


15-1191389045
Игорь Шевченко
2007-10-03 09:24
2007.11.11
Новости от Codegear


4-1178464604
sinus
2007-05-06 19:16
2007.11.11
Запустить программу от имени другого пользователя


15-1192060844
ЮЮ
2007-10-11 04:00
2007.11.11
Запись в реестр из reg-файла





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