Kuks |
Отправлено: 30.01.2006, 12:33 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Привет Всем!!!
BCB6-ADO-SQL2000...
При поиске я формирую запрос вида:
AnsiString Command = "SELECT * ";
Command = Command + "FROM Register "
+ " WHERE " + "(" + " Script " + " LIKE " + "'%" + ScriptEditF->Text + "%'" + ")"
+ " AND " + "(" + " Block_City " + " LIKE " + "'%" + BlockEditF->Text + "%'" + " OR " + " Block_City " + " IS " + "NULL" + ")"
+ " AND " + "(" + " City " + " LIKE " + "'%" + CityLabeledEdit->Text + "%'" + " OR " + " City " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Street " + " LIKE " + "'%" + StreetEditF->Text + "%'" + " OR " + " Street " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Scope " + " LIKE " + "'%" + ScopeLabeledEdit->Text + "%'" + " OR " + " Scope " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Town " + " LIKE " + "'%" + TownLabeledEdit->Text + "%'" + " OR " + " Town " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Block_Scope " + " LIKE " + "'%" + BlockScopeEditF->Text + "%'"+ " OR " + " Block_Scope " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Type_Constr " + " LIKE " + "'%" + TypeComboBox->Text + "%'" + ")"
+ " AND " + "(" + " Cust " + " LIKE " + "'%" + CustEditF->Text + "%'" + " OR " + " Cust " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Project " + " LIKE " + "'%" + ProjectEditF->Text + "%'" + " OR " + " Project " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Depat " + " LIKE " + "'%" + DepatEditF->Text + "%'" + ")"
+ " AND " + "(" + " Name " + " LIKE " + "'%" + NameEditF->Text + "%'" + ")"
+ " AND " + "(" + " ID " + " LIKE " + "'%" + Archiv_NEditF->Text + "%'" + " OR " + " ID " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Full_Obj_Name " + " LIKE " + "'%" + Full_NameEditF->Text + "%'" + " OR " + " Full_Obj_Name " + " IS " + "NULL" + ")"
+ " AND " + "(" + " Object_Name " + " LIKE " + "'%" + Obj_NameEditF->Text + "%'" + ")"
+ " AND " + "(" + " For_Cust " + " LIKE " + IntToStr(For_CustCheckBox->Checked) + ")";
после чего при помощи TADOQuery осуществляю выборку...
Все работает, но то-же самое через параметрический запрос
(думаю что так будет правильнее) я меня ничего не получается!
т.е. поис по вхождению комбинации символов в любое место поля не
получается....
Подскажите, в чем проблема....
|
|
olegenty |
Отправлено: 30.01.2006, 13:19 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
в руках
неверно условия формируешь.
|
|
Kuks |
Отправлено: 30.01.2006, 13:51 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Хорошо, если можно коротко:
КАК ПРАВИЛЬНО УСЛОВИЯ ФОРМИРОВАТЬ?
|
|
olegenty |
Отправлено: 30.01.2006, 13:54 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
приведи текст параметрического запроса.
|
|
AVC |
Отправлено: 30.01.2006, 13:59 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
Все работает, но то-же самое через параметрический запрос
(думаю что так будет правильнее) я меня ничего не получается!
т.е. поис по вхождению комбинации символов в любое место поля не
получается....
Подскажите, в чем проблема....
|
Текст в студию, плиз.
А что, все услови действительно должны выполняться одновременно? |
|
Kuks |
Отправлено: 30.01.2006, 13:59 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
В том-то и дело, что я не знаю как
написать LIKE в параметрическом запросе
(в параметре), операции =,>,< работают,
а LIKE — нет...
|
|
AVC |
Отправлено: 30.01.2006, 14:08 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Like('%' || :prm || '%')
или
Like(:prm) если в prm записано AnsiString prm = "%" + ... + "%"; |
|
olegenty |
Отправлено: 30.01.2006, 14:30 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
угу, вот я то же самое, что AVC уже написал, собирался отвечать.
|
|
Kuks |
Отправлено: 30.01.2006, 15:00 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Огромное спасибо за участие и реальную
помощь!!!!!!!!!!!!!!
Проверил, все работает!
|
|
Kuks |
Отправлено: 08.02.2006, 13:55 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
На вот это
Like('%' || :prm || '%')
Пишет:
"Инкоррект синтакс ниар "|""
Параметр и поле целое.....
|
|
Guest |
Отправлено: 08.02.2006, 14:17 |
|
Не зарегистрирован
|
Like предназначен для строк. |
|
olegenty |
Отправлено: 08.02.2006, 14:20 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
от СУБД зависит. в некоторых случаях надо писать "+" вместо "||"
|
|
Kuks |
Отправлено: 08.02.2006, 14:28 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Спасибо!
|
|
Kuks |
Отправлено: 08.02.2006, 15:05 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Тока так получилось:
Select * From ComboTable Where ID Like ('%' + Cast(:ID as VARCHAR(6)) + '%')
Сервер — MSSQL 2000 Ent....
|
|
Guest |
Отправлено: 08.02.2006, 15:54 |
|
Не зарегистрирован
|
Для поля ID ну вам виднее.
(наверно плохо поставлена задача)
Кстати, левую часть тоже можно бы преобразовать в строку. |
|
olegenty |
Отправлено: 08.02.2006, 16:19 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
как вариант — так
CODE |
declare @StrID varchar(6)
set @StrID = cast(:ID as varchar(6))
Select * From ComboTable Where cast(ID as varchar(6)) Like ('%' + @StrID + '%')
|
хотя и
CODE |
Select * From ComboTable Where cast(ID as varchar(6)) Like ('%' +cast(:ID as varchar(6)) + '%')
|
должно работать
и присоединяюсь к гостю: что-то с идентификатором не так...
|
|