Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск по базе, TTable 
:(
    Опции темы
Chyslyvchyk
Дата 28.7.2004, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 9.5.2004

Репутация: 1
Всего: 5



Цитата(Ingvar @ 27.7.2004, 20:51)
Грм, Уважаемые, а слабо использовать конструкцию SELECT ..... LIKE ?
Вообще, при таких размерах таблиц Дурильон на Дофига желательно использовать СУБД с SQL. При этом выбор данных производиться гораздо шустрее...

Дык ведь не Дурильон на Дофига то...
А с SQL мы пока не дружим.... adv/54.gif



Кому интересно, задача была решена так:
Код
procedure ...
var i:integer;
     label GoToCircul;

begin
     // так как для поиска используется только одна кнопка "Поиск", то если не использовать первые две строки процедурка будет постоянно находить первую запись и exit
     Table.RecNo:=StrToInt(Label.caption); // в Label выводился номер текущей записи
     Table.Next;
     GoToCircul:
      while not Table.eof do
      begin
        for i := 0 to Table.Fields.Count - 1 do
        begin
          if Pos (AnsiUpperCase(SearchEd.Text), AnsiUpperCase(Table.Fields[i].AsString)) <> 0 then
         begin
          ... выполняю че мне надо, если нашло
          exit;
          end;
        end;
      Table.Next;
      end;
         // если последняя запись базы - начать сначала            
          if Table.eof then
           begin
           Table.First;
           goto GoToCircul;
           end;
end;
         




--------------------
Простота - сестра таланта!
PM MAIL   Вверх
78125
Дата 28.7.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 20.1.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



вот сморю я на код с безусловным переходом и меня аж передергивает! hehe.gif
--------------------
купим подпись
PM MAIL   Вверх
Chyslyvchyk
Дата 28.7.2004, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 9.5.2004

Репутация: 1
Всего: 5



Цитата(78125 @ 28.7.2004, 11:52)
вот сморю я на код с безусловным переходом и меня аж передергивает! hehe.gif

qstn.gif


--------------------
Простота - сестра таланта!
PM MAIL   Вверх
Girder
Дата 28.7.2004, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



А что тебя передергивает? Думаеш если у тебя нет переходов, то их и не будет в скомпилированной программе?


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Akella
  Дата 30.7.2004, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Процедура поиска по всем полям

Код
Procedure FindRec(What,Mes:String;DS:TDataSet;sFields:array of String;
                            foFromBegin,foCaseSansitive,ShowMes:Boolean);
{
What            - строка для поиска (editFind.Text)
DS              - таблица (TTable,TQuery и т.д.)
Fields          - список полей, по которым нужно вести поиск (['Field1','Field3','Field7'])
foFromBegin     - поиск от начала таблицы (true - от начала или False от текущей записи)
foCaseSansitive - поиск с зависимостью от регистра символов (true - зависит от регистра или False не зависит от регистра)
}
  Function FieldInFields(_Field:String;_Fields:array of String):Boolean;//
  Var
   x:byte;
  begin//содержиться ли текущее поле в масива полей, предназначенных для поиска
    Result:=False;
    For x:=Low(_Fields) to High(_Fields) do
      if _Field = _Fields[x] then begin
        result:=true;
        exit;
      end;//if
  end;//func

Var
i,q,f,w:integer;
begin
ds.DisableControls;//для ускорения отключаем таблицу
w:=ds.RecNo;
try
  //если поиск сначала таблицы
    if foFromBegin then q:=0 else q:=ds.RecNo;
  //идем по всем записям
    For i:=q to ds.RecordCount-1 do begin
  //пробег по всем полям
      For f:=0 to ds.FieldCount-1 do begin
  //если текущее поле содержится в массиве полей, предназначенных для поиска
        if FieldInFields(ds.Fields[f].FieldName,sFields) then begin
  //проверка на регистр
          if (foCaseSansitive = True) AND (POS(What,ds.Fields[f].AsString)<>0) then exit;
          if (foCaseSansitive = False) AND (POS(AnsiUpperCase(What),AnsiUpperCase(ds.Fields[f].AsString))<>0) then exit;
        end;//if FieldInFields(ds.Fields[f].FieldName,sField) then begin
      end;//For f:=0 to ds.FieldCount-1 do begin
      ds.Next;
    end;//For i:=q to ds.RecordCount-1 do begin
    ds.RecNo:=w;
    if ShowMes then ShowMessage(mes);
finally
  ds.EnableControls;//даже если произойдет исключение, то таблицу надо включить
end;//try-finally
end;//proc




Пример использования
[/code]
FindRec(edFindText.Text,'',dm.tSpis,['Dirname','Type','PathName','Prim'],False,cbRegister.Checked,False);[CODE]

Это сообщение отредактировал(а) dsergey - 30.7.2004, 09:05
PM MAIL   Вверх
78125
Дата 30.7.2004, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 20.1.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Girder Я имел ввиду неоткомпилированный код....
Безусловный переход всегда можно заменить циклами и условными переходами и тд.
А скомпилированный код меня не интересцует впринципе....

--------------------
купим подпись
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.