Форум: "Базы";
Текущий архив: 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