Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поговорим о поиске в БД! [D7, XP]


Страницы:   1 2

7D7 ©   (2006-08-03 06:33:00) 

Здравствуйте! Возникла у меня проблема с БД(содал при помощи Database Desktop,BDE Admin., DataSourse,Table и DBGrid на драйвере ПАРАДОКС). Мне нужно сделать поисковик! Допустим, когда я хочу найти в базе данных все крассные карандаши, то

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.SetKey;
Table1.FieldByName('Color').AsString:=Edit1.Text;
Table1.GotoKey;
end;

программа наведет фокус на найденный карандаш, а мне надо что бы она выводила все найденные карандаши! Слышал,что это можно осуществить методом деления Отрезков пополам! Знающие люди помогите! Что это за метод и как он осуществляется в Делфи? Может кто знает другие пути для поиска?Буду рад всем советам!


Virgo_Style   (2006-08-27 16:30:00) [1]

контекст - это
with(query) do


Desdechado   (2006-08-27 16:07:00) [2]

Lexmark ©   (26.08.06 20:20) [33]
То же, что и в других подобных случаях. Если не выдергивать из контекста и читать справку, все будет понятно.


Lexmark   (2006-08-26 20:20:00) [3]

что обозначает оператор ParamByName в данном случае:

SQL.Text:='SELECT * FROM Table WHERE name=:P0 and color=:P1';
ParamByName('P0').AsString:=Trim(Edit1.Text);


Desdechado   (2006-08-19 12:19:00) [4]

Query1: TQuery ?
Query1: TIBQuery ?
Query1: TADOQuery ?

у них немного отличаются свойства, поэтому может ругаться, если тупо копипастить мой пример


D7D   (2006-08-19 03:13:00) [5]


> тип твоего Query1?

Всмысле?


Desdechado   (2006-08-18 19:21:00) [6]

двоеточие - это признак параметра
тип твоего Query1?


7D7   (2006-08-18 19:17:00) [7]


> И какой?

Query1


7D7   (2006-08-18 19:16:00) [8]

Все понял! Я немного ступил. В строке
SQL.Text:='SELECT * FROM Table WHERE name=:P0 and color=:P1';
я писал
SQL.Text:='SELECT * FROM Table WHERE name :=P0 and color :=P1';

во тормознул ппц! А я тут уже перепробовал и так и сяк!
Кстати еще вопрос: (:=)- это значит присваивание;
                            (=:)-а вот что это значит?
Скорее всего не (=:), а  (:P).


Desdechado   (2006-08-18 19:04:00) [9]

>  подставлял свой компонет
И какой?


7D7   (2006-08-18 19:02:00) [10]

)) ну  я не совсем уже идиот! естественноя я подставлял свой компонет!


unknown   (2006-08-18 17:32:00) [11]


> 7D7   (18.08.06 17:15) [24]

Ругается, как подсказывает мой телепатор, на строчку with(query) do begin
Не приходило в голову вместо query подставить имя своего компонента???


7D7   (2006-08-18 17:15:00) [12]

принцип действия понятен
with(query) do begin
SQL.Text:='SELECT * FROM Table WHERE name=:P0 and color=:P1';
ParamByName('P0').AsString:=Trim(Edit1.Text);
ParamByName('P1').AsString:=Trim(Edit2.Text);
Open;
end;

Только не могу разобраться что писать(именно в моем случае) вместо ParamByName? Когда его прописваю, то пишет Undeclared identifier.


> (остальное в справке):

у меня с английским проблемы)))


MsGuns   (2006-08-17 11:57:00) [13]

Для начала надо определиться, КАК искать - для отображения или позиционирования.

Если для отображения, т.е. выводить в грид только подмножествозаписей БД, удовлетворящих некоторым статическимили динамическимусловиям, то надо забыть про TXXTable и использовать TXXQuery, где в Where (Join ON) прописывать статические условия, а в Filter - динамические (т.е. те, которые юзер вводит в контролы для выбора)

Для позиционирования используется несколько видов поиска:
- Поиск ближайших (реализуется через FindXXX для полей активного индекса либо сканированием НД от текущего вверх или вниз с отключением режима отображения DisableControls и запоминания в букмарке стартовой записи для возврата в случае необнаружения)
- Поиск первого (реализуется методом TDataSet.Locate)
- Поиск в список (реализуется либо сканированием и отбором строк, удавлетворяющих условию поиска, в спец. список, либо, что лучше, создание запроса из исходного запроса с добавлением новых условий в предикат WHERE (JOIN) Найденные записи помещаются в грид, показываемый в отд.форме (модальной или fsStayOnTop), по клику на котором делается поиск и позиционирование записи в основном гриде.


Desdechado   (2006-08-17 11:39:00) [14]

> объясните подробнее про "параметры"
для примера (остальное в справке):
with(query) do begin
 SQL.Text:='SELECT * FROM Table WHERE name=:P0 and color=:P1';
 ParamByName('P0').AsString:=Trim(Edit1.Text);
 ParamByName('P1').AsString:=Trim(Edit2.Text);
 Open;
end;


Sergey13   (2006-08-17 10:55:00) [15]

> [18] 7D7   (17.08.06 02:59)

В localsql.hlp загляни. В предметном указателе набери "Parameter substitutions".


UMU   (2006-08-17 10:52:00) [16]

каряво получилось  8-)

query1.SQL.Add('WHERE predmet=
"'+(edit1.text)+ '"and   color="' +(edit2.Text))  

+' "';


UMU   (2006-08-17 10:48:00) [17]

...и кавычки не забывай


> query1.SQL.Add('WHERE predmet= "'+(edit1.text)+ '
> "

and   color=
> "

'+(edit2.
> Text)) +'
> "

';


7D7   (2006-08-17 02:59:00) [18]

Я еще нуб в делфи, объясните подробнее про "параметры"?

Desdechado

снкс за помощь.


evvcom   (2006-08-16 12:23:00) [19]

Еще пропущены пробелы между значениями edit и дальнейшим текстом, еще кавычки для строки, а еще уже в [13] и [14] сказали. Параметры избавляют от подобных проблем!


Desdechado   (2006-08-16 11:23:00) [20]

> query1.SQL.Add('WHERE predmet='+(edit1.text)+'color=' + (edit2.Text));
Это не компилируется, т.к. пропущен плюс.
А скобки, обрамляющие эдиты, там лишние.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо