Текущий архив: 2008.07.06;
Скачать: CL | DM;
Вниз
TADODataSet с выходным параметром. Найти похожие ветки
← →
harisma (2008-01-24 13:40) [0]Кто подскажет, как решить проблему:
Есть база данных на MSSQL. Может быть даже стандартная, например, master. Берем стандартную таблицу, у котрой есть стринговые поля. Скажем, sysmessages, поле description.
Помещаем на форму компонент TADOConnection и через него коннектимся к этой базе. Помещаем на форму компонент TADODataSet. Устанавливаем ему свойство Connection = ADOConnection1. Создаем для свойства Parameters новый выходной параметр abspos типа integer. В свойстве CommandText пишем следующий скрипт:
select * FROM sysmessages AS D
where (IsNull(D.description, "") = "`"aaaa"")
set :abspos = @@ROWCOUNT
При попытке установить свойство Active = True выдается ошибка в строке 4: Incorrect syntax near "abspos".
Причем эта ошибка повторяется именно при наличии в условии where последовательно нечетного числа символов ` и/или ".
В чем проблема и как ее решить?
← →
Ega23 © (2008-01-24 14:14) [1]1. Параметры так не используются.
2.select Result=Count(*) FROM sysmessages AS D
where (IsNull(D.description, "") = "`"aaaa"")
← →
sniknik © (2008-01-24 14:31) [2]> последовательно нечетного числа символов ` и/или ".
строки нужно передавать в запросы параметрами! а вот параметр используемый для получения количества записей в запросе лишний, значение и так передается в полученном рекордсете.
> 1. Параметры так не используются.
обычно да, но вариант вполне рабочий.
← →
Ega23 © (2008-01-24 14:38) [3]
> обычно да, но вариант вполне рабочий.
Рабочий, тока зачем так????
← →
sniknik © (2008-01-24 14:55) [4]> Рабочий, тока зачем так????
а вот это не ко мне ;)
я параметр так использовал, както, чтобы не возвращать рекордсет ради одного значения, получилось быстрее. а тут... тем более дублирующее. (и еще хуже если сам рекордсет не используется. что видно подразумеваешь ты давая свой 2 вариант)
и еще кстати непонятно зачем null заменять на пустую строку и затем сравнивать ее с заведомо несовподающей... сравнение с null и так лож.
← →
harisma (2008-01-24 16:28) [5]Я * в запросе для упрощения написал. А так должен возвращаться рекордсет с набором полей. А выражение IsNull(<Имя поля>, "") = тоже динамическое. Нужное имя поля передается извне. Поэтому за ответы спасибо, но это все пожалуй не то, что мне надо. Какие еще будут советы-предложения? Жду.
← →
Ega23 © (2008-01-24 16:29) [6]
> Какие еще будут советы-предложения? Жду.
Для начала задачу сформулируй внятно.
А то будешь ждать до бесконечности.
← →
harisma (2008-01-24 17:01) [7]Куда уж внятнее.
В TADODataSet есть SQL скрипт:
select D.<Field_1>, D.<Field_2>, D.<Field_3>... FROM <TableName> AS D
where (IsNull(D.<Field_n>, "") = "`")
set :abspos = @@ROWCOUNT
Этот скрипт формируется динамически, тоесть набор полей может быть различным.
Примерный кусок кода из проекта:
TADODataSet(tbl).Close;
TADODataSet(tbl).Parameters.Clear;
TADODataSet(tbl).ParamCheck := True;
TADODataSet(tbl).Parameters.CreateParameter("abspos", ftInteger, pdOutput, 0, 0);
TADODataSet(tbl).CommandText := stmtSQL;
TADODataSet(tbl).Open;
в этом коде stmtSQL = вышеприведенному скрипту.
При вызове операцииTADODataSet(tbl).Open;
выдает ошибкуIncorrect syntax near "abspos". Как эту проблему решить и почему такая ситуация возникает именно при наличии НЕЧЕТНОГО количества символов "`" и\или """ в условии where?
← →
Ega23 © (2008-01-24 17:04) [8]
> set :abspos = @@ROWCOUNT
> .CreateParameter("abspos", ftInteger, pdOutput, 0, 0);
set 18=@@ROWCOUNT
← →
harisma (2008-01-24 17:12) [9]
>
> set 18=@@ROWCOUNT
Не понял.
← →
sniknik © (2008-01-24 17:23) [10]> именно при наличии НЕЧЕТНОГО количества символов "`" и\или """ в условии where?
потому что парсер автоматического определения параметров "запутался" и считает незавершенной строкой все что после такого непарного символа.
а то что ты там понаписал в "примерном коде", это извини бред, скажи мне источник из которого почерпнута сия "мудрость", и я буду его не любить наравне с Фленовым и Архангельским...
> TADODataSet(tbl)
ко всему прочему тут еще похоже приведение таблицы к датасету... весело.
← →
harisma (2008-01-24 17:32) [11]
> тут еще похоже приведение таблицы к датасету
нет, это не приведение таблицы к датасету. tbl имеет тип TADODataSet. Я не знаю, кто это писал - мне такой код достался по наследству. Другими словами, это приведение можно убрать.
А вот что посоветуешь делать с этим парсером определения параметров? Как преобразовать входные параметры так, чтоб парсер их понял? Можно ли эти специфические символы заменить на их эквивалент, ну например как в дельфийском коде символ " можно написать как chr($27).
← →
sniknik © (2008-01-24 17:38) [12]> Как преобразовать входные параметры так, чтоб парсер их понял?
ты задаешь неправильные вопросы...
а что делать, я еще в первом посте сказал. сейчас могу еще только добавить - еще надо учится... чтобы понимать что именно ты делаешь, и зачем.
Страницы: 1 вся ветка
Текущий архив: 2008.07.06;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.035 c