Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск в Firebird, FIBPlus 
:(
    Опции темы
bartram
Дата 5.1.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



Сабж! Как сделать? Подскажите оптимальный алгоритм поиска  в Firebird средствами  FIBPlus. Я недавно только начал СУБД заниматься, так что извините если что smile



Это сообщение отредактировал(а) bartram - 5.1.2007, 22:01


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Golden Hands
Дата 5.1.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


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

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



Подробнее, что за поиск?


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
bartram
Дата 6.1.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



Поиск записи с помощью Query.
Ну вот например код из drkb
Код

function Locate(AQuery: TQuery; AField, AValue: string): Boolean; 
var 
  Hi, Lo: Integer; 
begin 
  with AQuery do 
  begin 
    First; 
    {Устанавливаем верхнюю границу диапазона строк} 
    Hi := RecordCount; 
    {Устанавливаем нижнюю границу диапазона строк} 
    Lo := 0; 
    {Текущий указатель перемещаем в в точку, лежащую посередине 
    между нижней и верхней границей диапазона} 
    MoveBy(RecordCount div 2); 
    while (Hi - Lo) > 1 do 
    begin 
      {Значение поля больше искомой величины, величина в первой половине} 
      if (FieldByName(AField).AsString > AValue) then 
      begin 
        {Вычисляем нижнюю границу верхнего поддиапазона общего диапазона} 
        Hi := Hi - ((Hi - Lo) div 2); 
        MoveBy(((Hi - Lo) div 2) * -1); 
      end 
        {Найденное поле меньше искомой величины, нужно искать в верхней половине} 
      else 
      begin 
        {Перемещаем вверх нижнюю границу общего диапазона} 
        Lo := Lo + ((Hi - Lo) div 2); 
        MoveBy((Hi - Lo) div 2); 
      end; 
    end; 
    {Обрабатываем нечетную нумерацию строк} 
    if (FieldByName(AField).AsString > AValue) then 
      Prior; 
    Locate := (FieldByName(AField).AsString = AValue) 
  end; 
end; 
 
Но этот код мне не подходит так как я не знаю как его прикрутить к TpFIBQuery, потому что у нее нет ряда свойств описанных в этом коде. Короче говоря этот код не подходит для использования в TpFIBQuery smile


Это сообщение отредактировал(а) bartram - 6.1.2007, 10:02


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Vas
Дата 6.1.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Заполняешь свойство TpFIBQuery.SQL например запросом вида
Код

select * from table where field1=:par1

А потом пишешь в обработчике например нажатия кнопки:
Код

TpFIBQuery.Parameters.ParamByName('par1').AsString:=Edit1.Text; //в Edit1 вводим параметр поиска и передаем запросу (насчет Parameters как
//правильно в FibPlus пишется не знаю)
TpFIBQuery.Open;

Ну соответсвенно в таблице должен быть результат в виде выбранных по условию записей. Если надо потом найти в показанном наборе данных то можно тады надо копать в сторону TpFIBQuery.Locate (c фибами не работал, но в компонентах доступа обычно этот метод присутствует, так что и в фибах должен быть).



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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