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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.12.2011, 11:32
royun royun вне форума
Прохожий
 
Регистрация: 19.08.2011
Сообщения: 28
Репутация: 10
По умолчанию Поиск по базе данных

Добрый день.

Есть код, который осуществляет поиск по набранному номеру (колонка abonenta) в таблице billing за период даты (колонка Date, sDateEdit1.Text - начальная дата, sDateEdit2.Text - конечная дата)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
sql:string;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
sql:= 'SELECT * FROM billing where [abonenta]='''+Edit1.Text+''' and Date >= '''+sDateEdit1.Text+''' and date <= '''+sDateEdit2.Text+'''';
ADOQuery1.SQL.Add(sql);
try
ADOQuery1.Open;
except
application.MessageBox( 'Не могу выполнить запрос', 'Ошибка',MB_OK);
end;
end;

и есть запрос

Код:
sql:= 'SELECT * FROM billing where [abonenta]='''+Edit1.Text+''' and Date >= '''+sDateEdit1.Text+''' and date <= '''+sDateEdit2.Text+'''';

который не правильно работает. Если я хочу найти набранный номер по всей таблице, я не устанавливаю начальную и конечную даты. И когда я нажимаю кнопку "найти", на DBGrid ни чего не выводится. Хотя данные по этому номеру точно есть. И также, если я хочу найти набранный номер по всей таблице с начальной датой, то тоже на DBGrid ни чего не выводит.

Я понимаю что сам запрос не идеален, поэтому прошу вас усовершенствовать данный запрос.
Ответить с цитированием
  #2  
Старый 15.12.2011, 15:48
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Лучше наверно фильтр использовать:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Filtered:= false;
  ADOQuery1.Filter:= '[abonenta] = '+QuotedStr(Edit1.Text);
  if (sDateEdit1.Text <> '') and (sDateEdit2.Text <> '') then
    ADOQuery1.Filter:= ADOQuery1.Filter + ' and [Date] between '+QuotedStr(sDateEdit1.Text)+' and '+QuotedStr(sDateEdit2.Text);
  ADOQuery1.Filtered:= true;
end;
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
Sofia Guseva (24.12.2011)
  #3  
Старый 19.12.2011, 07:08
royun royun вне форума
Прохожий
 
Регистрация: 19.08.2011
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Лучше наверно фильтр использовать:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Filtered:= false;
  ADOQuery1.Filter:= '[abonenta] = '+QuotedStr(Edit1.Text);
  if (sDateEdit1.Text <> '') and (sDateEdit2.Text <> '') then
    ADOQuery1.Filter:= ADOQuery1.Filter + ' and [Date] between '+QuotedStr(sDateEdit1.Text)+' and '+QuotedStr(sDateEdit2.Text);
  ADOQuery1.Filtered:= true;
end;

Спасибо Ildar-tsr буду пробовать
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter