|
|
#1
|
||||
|
||||
Кто виноват?
Добрый день..., пишу впервые так, что сильно не пинайте если тема баян
У меня БД на акцессе, а сама прога соответственно на делфи. Имеется пять столбцов Столбцы telefon и note у меня в БД пустые, в итоге когда я делаю запрос SELECT * FROM Crosse; - Код:
Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'''); Form1QueryCrosse.Active:=true; то при вводе параметров Grom, Plint и Port у меня все работает нормально, а если я делаю запрос с учетом пустых полей - telefon и note Код:
Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE telefon LIKE '''+Edit1.Text+'%'' AND grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'' AND note LIKE '''+Edit6.Text+'%'''); Form1QueryCrosse.Active:=true; то при вводе параметров Grom, Plint и Port у меня результат выходи пустым, в чем проблема не пойму В чем проблема???? в том плане куда рыть??? в делфи или в акцессе Последний раз редактировалось th_bav, 02.12.2010 в 13:53. |
#2
|
|||
|
|||
в логике запроса!
не совсем понятно что вы хотите получить в итоге ведь сами написали что: Цитата:
а в запросе пытаетесь по ним зажаться: Цитата:
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#3
|
||||
|
||||
Цитата:
Поетому я и посчитал нужным добавить %, как тогда быть???? Можно конечно к примеру поумолчанию добавлять в каждое поле какойнибудь символ, чтобы оно не было пустым, но это сами понимаите на вариант))))))))) Как тогда мне быть??? Дело в том что я пишу кросовый журнал, у меня в нем три поля заполняются в любом случае т.к. это адреса портов, а поля телефон и примичание могут быть и пустым т.к. наврятле емкость будет полностью использована, тем более сразу. Поетому я и посчитал нужным добавить %, как тогда быть???? Можно конечно к примеру поумолчанию добавлять в каждое поле какойнибудь символ, чтобы оно не было пустым, но это сами понимаите на вариант))))))))) Как тогда мне быть??? Может начать выполнение процедуры с IF? Тобишь если поле поиска telefon пустое то выполняй этот запрос Код: Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'''); Form1QueryCrosse.Active:=true; А если в поле telefon что то есть, то выполняй этот запрос Код: Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE telefon LIKE '''+Edit1.Text+'%'' AND grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'' AND note LIKE '''+Edit6.Text+'%'''); Form1QueryCrosse.Active:=true; И так же с полем note??? Вроде более простого способа нету... Завтра если успею помучать Delphi то отпишусь, может кому пригодиться... Кстати спасибо за совет!!! Последний раз редактировалось th_bav, 03.12.2010 в 07:40. |
#4
|
|||
|
|||
Вариант - использовать событие OnFilterData и фильтровать руками.
Т.е. у тебя всегда идет фильтрация по гарантированно заполненым полям, а все остальные - руками на клиенте. |
#5
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
Дошло))))))) Вот так надо было, может кому то пригодиться
Код:
procedure TForm1.Button3Click(Sender: TObject); var note:integer; begin if Edit1.Text='' then begin Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'''); Form1QueryCrosse.Active:=true; Memo1.Lines.Add(Form1QueryCrosse.SQL.Text) end else begin Form1QueryCrosse.Active:=false; Form1QueryCrosse.SQL.Clear; Form1QueryCrosse.SQL.Add('SELECT *'); Form1QueryCrosse.SQL.Add('FROM Crosse'); Form1QueryCrosse.SQL.Add('WHERE telefon LIKE '''+Edit1.Text+'%'' AND grom LIKE '''+Edit2.Text+'%'' AND plint LIKE '''+Edit3.Text+'%'' AND port LIKE '''+Edit4.Text+'%'' AND type LIKE '''+Edit5.Text+'%'' AND note LIKE '''+Edit6.Text+'%'''); Form1QueryCrosse.Active:=true; end; end; end. Последний раз редактировалось Admin, 03.12.2010 в 15:01. |