Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2010, 13:50
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию Кто виноват?

Добрый день..., пишу впервые так, что сильно не пинайте если тема баян
У меня БД на акцессе, а сама прога соответственно на делфи.
Имеется пять столбцов
Столбцы 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 у меня результат выходи пустым, в чем проблема не пойму
В чем проблема???? в том плане куда рыть??? в делфи или в акцессе
Изображения
Тип файла: jpg w.JPG (18.3 Кбайт, 12 просмотров)

Последний раз редактировалось th_bav, 02.12.2010 в 13:53.
Ответить с цитированием
  #2  
Старый 02.12.2010, 17:11
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

в логике запроса!
не совсем понятно что вы хотите получить в итоге ведь сами написали что:
Цитата:
Столбцы telefon и note у меня в БД пустые.

а в запросе пытаетесь по ним зажаться:
Цитата:
Код:
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+'%''');
но если хоть одно поле telefon или note... т.е. если оно пустое то оно не попадает в вашу выборку отсюда и пустой набор.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 02.12.2010, 19:33
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
Радость

Цитата:
Сообщение от Black Raider
в логике запроса!
что вы хотите получить в итоге.
Дело в том что я пишу кросовый журнал, у меня в нем три поля заполняются в любом случае т.к. это адреса портов, а поля телефон и примичание могут быть и пустым т.к. наврятле емкость будет полностью использована, тем более сразу.
Поетому я и посчитал нужным добавить %, как тогда быть???? Можно конечно к примеру поумолчанию добавлять в каждое поле какойнибудь символ, чтобы оно не было пустым, но это сами понимаите на вариант))))))))) Как тогда мне быть???
Дело в том что я пишу кросовый журнал, у меня в нем три поля заполняются в любом случае т.к. это адреса портов, а поля телефон и примичание могут быть и пустым т.к. наврятле емкость будет полностью использована, тем более сразу.
Поетому я и посчитал нужным добавить %, как тогда быть???? Можно конечно к примеру поумолчанию добавлять в каждое поле какойнибудь символ, чтобы оно не было пустым, но это сами понимаите на вариант))))))))) Как тогда мне быть???
Может начать выполнение процедуры с 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  
Старый 02.12.2010, 19:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вариант - использовать событие OnFilterData и фильтровать руками.
Т.е. у тебя всегда идет фильтрация по гарантированно заполненым полям, а все остальные - руками на клиенте.
Ответить с цитированием
  #5  
Старый 03.12.2010, 06:58
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Вариант - использовать событие OnFilterData и фильтровать руками.
Т.е. у тебя всегда идет фильтрация по гарантированно заполненым полям, а все остальные - руками на клиенте.
А можно поподробнее, хотя бы про какой объект речь идет??? Потому, что у DataSurce и DataQuery таких событий не нашел, гугль тоже молчит
Ответить с цитированием
  #6  
Старый 03.12.2010, 11:40
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Дошло))))))) Вот так надо было, может кому то пригодиться
Код:
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: Пользуемся тегами, иначе последуют санкции!

Последний раз редактировалось Admin, 03.12.2010 в 15:01.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter