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

Вниз

Поиск по БД при помощи ADODataSet1.Locate   Найти похожие ветки 

 
Анархист ©   (2006-01-23 04:00) [0]

Доброго времени суток, увожаемые мастера, я написал софтень, Телефонный справочник, БД которого находится на ЭсКуЭль серваке, поиск по базе работает, всё норм, но есть трабла...в справочнике встречаются одинаковые фамилии, сотрудников работающих в разных отделах, а поиск находит ТОЛЬКО ПЕРВОГО удовлетворяющего условию, так вот трабла и вопрос заключаются в том как остальных найти? Или сортировку сделать...Заранее благодарю


 
sniknik ©   (2006-01-23 08:22) [1]

найти следующего - поиск по выражению фильтра FindFirst, FindNext, ...
сделать сортировку - Sort,  работает при открытии рекордсета в локальном курсоре

+ можно еще и отдел включить в условие локейта для более конкрентного поиска


 
Vemer ©   (2006-01-23 08:36) [2]

LocateNext?


 
sniknik ©   (2006-01-23 08:47) [3]

> LocateNext?
а вот этого в ADO компонентах нет. (это чтото с IB связано, вроде бы)


 
msguns ©   (2006-01-23 09:15) [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;


 
Анархист ©   (2006-01-23 10:12) [5]

soNext,soLast Дельфя говорит, что таких идентификаторов нет, т.е. она их не знает и TSearchOption тоже... :)


 
msguns ©   (2006-01-23 11:22) [6]

type
  ...
 TSearchOption = (soFirst,soLast,soNext,soPrior);
  ...

;)


 
Анархист ©   (2006-01-24 03:46) [7]

msguns

Не работает, писанины дохрена, толку 0, у меня поиск идёт из другой формы при помощи процедуры Form1.ADODataSet1.Locate("Фамилия",Edit1.Text,[]); т.е. фамилия вводится в Едит т.ч. твоя функция тут не работает...тут надо наверно SQL запросом воспользоваться, но я в SQL толком не шарю...ща в скриптах пороюсь, можт что найду... :)


 
Анархист ©   (2006-01-24 05:05) [8]

" select Column_Name from DB_Name where like "%text%" " Подскажите пожалуйста, как мне этот запрос описать, если вместо параметра text должно быть слово из компонента Edit1.Text?


 
ASoft   (2006-01-24 08:15) [9]

Серьезные люди серьезно ответили в [4], но чем-то вас не устроил этот код -
пошли по пути наименьшего сопротивления, а каменюки на каждом шагу..
К примеру, приведенный кусок select Column_Name from DB_Name where like "%text%" вряд ли будет работать, поскольку where ? like...
Подставить Edit1.text: "select Column_Name from DB_Name where [..?..] like %"+Edit1.text+"%".
Но что в итоге вы получите? Все найденные фамилии, содержащие буквы параметра, а это вам надо? :)


 
Анархист ©   (2006-02-06 08:38) [10]

Мне надо, чтобы находились все фамилии соответствующие запросу т.е. если в базе 3 фамилии Сердюков к примеру да? То все три и должен выдть,но не ИМЕННО САМИ фамилии, а выделить строки с данными по этому человеку, в принципе у меня сейчас программа так и работает, только находит первое совпадение, а надо, чтоб либо все сразу показывала, либо так сказать "степ бай степ" по нажатию кнопки, нажал -->нашла, нажал-->перешла,снова перешла тип того :)


 
ZeroDivide ©   (2006-02-06 09:27) [11]

Тебе уже ответили и как сделать отбор:
"select Column_Name from DB_Name where Column_Name like %"""+Edit1.text+"""%";
и как сделать поиск. [4]


 
ZeroDivide ©   (2006-02-06 09:28) [12]

"select Column_Name from DB_Name where Column_Name like ""%"+Edit1.text+"%""";



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1135777688
Dimankos
2005-12-28 16:48
2006.02.26
mysql и delphi


15-1139329402
БарЛог
2006-02-07 19:23
2006.02.26
Телевизор


6-1132152638
pmi1
2005-11-16 17:50
2006.02.26
Кто-то пользовался функцией InternetCheckConnection?


4-1133763062
ra4fcr
2005-12-05 09:11
2006.02.26
Цветовая схема XP


15-1138667087
Petr V. Abramov
2006-01-31 03:24
2006.02.26
Россияне не должны стать ИТ-батраками





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский