|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Поиск по базе данных
Добрый день.
Есть код, который осуществляет поиск по набранному номеру (колонка 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
|
||||
|
||||
Лучше наверно фильтр использовать:
Код:
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
|
|||
|
|||
Цитата:
Спасибо Ildar-tsr буду пробовать |