powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Беда c TADOQuery, TADOCommand и т.п...
6 сообщений из 6, страница 1 из 1
Беда c TADOQuery, TADOCommand и т.п...
    #32036741
sp14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Беда в том, что мне нужно создавать экземпляры компонентов TADOQuery (TADOCommand) на лету прямо в коде, подставлять им значения, выполнять и после этого грохать. Так вот, когда они раскиданы на форме, и все значения заданы в Design-time, то все работает прекрасно, но при программном создании ТЕ ЖЕ САМЫЕ запросы вызывают жуткие violations.

Гадость происходит, если запрос содержит параметры

Вот примерный код, который не работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  Q:=TADOQuery.Create(nil);
  try
    Q.Connection := ADOConnection1;
    Q.Parameters.CreateParameter('Date1', ftString, pdInput,  10 , '01.01.2002');
    Q.Parameters.CreateParameter('Date2', ftString, pdInput,  10 , '01.01.2003');
    Q.Parameters.CreateParameter('Date3', ftString, pdInput,  10 , '01.01.2002');
    Q.Parameters.CreateParameter('Date4', ftString, pdInput,  10 , '01.01.2003');
    Q.SQL.Text := Memo1.Lines.Text;
    DataSource1.DataSet := Q;
    Q.Open;
  except
    FreeAndNil(Q);
    raise;
  end;




У меня Delphi 5 пропатченный, MS SQL 2000.

Не знаю прям что и делать, хоть из окна выбрасывайся...
Может кто-нибудь уже сталкивался с этой проблемой?
Помогите, пожалуйста! С меня пиво.

P. S. Да, кстати, в какой-то конфе по этому делу было написано, что есть некий ADO_PATCH.EXE, который правит в том числе и этот баг дельфи... не подскажите, где его взять???

Заранее спасибо.
...
Рейтинг: 0 / 0
Беда c TADOQuery, TADOCommand и т.п...
    #32036856
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежели сам экземпляр создаешь в рантайме, то логичнее было бы и строку запроса самому составлять динамически, а не полагаться на автоматику. Автоматика всегда имеет ограниченные рамки применения. В чем проблема склеить строчку запроса и не мучится с параметрами? Ибо когда решиться проблема с AV, начнется другая проблема - с региональными настройками, так как у тебя даты. А если клеить строчку запроса самому, а даты задавать, как рекомендовано в MSSQL в формате 'YYYYMMDD' без разделителей, можно о куче возможных граблей так и не узнать до конца жизни, т.е. прожить счастливо.

Кстати, код

Код: plaintext
1.
2.
3.
4.
5.
try
......
except
    FreeAndNil(Q);
    raise;
end;

это абсолютно то же самое, что и

Код: plaintext
1.
2.
3.
4.
try
......
finally
    FreeAndNil(Q);
end;
...
Рейтинг: 0 / 0
Беда c TADOQuery, TADOCommand и т.п...
    #32036857
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку.

Настоятельно рекомендуется вместо TADOQuery и TADOStoredProc использовать TADODataSet

Патч для ADO компонентов нужен, если MDAC установлен версии больше 2.5. Если версия MDAC 2.5 и ниже, то патч не требуется. Брать на www.borland.com, искать по ключевым словам 'patch Delphi5 MDAC2.6'
...
Рейтинг: 0 / 0
Беда c TADOQuery, TADOCommand и т.п...
    #32036860
sp14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...да я бы и на SQL забил бы, сделал бы свой мелкий текстовый форматик, в нем бы все и хранил, да тока беда-то в том, что в апликашке, которую я пишу, SQL открыт для юзера, а он может такого наворотить....

Я уже думал о том, чтобы написать свой парсер, но, боюсь, это только прибавит гемора, снизит надежность и в итоге ограничит функциональность.... Да и вообще, пацаны так не делают =)

На счет finally ... end; (не могу не оправдаться) там просто, во-первых, в excepte был еще кой какой кодец, который я для краткости выкинул, а во-вторых, если вы обратили внимание, то при удачном выполнении запроса компонент остается жить еще до поры до времени....

А вот интересная фитча:
Запрос в стиле:
Код: plaintext
1.
2.
3.
SELECT DISTINCT Data 
from SomeTable
where Data>=:Date1 and Data<=:Date2

Работает (хотя есть 2 параметра)

А вот такой - нет:
Код: plaintext
1.
2.
3.
4.
5.
SELECT DISTINCT 
  Data,
  (SELECT COUNT(*) FROM Rentgenolog f1 WHERE f1.Data=f.Data),
from Rentgenolog as f
where Data>=:Date1 and Data<=:Date2


Хотя этот же код отлично работает, если его задавать в Design-Time. Гадство!!!
...
Рейтинг: 0 / 0
Беда c TADOQuery, TADOCommand и т.п...
    #32036862
sp14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня:
MDAC 2.6
Delphi 5.0 Enterprise (Build 6.18) Update Pack 1

ставил для дельфей:
d5adoupdate2.zip
D5EntUpdate.exe
(это барахло как раз и валяется на борланде)
Вот последняя надежда на ado_patch.exe, о котором все пишут, но никто его не видел...

Поможите, люди добрые!
...
Рейтинг: 0 / 0
Беда c TADOQuery, TADOCommand и т.п...
    #32037030
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый sp_14!

Обычно я ставлю на форму столько ADODataSet, сколько на форме представлено запросов,
возвращающих данные. Ну что убудет от меня, что ли? Накладные расходы - минимальные,
все равно, при использованиеи даже одного ADODataSet, код разбухает на 300-400 кило,а каждый последующий берет 2-3.
Если в форме используетя один ADODataSet, то я беру его с DataModule, обычно этот прием применяется в справочниках. Разумеется CommandText собирается как строка, без всяких там Parameters.
Всегда, кроме может быть самых простых запросов, обработка идет через хранимые процедуры.
( я недавно, освещал этот вопрос, если Вас интересует, попробуйте найти в поиске по "Cat2").
Ну а уж ADOCommand всегда только один, на все приложение.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Беда c TADOQuery, TADOCommand и т.п...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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