|
#1
|
|||
|
|||
Поиск в Table
Подскажите пожалуйста при таком условии
Код:
if not Table1.Locate('GIC', Edit1.Text, []) then ShowMessage('Такого номера ГИЦ нет') |
#2
|
||||
|
||||
Используйте функцию trim, она убирает пробелы. Вместо "Edit1.Text" пишите trim (Edit1.Text).
ПРАВКА: сори, ерунду написал не глядя, а удалить сообщение не могу. Trim нужно применять при вводе, чтоб не было записей с пробелами. Попробуйте сделать, как тут: http://web-developments.ru/prikladno...h-delfi-delphi. Не знаю, какой механизм используете для работы с БД (в приведённом примере - ADO), так что не факт, что прокатит. А вообще зря опасаетесь SQL. Очень простая штука на самом деле. И очень мощная по своим возможностям. Рано или поздно всё равно придётся его использовать. Например, в данном случае нужно кинуть на форму компонент TADOQuery (или что-то другое, не знаю, какой движок Вы используете), обозвать его "q", указать в его параметрах данные для соединения с БД, а в обработчике Edit1.Change прописать: Код:
q.SQL.Clear; q.SQL.Add('SELECT * FROM Имя_таблицы'); q.SQL.Add('WHERE GIC LIKE "%' + trim(Edit1.Text) + '%"'; q.Active := true; Последний раз редактировалось Guaho, 01.09.2018 в 17:48. |
#3
|
|||
|
|||
Подключение к базе FoxPro .dbf через BDE, задача обойтись без SQL запросов если это возможно. DataSource1, Table1, DBGrid1.
|
#4
|
||||
|
||||
Пробовали ту ссылку, что я привёл? Срабатывает?
|
#5
|
|||
|
|||
Да! Там с SQL запросами всё! (
|
#6
|
||||
|
||||
Хм... И это тоже?
Код:
procedure TForm1.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) > 0 then begin ADOTable1.Filtered:=false; ADOTable1.Filter:=Combobox1.Text + ' LIKE ' + #39 + Edit1.Text + '%' + #39; ADOTable1.Filtered:=true; end else ADOTable1.Filtered:=false; end; |
#7
|
|||
|
|||
Дык насколько я понял это фильтрация, а мне поиск нужен в Table1!!!
|
#8
|
|||
|
|||
Пользователь вводит номер в Edit и нажимает поиск (Button).
|
#9
|
||||
|
||||
Прошу прощения за свою невнимательность, в самом первом посте написано ведь - Locate, а я что-то в фильтрацию вцепился.
Попробуйте так: Код:
if not Table1.Locate('GIC', Edit1.Text, [loPartialKey]) ... |
#10
|
||||
|
||||
Цитата:
Код:
with Table1 do begin First; while (not Eof) and (not (Trim(FieldByName('GIC').AsString) = Edit1.Text)) do Next; if Eof then ShowMessage('Такого номера ГИЦ нет'); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
kiddan (03.09.2018)
|
#11
|
||||
|
||||
Тоже вариант, только до начала "пробега" желательно запомнить код записи, чтобы затем на неё вернуться. Или - что лучше - искать в дополнительном датасете, не подключенном к компонентам визуализации; так будет быстрее и удобнее.
|
#12
|
|||
|
|||
Спасибо всё работает!
|
#13
|
||||
|
||||
Что именно сработало - [loPartialKey] или перебор записей? (хотя перебор само собой должен прокатить, без вопросов).
|