|
Дополнение к первому вопросу
|
|||
---|---|---|---|
#18+
Огромное спасибо за ответ, однако, должен сказать, что для понимания этой процедуры я еще не вырос. Я пытался решить эту задачу по другому, но ничего не выходит. Попытаюсь для ясности сформулировать задачу. На форму бросил DBGrid, DataSource, Query, 13 шт. Edit (далее поля ввода) , и одну кнопку Button1 для которой написал обработчик. Имеется база данных FoxPro с 33 полями. Необходимо написать параметрический запрос к базе данных, при этом необходимо иметь в виду, что не во все поля ввода будут заносится данные для запроса. Вот примерный код. procedure TForm1.Button1Click(Sender: TObject); begin query1.close; if not query1.prepared then query1.prepare; query1.ParamByName('stnum_param').value:=edit3.text; query1.ParamByName('mark_param').value:=edit4.text; query1.ParamByName('god_param').value:=edit5.text; query1.ParamByName('ndvig_param').value:=edit6.text; query1.ParamByName('kuzo_param').value:=edit7.text; query1.ParamByName('shas_param').value:=edit8.text; query1.ParamByName('fam_param').value:=edit9.text; query1.ParamByName('nam_param').value:=edit10.text; query1.ParamByName('pat_param').value:=edit11.text; query1.ParamByName('rajon_param').value:=edit12.text; query1.ParamByName('town_param').value:=edit13.text; query1.ParamByName('street_param').value:=edit14.text; query1.ParamByName('predpr_param').value:=edit15.text; query1.open; label17.Caption:=inttostr(Query1.RecordCount); end; А в и инспекторе объектов DBGrid открыл SQL и написал такой запрос. select * from 'asd1.dbf' asd1 where st_num like :stnum_param and mark like :mark_param and god_build like :god_param and n_dvig like :ndvig_param and n_kuzo like :kuzo_param and n_shas like :shas_param and fam like :fam_param and nam like :nam_param and pat like :pat_param and rajon like :rajon_param and town like :town_param and street like :street_param and predpr like :predpr_param при вводе данных для запроса через Edit я могу начать как с первого до 13, так и заносить только к примеру в поля 3,6,10. Однако, у меня работает только по первым двум полям. Моей конечной задачей является при помощи 13 полей ввода сделать запрос к базе зарегистрированного транспорта. Запрос должен обеспечивать выборку как по всем полям так и по одному полю, т.е. либо по всем реквизитам транспорта, либо по нескольким, либо по одному. Благодарю за терпение и помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2002, 19:13 |
|
Дополнение к первому вопросу
|
|||
---|---|---|---|
#18+
Вам надо было сразу сказать, что Вы работаете с DBF. Разумеется, никаких хранимых процедур там нет, и не было. Просто на данном сайте обычно обсуждаются вопросы, связанные с SQL-серверами. В Вашем случае Вам придется отказаться от параметрического запроса и делать сборку строки вручную. Все равно PREPARE для DBF нужно, как в бане лыжи (пассатижи). Если Вы работаете через BDE, то я уж точно и не помню, как там называлось это свойство. Ну да в этом разберетесь. Кажется Query.SQL.text. Пишете что то типа - SQLHeader:= 'select * from ''asd1.dbf'' asd1 ' SQLBody:=''; if trim(edit3.text)<>''{защита от идиотов, которые будут сюда вводить пробелы} then SQLBody:= SQLBody+'and st_num like '+ansiQuotedStr(edit3.text,'''')+'%,' и так далее. После этого надо убрать ведущий 'and' и заключительную запятую. if SQLBody>'' then begin SQLBody:=copy(SQLBody,1,length(SQLBody)-1); SQLBody:=copy(SQLBody,5,length(SQLBody)-6); end; Query.SQL.text:=SQLHeader+' where '+SQLBody; Query.open; ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2002, 20:39 |
|
Дополнение к первому вопросу
|
|||
---|---|---|---|
#18+
Я забыл про проверку на то, что ни одно поле не заполнено. Вообще-то лучше разрешать выполнять этот запрос, если заполнены хотя бы основные отсекающие поля, в Вашем случае это могут быть регионы. Ну да это дело техники и конкретной реализации. if SQLBody='' then begin showmessage('Кретин!. Введи хоть что-нибудь!') Query.SQL.text:=SQLHeader; end else begin Query.SQL.text:=SQLHeader+' where '+SQLBody; end; Query.open; ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2002, 21:39 |
|
Дополнение к первому вопросу
|
|||
---|---|---|---|
#18+
Наконец-то я пришел в себя после вчерашнего. Разумеется никаких запятых в SQLBody не должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2002, 17:29 |
|
|
start [/forum/topic.php?fid=58&msg=32035452&tid=2119963]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 285ms |
total: | 419ms |
0 / 0 |