Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Такая вот проблемка...   Найти похожие ветки 

 
dera   (2006-01-31 19:17) [0]

Использую метод Table.Locate для поиска записи. Но когда запись находится, надо, чтоб поиск происходил дальше (курсор не перемещался на первую запись) по нажатию на батон. Но по нажатию на батон, вызывается этот же метод и поиск начинается сначала. Как продолжить поиск?


 
dera   (2006-01-31 19:50) [1]

Как пройтись в таблице по всем заданым записям? Например, надо найти в поле FAM значение "Иванов". Но программа должна найти первую запись и установить на ней курсор, по нажатию на батон, найти вторую запись, установить на ней курсор, по нажатию на батон - третью и т.д. - до последней записи.


 
Desdechado ©   (2006-01-31 21:07) [2]

на батоне

while not table.eof do
begin
 проверить условие "иванов", если да, то break
 next;
end;

locate, как в справке и написано, ищет первую подходящую запись, а не все подряд


 
dera   (2006-02-01 11:33) [3]

спасибо за ответ. А как при этом проверить частичное совпадение? Например, прийтись по всем записям, что начинаются на "ИВАН".


 
msguns ©   (2006-02-01 11:49) [4]

function DBServ_SearchRecordByField(Grid: TDBGrid; Option: TSearchOption; RaiseErr: boolean): boolean;
// Функция ищет запись в открытом НД, отображаемом в гриде по значению текущего поля
//  (колонки грида) в напрвлении, указанном Option
var
 bm: TBookMark;
 val: variant;
 DS: TDataSet;
begin
 result := false;
 if not Grid.Focused then exit;
 DS := Grid.DataSource.DataSet;
 if (DS=nil) or not DS.Active or (DS.RecordCount<2) then exit;
 Screen.Cursor := crHourGlass;
 DS.DisableControls;
 DS.Tag := 1;
 bm := DS.GetBookmark;
 val := Grid.SelectedField.Value;
 if Option=soFirst then
   begin
    if DS.Locate(Grid.SelectedField.FieldName,Grid.SelectedField.Value,[]) then
      begin bm := DS.GetBookmark; result := true; end;
   end
 else
   if Option in [soNext,soLast] then
     begin
      DS.Next;
      while not DS.Eof do
        begin
         if Grid.SelectedField.Value=val then
           begin
            result := true;
            bm := DS.GetBookmark;     // Запомнить последнюю найденную
            if Option=soNext then break;
           end;
         DS.Next;
        end;
     end
   else
     begin
      DS.Prior;
      while not DS.Bof do
        begin
         if Grid.SelectedField.Value=val then
           begin
            result := true;
            bm := DS.GetBookmark;     // Запомнить первую найденную
            break;
           end;
         DS.Prior;
        end;
     end;
 DS.Tag := 0; DS.EnableControls; DS.GotoBookmark(bm); DS.FreeBookmark(bm);
 Screen.Cursor := crDefault;
 if not result and RaiseErr then ShowMessage("Образец не найден");
end;


Для частичного совпадения вместо

  if Grid.SelectedField.Value=val then

кодировать :

1) Чтобы найти начинающееся на <образец>

  if Copy(Grid.SelectedField.Value,1,Lenght(val))=val then

2) Чтобы найти содержащее <образец> в любой части выражения

  if pos(val,Grid.SelectedField.Value)>0 then

Для того, чтобы игнорировать регистр, в 1) и 2) надо доп-но использовать функцию приведения AnsiUpper|LowerCase

Это для поиска первой или очередной (вперед или назад).

Для поиска всех, удовлетворяющих заданному условию, используют динамически созданные запросы (TXXQuery), результаты которых помещают в отдельные списки (TListVeiw,TStringList,..) и показывают пользователю, который может, щелкнув на любой отобранной записи, увидеть ее полный вид в основной решетке (прграмма по клику должна найти в осн.датасете запись, соотв-ю выьбранному элементу списка, обычно методом Locate(<UID>).

 В зависимости от полноты совпадения и учета регистра запрпос на выборку содержит соответствующие условия-функции языка SQL


 
dera   (2006-02-01 12:03) [5]

<msguns ©   (01.02.06 11:49) [4] >
Хотя не все пока и понятно, но большое спасибо, за ответ!



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.133 c
1-1136990344
DelphiLexx
2006-01-11 17:39
2006.02.19
Сохранить рисунок с TPanel


9-1125324298
Goorus
2005-08-29 18:04
2006.02.19
Геометрия: перенос точек


15-1138273868
Ega23
2006-01-26 14:11
2006.02.19
Коллеги, есть концептуальный вопрос!


15-1138371733
AlexXXX
2006-01-27 17:22
2006.02.19
Видеоролик с бегущей строкой


15-1137060329
Kerk
2006-01-12 13:05
2006.02.19
MiniMoscowMastakParty 2006





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский