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

 



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.09.2018, 12:08
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Поиск в Table

Подскажите пожалуйста при таком условии
Код:
if not Table1.Locate('GIC', Edit1.Text, [])
then ShowMessage('Такого номера ГИЦ нет')
всё ищет, но в поле 'GIC' бывают и пробелы например ' 1234 ', ' 1234' и естественно это число не находит. Подскажите как организовать поиск таких чисел без SQL запросов?
Ответить с цитированием
  #2  
Старый 01.09.2018, 17:23
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Используйте функцию 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  
Старый 02.09.2018, 10:11
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Подключение к базе FoxPro .dbf через BDE, задача обойтись без SQL запросов если это возможно. DataSource1, Table1, DBGrid1.
Ответить с цитированием
  #4  
Старый 02.09.2018, 11:23
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Пробовали ту ссылку, что я привёл? Срабатывает?
Ответить с цитированием
  #5  
Старый 02.09.2018, 11:58
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Да! Там с SQL запросами всё! (
Ответить с цитированием
  #6  
Старый 02.09.2018, 12:15
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Хм... И это тоже?
Код:
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  
Старый 02.09.2018, 12:27
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Дык насколько я понял это фильтрация, а мне поиск нужен в Table1!!!
Ответить с цитированием
  #8  
Старый 02.09.2018, 12:30
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Пользователь вводит номер в Edit и нажимает поиск (Button).
Ответить с цитированием
  #9  
Старый 02.09.2018, 13:39
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Прошу прощения за свою невнимательность, в самом первом посте написано ведь - Locate, а я что-то в фильтрацию вцепился.
Попробуйте так:
Код:
if not Table1.Locate('GIC', Edit1.Text, [loPartialKey]) ...
Ответить с цитированием
  #10  
Старый 02.09.2018, 14:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,026
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от kiddan
Пользователь вводит номер в Edit и нажимает поиск (Button).
Тогда придется вот так бегать по всем записям таблички
Код:
 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  
Старый 02.09.2018, 15:51
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Тоже вариант, только до начала "пробега" желательно запомнить код записи, чтобы затем на неё вернуться. Или - что лучше - искать в дополнительном датасете, не подключенном к компонентам визуализации; так будет быстрее и удобнее.
Ответить с цитированием
  #12  
Старый 03.09.2018, 09:09
kiddan kiddan вне форума
Прохожий
 
Регистрация: 01.09.2018
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо всё работает!
Ответить с цитированием
  #13  
Старый 03.09.2018, 09:23
Аватар для Guaho
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 94
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Что именно сработало - [loPartialKey] или перебор записей? (хотя перебор само собой должен прокатить, без вопросов).
Ответить с цитированием
Ответ



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter