Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Вопросы по 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.144 c
1-1085035121
Sandman25
2004-05-20 10:38
2004.05.30
procedure of class?


3-1084367422
Pul
2004-05-12 17:10
2004.05.30
Сортирвка по Blob полю


1-1084967551
infom
2004-05-19 15:52
2004.05.30
Может кто встречал такое дополнение к Delphi


1-1084893183
Реактор
2004-05-18 19:13
2004.05.30
Как закрыть форму


14-1084425781
Мазут Береговой
2004-05-13 09:23
2004.05.30
Ужасные новости для тех, кто собирается долго жить!