Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.062 c
2-1212577251
DON
2008-06-04 15:00
2008.07.06
Вставка хелпа в проект


2-1212738159
GreyWolf
2008-06-06 11:42
2008.07.06
Архитектура приложения


6-1189759827
horny
2007-09-14 12:50
2008.07.06
Share - ресурсы


2-1212427460
WebSQLNeederr
2008-06-02 21:24
2008.07.06
Помогите с алгоритмом


2-1212709477
Soon
2008-06-06 03:44
2008.07.06
Задержка





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