Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 14:09   #1
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию Запрос выдает неверный результат

Имеется запрос
Код:
SELECT * FROM Clients
WHERE (Alt_Name LIKE '%%' OR Name LIKE '%%')
AND Main_Telephone LIKE '%%'
AND Fact_Adress LIKE '%%' 
AND E_mail LIKE '%%'
ORDER BY Alt_Name
И он выдает не все записи, что не так? Я уже всю голову сломал.
Sergio_O вне форума Ответить с цитированием
Старый 12.01.2011, 14:11   #2
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

а зачем тут like?
Код:
SELECT * FROM Clients ORDER BY Alt_Name
dosha вне форума Ответить с цитированием
Старый 12.01.2011, 14:21   #3
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию

Потому что это используется для фильтра данных, которыми управляет пользователь. и когда все фильтры пусты получается именно такой запрос.

код для фильтров:
Код:
procedure TFrmManagers.Edit_FNameChange(Sender: TObject);
begin
  Q_Clients.SQL.Strings[1]:= 'WHERE (Name LIKE ''%' + Edit_FName.Text + '%'') OR ' + '(Alt_Name LIKE ''%' + Edit_FName.Text + '%'')';
  Q_Clients.Active:= true;
//  Memo1.Lines:= Q_Clients.SQL;
end;

procedure TFrmManagers.Edit_FPhoneChange(Sender: TObject);
begin
  Q_Clients.SQL.Strings[2]:= 'AND Main_Phone LIKE ''%' + Edit_FPhone.Text + '%''';
  Q_Clients.Active:= true;
//    Memo1.Lines:= Q_Clients.SQL;
end;

procedure TFrmManagers.Edit_FEmailChange(Sender: TObject);
begin
  Q_Clients.SQL.Strings[4]:= 'AND E_Mail LIKE ''%' + Edit_FEmail.Text + '%''';
  Q_Clients.Active:= true;
//    Memo1.Lines:= Q_Clients.SQL;
end;

procedure TFrmManagers.Edit_FAdressChange(Sender: TObject);
begin
  Q_Clients.SQL.Strings[3]:= 'AND Fact_Adress LIKE ''%' + Edit_FAdress.Text + '%''';
  Q_Clients.Active:= true;
//    Memo1.Lines:= Q_Clients.SQL;
end;
Sergio_O вне форума Ответить с цитированием
Старый 12.01.2011, 14:24   #4
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

твоя главная ошибка Q_Clients.Active:= true; и ты вполняешь лишь часть запроса
dosha вне форума Ответить с цитированием
Старый 12.01.2011, 14:33   #5
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию

С чего баня-то упала?

Любое редактирование запроса приводит к Active = false.
Так что в конце редактирования запроса его снова надо сделать активным.
Тыщу лет так делаю и все было нормально.


Найдена интересная закономерность:
Запись не выводиться если поле, учавсвующее в выражении LIKE пустое, !но! только в том случае если в него никогда ничего не вводили. А вот если там когда-то что-то было, но удалили, то запрос находит эту запись.
Sergio_O вне форума Ответить с цитированием
Старый 12.01.2011, 14:49   #6
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

знач добавь условие при пусто выполнить просто ,а при непуспом это
dosha вне форума Ответить с цитированием
Старый 12.01.2011, 14:53   #7
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию

дак уж сделал, но все же хотелось бы узнать почему LIKE %% не работает
Sergio_O вне форума Ответить с цитированием
Старый 12.01.2011, 15:33   #8
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

укажи тольк один % знак
dosha вне форума Ответить с цитированием
Старый 12.01.2011, 16:02   #9
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от Sergio_O Посмотреть сообщение
Найдена интересная закономерность:
Запись не выводиться если поле, учавсвующее в выражении LIKE пустое, !но! только в том случае если в него никогда ничего не вводили. А вот если там когда-то что-то было, но удалили, то запрос находит эту запись.

есть такое слово NULL
вернее не слово а значение поля) О NULL в базах данных целые оды написаны))

Последний раз редактировалось vovk; 12.01.2011 в 16:09. Причина: помледняя строчка
vovk вне форума Ответить с цитированием
Старый 12.01.2011, 17:02   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хотелось бы узнать почему LIKE %% не работает
А почему он должен работать если ты строку указываешь двойными ковычками?
Нужно так:
Код:
Q_Clients.SQL.Strings[2]:= 'AND Main_Phone LIKE'+Quotedstr('%' + Edit_FPhone.Text + '%');
А в "" указывается имя объекта, если он содержит пробелы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java.iReport.В блоке detail выводится неверный результат. Может кто знает, как верно. Aida_K JavaScript, Ajax 0 10.10.2010 17:00
Почему сумма выдает неверный результат? KNatalia Microsoft Office Excel 4 26.05.2010 14:50
результат выдает -Nan- Тонущий коржик Помощь студентам 2 25.11.2009 23:28
Неверный запрос Gromsky SQL, базы данных 9 21.08.2009 18:25
В чем ошибка в запросе?неверный результат =( Lunatikus SQL, базы данных 3 26.11.2007 09:50