C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
SQL-Запрос, Поисковый запрос
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



в руках smile.gif
неверно условия формируешь.
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 ohmy.gif ohmy.gif ohmy.gif ну вам виднее.
(наверно плохо поставлена задача)
Кстати, левую часть тоже можно бы преобразовать в строку.
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)) + '%')

должно работать

и присоединяюсь к гостю: что-то с идентификатором не так...

Вернуться в Работа с базами данных в C++Builder