Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по подстроке [D6, dBase, FoxPro]


ttt_111 ©   (2006-08-02 14:50:00) 

Есть ли процедура позволяющая найти запись по подстроке :
например есть запись - ООО "Колобок", ее нужно найти по подстроке - Колобок.


alseos   (2006-08-02 16:49:00) [1]

Desdechado ©
 Извини, я не понял, против какого дубляжа? (возможно я где-то затупил). И собственно, что и какому посту не противоречит?


alseos   (2006-08-02 16:39:00) [2]


> Sergey13 ©   (02.08.06 16:14) [10]
> > [9] alseos ©   (02.08.06 15:53)
>
> Так автору нужна была "процедура в Делфи". А "в Делфи" кроме
> как перебором всех строк ничего не найдешь.


Не стану спорить. Я просто предложил свое решение поставленной задачи, которое работает на практке. Только и всего. Если кто-то может предложить решение проще и (или) быстрее, то мне это будет интересно.

Кроме того, компонент TQuery такой же компонент Delphi как TButton или TEdit, - следовательно все, что он может - может Delphi.


Desdechado   (2006-08-02 16:24:00) [3]

alseos ©   (02.08.06 16:21) [11]
Ничего не имею против, кроме как против дубляжа :)
Это ведь не противоречит моему посту.


alseos   (2006-08-02 16:21:00) [4]


> Desdechado ©   (02.08.06 15:46) [8]
> Найти - это позиционироваться или выбрать?
> Выбор уже показали, позиционирование через Locate или перебором
> датасета со сравнением по условию.


  Я подразумеваю, что в таблице-справочнике контрагентов (организаций) обычно бывает какой-то уникальный код или шифр (чаще цифровой). Этот код можно определить с помощью того фрагмента, который я привел. Код можно передать и в Locate.
  Кроме всего прочего так получается быстрее, чем как-либо еще, особенно, когда в справочнике 15-30 тысяч записей (сам пробовал). Да и может такое статься, что этих "колобков" больше, чем один. Тогда пользователю можно легко предложить бы   Я подразумеваю, что в таблице-справочнике контрагентов (организаций) обычно бывает какой-то уникальный код или шифр (чаще цифровой). Этот код можно определить с помощью того фрагмента, который я привел. Код можно передать и в Locate.
  Кроме всего прочего так получается быстрее, чем как-либо еще, особенно, когда в справочнике 15-30 тысяч записей (сам пробовал). Да и может такое статься, что этих "колобков" больше, чем один. Тогда пользователю можно легко предложить выбрать одного из них, не так ли?


Sergey13   (2006-08-02 16:14:00) [5]

> [9] alseos ©   (02.08.06 15:53)

Так автору нужна была "процедура в Делфи". А "в Делфи" кроме как перебором всех строк ничего не найдешь.


alseos   (2006-08-02 15:53:00) [6]


> Sergey13 ©   (02.08.06 15:41) [6]
> > [3] ttt_111   (02.08.06 15:14)
>
> Pos - не подойдет?


 Если использовать Pos, придется "вручную" обойти всю таблицу, что несколько "накладно" не так ли?
 Если бы требовалось найти подстроку в строке - тогда конечно, а так написано:

> например есть запись- ООО "Колобок", ее нужно найти по
> подстроке - Колобок.

потому я и стал рассказывать, как искать записи (строки)  в таблице.


Desdechado   (2006-08-02 15:46:00) [7]

Найти - это позиционироваться или выбрать?
Выбор уже показали, позиционирование через Locate или перебором датасета со сравнением по условию.


ttt_111   (2006-08-02 15:43:00) [8]

Спасибо, все понятно.


Sergey13   (2006-08-02 15:41:00) [9]

> [3] ttt_111   (02.08.06 15:14)

Pos - не подойдет?


alseos   (2006-08-02 15:40:00) [10]

Получается примерно следующее:
procedure TForm1.Button1Click(Sender: TObject);
 Var Q:TQuery;
begin
 Q:=TQuery.Create(nil);
 Q.SQL.Text:='Select * from "c:\Sprav.Dbf" where nameoorg like ''%Колобок%''';
 Q.Open;
   //  Здесь можно обращаться к Q как к обычной таблице
   //  стуктура которой, такая же, как и Spav.Dbf
 Q.Free
end;


все ли понятно?


alseos   (2006-08-02 15:20:00) [11]

Я сам занимался подобной задачей некоторое время тому назад. Могу выложить открытые свои тексты (или их фрагменты), если интересно.


> Select * from [имя_таблицы] where [имя_столбца] like "%Колобок%"


выберет из таблицы (*.dbf) все записи, где встречается "Колобок".


ttt_111   (2006-08-02 15:14:00) [12]

Процедура в Delphi


alseos   (2006-08-02 15:00:00) [13]

Не понял, в чем должна быть написана процедура в FoxPro или в Delphi?

В любом случае, проще всего:

Select * from [имя_таблицы] where [имя_столбца] like "%Колобок%"

Это, если я правильно понял вопрос.


Sergey13   (2006-08-02 14:56:00) [14]

Есть, и не одна.


Наверх

Титульная страница Поиск, карта сайта Написать письмо