Главная страница
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.043 c
4-1082118280
juiceman
2004-04-16 16:24
2004.05.30
Перехватывать ВСЕ сообщения


6-1081184602
Kirill
2004-04-05 21:03
2004.05.30
IdHTTP и сессия


4-1082381619
Goorus
2004-04-19 17:33
2004.05.30
ClientRect


3-1084340256
XYZ
2004-05-12 09:37
2004.05.30
Пробл. с обновлением неск.записей через OraQuery


1-1084443190
pantera
2004-05-13 14:13
2004.05.30
Проблема с диаграммой пирог (Pie) компонента TeeChart