powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi7+MSSQL7+SDAC
4 сообщений из 4, страница 1 из 1
Delphi7+MSSQL7+SDAC
    #32316007
iisoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для доступа к MSSQL использую SDAC 2.40.0.15. На форме имеются 2 TMSQuery(MSQuery1 и MSQuery2), которые соединены с TMSConnection. MSQuery1 создает временную таблицу #tmpTable и читает из нее данные. MSQuery2 использует временную таблицу #tmpTable для своих расчетов и возвращает данные. Все это прекрасно работает пока в MSQuery1 не добавляю параметры. После добавления параметров в MSQuery1, MSQuery2 не видит временную таблицу #tmpTable, созданную MSQuery1.
Как избежать этот столь неприятный момент?, или это глюк SDAC.
Использовал вместо параметров макросы - все работает, но такое решение мне не подходит, нужны только параметры.
...
Рейтинг: 0 / 0
Delphi7+MSSQL7+SDAC
    #32316092
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А посмотреть бы на эти куери, причем в виде, как они отлавливаются сиквельным профайлером.
...
Рейтинг: 0 / 0
Delphi7+MSSQL7+SDAC
    #32316220
iisoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот вариант с параметрами в MSQuery1 взятые из профайлера

Подключение
-----------------
select 504, c2.name, c1.name from master.dbo.syscharsets c1, master.dbo.syscharsets c2, master.dbo.syscurconfigs f where c1.id = f.value and f.config = 1123 and c1.csid = c2.id

MSQuery1.Active
-----------------
SET NO_BROWSETABLE ON
sp_executesql N'DECLARE @MinDigit INT, @MaxDigit INT, @Digit INT, @RecCount INT, @NextDrawing INT

IF EXISTS(SELECT ID FROM TEMPDB.DBO.SYSOBJECTS
WHERE ID = OBJECT_ID(''TEMPDB..#tmpStats'')) DROP TABLE #tmpStats

CREATE TABLE #tmpStats (
Digit INT,
Frequency NUMERIC(18, 2),
Period NUMERIC(18, 2))

SET @NextDrawing = CASE WHEN @P1 = 0 THEN
(SELECT MAX(Drawing) FROM anlScoring20) + 1 ELSE @P2 END

IF EXISTS(SELECT ID FROM TEMPDB.DBO.SYSOBJECTS
WHERE ID = OBJECT_ID(''TEMPDB..#tmpScoring20'')) DROP TABLE #tmpScoring20

SELECT * INTO #tmpScoring20 FROM anlScoring20
WHERE (Drawing < @NextDrawing) and (0=0
)

SELECT @MinDigit = 1, @MaxDigit = 80, @Digit = 1,
@RecCount = (SELECT COUNT(*) FROM #tmpScoring20)

WHILE @Digit <= @MaxDigit
BEGIN
INSERT INTO #tmpStats (Digit, Frequency, Period)
SELECT @Digit, @RecCount/CAST(COUNT(*) AS NUMERIC(18, 2)), @NextDrawing-((COUNT(*)+1)*
(MAX(Drawing)-1)/CAST(COUNT(*) AS NUMERIC(18, 2)))
FROM #tmpScoring20
WHERE @Digit IN (N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16,
N17, N18, N19, N20)
SET @Digit = @Digit + 1
END

SELECT * FROM #tmpStats', N'@P1 int,@P2 int', 0, 0

MSQuery2.Active
-----------------
SET NO_BROWSETABLE OFF
IF EXISTS(SELECT ID FROM TEMPDB.DBO.SYSOBJECTS
WHERE ID = OBJECT_ID('TEMPDB..#tmpPeriod')) DROP TABLE #tmpPeriod

CREATE TABLE #tmpPeriod (
ID INT IDENTITY (1, 1),
Digit INT,
Period NUMERIC(18, 2))

INSERT INTO #tmpPeriod (Digit, Period)
SELECT Digit, Period FROM #tmpStats ORDER BY Period

SELECT * FROM #tmpPeriod
...
Рейтинг: 0 / 0
Delphi7+MSSQL7+SDAC
    #32316284
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так у тебя же вся инструкция завернута (SDACом) в sp_executesql. И временная таблица после выполнения этого бача сразу уничтожается. Вот ты ее и не видешь. И почему все это с клиента посылается, а не оформлено в виде хп. Временную таблицу создай отдельно, причем, чтобы инструкция на ее создание не заварачивалась в sp_executesql, создай через метод Execute компонента Connection. Затем хп закачай в нее данные и верни результат. И второй бач оформь в виде хп. А лучше забить на работу с такими вот временными таблицами.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi7+MSSQL7+SDAC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]