Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск данных через ADO и MSSQL Serv 2000, Любой метод поиска 
:(
    Опции темы
Lord_HEV
Дата 10.4.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите, плиз, как лучше сделать функцию поиска в базе данных.

Поключение: ADO
База данных: MS SQL Server 2000

Имеем например форму, на ней несколько компонентов для занесения данных, например
через Комбо выбираем имя поля, а в Едит вносим требуемые данные для поиска.
Результат поиска в отдельной таблице или в другом Edit.




PM MAIL   Вверх
Tror
Дата 10.4.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

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



Код

procedure TFrmFind.BtFindClick(Sender: TObject);
begin
    DBData.DataSet := DBQuery;
    DBData.Enabled := True;
    GrSearchResult.DataSource := DBData;

    case (CbSearchParams.ItemIndex) of
        0:
        begin
            with DBQuery do
            begin
                Close;

                SQL.Text := 'select (requied fields) from (requied teable) where (search field) = :SearchParam';
                Params.ParseSQL(SQL.Text, True);
                Params.ParamByName('SearchParam').Value := EdSearchStr.Text;

                Open;
            end;
        end;
        1:..............
    
    end;
end;


DBData - datasource
GrSearchResult - dbgrid
DBQuery - adoquery
CbSearchParams - combobox
EdSearchStr - edit

Это сообщение отредактировал(а) Tror - 10.4.2006, 17:28
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Lord_HEV
Дата 11.4.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



подскажи пожалуйста, не совсем понял смысл кода:

Params.ParseSQL(SQL.Text, True);
Params.ParamByName('SearchParam').Value := EdSearchStr.Text;

params - ?


PM MAIL   Вверх
Tror
Дата 11.4.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

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



sorry очепятка ;)

в ADOQuery нет коллекции Params, вместо нее есть Parameters,
а все остальное точно так же.


Цитата(Lord_HEV @ 11.4.2006, 14:29 Найти цитируемый пост)

Код

Parameters.ParseSQL(SQL.Text, True);


парсит текст запроса

Цитата(Lord_HEV @ 11.4.2006, 14:29 Найти цитируемый пост)

Код

Parameters.ParamByName('SearchParam').Value := EdSearchStr.Text;


подставляет в запрос значение, которое хранится в EdSearchStr

--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Lord_HEV
Дата 11.4.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, вроде компилится нормально, только вот ошибка выводится DataSource1: Circular Datalinks are not allowed

англицкий малость не очень smile
PM MAIL   Вверх
Lord_HEV
Дата 11.4.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вроде все сделал, но выводится ошибка AdoQuery1: Parameters 'SearchParam' not found.
Как понять отсутствует, на него же ссылается Edit1.text?

Код

DataSource1.DataSet := Form1.ADOQuery1;
DataSource1.Enabled := True;
DbGrid1.DataSource := Form1.DataSource1;


    case (ComboBox1.ItemIndex) of
        0:
        begin
            with Form1.ADOQuery1 do
            begin
                Close;
                //Form1.ADOQuery1.Active:=False;
                SQL.Text := 'select id from kandidat where id=: SearchParam';
                //Form1.ADOQuery1.Active:=True;
                Parameters.ParseSQL(SQL.Text, True);
                Parameters.ParamByName('SearchParam').Value := Edit1.Text;
                Open;
            end;
        end;


Это сообщение отредактировал(а) Lord_HEV - 11.4.2006, 16:52
PM MAIL   Вверх
Tror
Дата 11.4.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

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



ты пишешь

Цитата(Lord_HEV @ 11.4.2006, 16:49 Найти цитируемый пост)

Код

SQL.Text := 'select id from kandidat where id=: SearchParam';


а надо
Код

SQL.Text := 'select id from kandidat where id= :SearchParam';


--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Lord_HEV
Дата 11.4.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ураааа, заработало //простоквашино smile

Спасибо большое, выручил smile smile , respect.
PM MAIL   Вверх
Cashey
Дата 7.3.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

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



А можно ли осуществить поиск средствами компонентов ADOTable без привличения SQL?

Добавлено через 14 минут и 56 секунд
ADOTable1.Locate
ADOTable1.Seek


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Данкинг
Дата 7.3.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Cashey @  7.3.2009,  12:35 Найти цитируемый пост)
ADOTable1.Locate

Можно, почему нет. В чём вопрос-то?

Это сообщение отредактировал(а) Данкинг - 7.3.2009, 19:35


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Kbl4AH
Дата 8.3.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Tror @  11.4.2006,  14:47 Найти цитируемый пост)
1:Parameters.ParseSQL(SQL.Text, True);highlightSyntax('delphi_zRjNzl','delphi');парсит текст запроса

А что такое - парсит текст запроса?
PM MAIL ICQ   Вверх
Cashey
Дата 10.3.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

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



Цитата(Данкинг @  7.3.2009,  20:34 Найти цитируемый пост)
Можно, почему нет. В чём вопрос-то?

это не вопрос. это ответ smile


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Felliks
Дата 15.3.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это толко по одному парамерту. по нескольким проще всего так на мой взгляд:
Код

ADOTable1.TableName:='Users';
  ADOTable1.Open;
  ADOTable1.First;
  UserA:=0;
  For i:=1 to ADOTable1.RecordCount do
    if (uID=ADOTable1.FieldValues['IDp'] and uPASS= ADOTable1.FieldValues['Pass'])
    then begin
      UserA:=ADOTable1.FieldValues['Prava'];
      end;


или я вафл и не понял как вписать в Locate поиск по нескольким полям в раз....


--------------------
Почему русские при зависании Windows всё время повторяют фразу "твой кролик написал" (Your Bunny Wrote)?
PM ICQ   Вверх
Kbl4AH
Дата 15.3.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Felliks @  15.3.2009,  14:34 Найти цитируемый пост)
и не понял как вписать в Locate поиск по нескольким полям в раз

что непонятного? поля через точку с запятой... в хелпе даже пример есть:
Код

with ADOTable1 do
  Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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