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

Вниз

Вопросы по ADO   Найти похожие ветки 

 
lightix   (2004-05-06 11:52) [0]

Имеется связка BCB6 + ADO + Oracle9 OLE DB Provider.
Простейший пример - на форме имеется запросное поле - DBLookupComboBox, который содержит некоторые данные из справочника.
Также имеется ADODataSet, в котором выбираются данные согласно запросу из другой таблицы. Причем если в запросном поле ничего не указали, то нужно выбрать все данные из таблицы.
Пишу запрос:

select * from t1 where f1=:param1 or :param1 is null

во-первых в Parameters появляется 2 одинаковых параметра... во вторых если для выполнения запроса я напишу

ADODataSet1->Close();
ADODataSet1->Parameters->ParamByName("param1")->Value =
DBLookupComboBox1->KeyValue;
ADODataSet1->Open();

то присвоится значение только 1-му параметру из 2-х  и  запрос работать не будет, нужно писать через Parameters->Items[0] и т.п. явно задавать по номеру.
А это очень неудобно, т.к. при каждом изменении запроса будет меняться порядок параметров и всех их не запомнишь ...
Так же при таком варианте не работает запрос если DBLookupComboBox1->KeyValue = NULL, т.к. в этом случае при передаче параметра Null преобразуется автоматически в -1 и естественно не сравнивает с null...
Приходится писать вот с такими извращениями:

select * from t1 where f1=:param1 or nvl(:param1,-1)=-1

при этом если тип параметра String и передается не NULL, то вылетает ошибка , т.к. функция nvl преобразовывает параметр к типу int. Для этого модернизирую код вот таким образом:

select * from t1 where f1=:param1 or nvl(:param1,"-1")="-1"


Вот такие вот извращения ... Может можно как то по-человечески работать в этом BCB6 с ADO?
До этого работали в BCB5 + NCOCI8 было все просто замечательно...

И еще - как правильно занулять (очищать запросное поле) KeyValue у DBLookupComboBox ? Раньше делали всегда KeyValue=Null и все работало. А сейчас для строк нужно делать KeyValue="", для чисел -1, для даты вообще непонятно ....

Помогите, народ, работать невозможно :(


 
Johnmen ©   (2004-05-06 12:00) [1]

Стандартный выход.
select * from t1 where f1=:param1_forequal or :param1_fornull is null
где параметрам присавиваются одинаковые значения...

А вообще, если уж запрос строится динамически, то и строй его с учетом текущих значений...


 
lightix   (2004-05-06 13:00) [2]

Запрос статически строится.

select * from t1 where f1=:param1_forequal or :param1_fornull is null


А как же быть с DBLookupComboBox->KeyValue? Ведь он не Null получается а то -1 то "" ....


 
stone ©   (2004-05-06 13:05) [3]


> А как же быть с DBLookupComboBox->KeyValue? Ведь он не Null
> получается а то -1 то "" ....

KeyValue variant, поэтому может принимать любое значение, в том числе NULL


 
lightix   (2004-05-06 13:11) [4]

Это итак ясно, но в BCB6 (как я уже раньше говорил), Null присвоить ему в некоторых случаях не удается, и мало того, когда KeyValue числовое, то после присвоения ему Null оно становится = -1 !!!!!!!!!


 
Erik ©   (2004-05-06 15:00) [5]

Для это вобщето есть спецальный метод ..Clear. А чего все накинулись на ADO? Оно вобще жутко глючно в Delphi неализовано. Если Oracle используйте прямые компоненты доступа или вобще BDE. У нас уже 5 лет используются и только сейчас будем постипенно переползать на ODAC.


 
Erik ©   (2004-05-06 15:01) [6]

Для это вобщето есть спецальный метод ..Clear. А чего все накинулись на ADO? Оно вобще жутко глючно в Delphi неализовано. Если Oracle используйте прямые компоненты доступа или вобще BDE. У нас уже 5 лет используются и только сейчас будем постипенно переползать на ODAC.


 
lightix   (2004-05-06 15:22) [7]

А мы под NCOCI писали года 2, и все замечательно было ... а тут собрались покупать лицензионный BCB6, а под него NCOCI не ставятся ... Решили на ADO переходить , а тут такие кошмары....
Незнаю что теперь и делать - это не работа а мучения, выкручиваешь себе руки, текст программы получается нечитабельным и непонятным ..... УЖАС.

Кстати DBLookupComboBox->KeyValue.Clear() - не чистит ...


 
Erik ©   (2004-05-06 16:04) [8]

NCOCI неработает с потоками, пожалуй нет неодного нормального бесплатного компонента для работы с Oracle. Я кажется все перепробовал с серездным тестированием.

У нас используется TRxDBLookupCombo(Sender).ResetField;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
3-1083448763
Kirill
2004-05-02 01:59
2004.05.30
Не удаляется запись


1-1084727639
I.Ru.Ru
2004-05-16 21:13
2004.05.30
вызов справки из программы


3-1083820008
Litr
2004-05-06 09:06
2004.05.30
Bookmark


14-1083906425
ORMADA
2004-05-07 09:07
2004.05.30
Почему КЛАДОВКА не работает ?


1-1084363991
dim-
2004-05-12 16:13
2004.05.30
tree и Data





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