Форум: "Базы";
Текущий архив: 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