![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поговорим о поиске в БД! [D7, XP]
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));
Это не компилируется, т.к. пропущен плюс.
А скобки, обрамляющие эдиты, там лишние.