![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вручную перебирать БД...
able © (2004-12-12 13:05:00)Делаю нестрогий поиск по бд, вручную перемалываю все поля.
Делаю так:
for i:=1 to datam.ADOTable1.Fields.Count do
begin
txt:=dbgrid1.DataSource.DataSet.Fields.Fields[i].AsString;
Find := FindCompare.IndistinctMatching(3, txt, EditFilter.Text);
memo1.Lines.add(txt+' '+inttostr(find));
end;
end;
Find - ф-ция поиска..
Он ищет только по первой строке в DBGrid'e.
Вопрос:
-как искать по всей, определённой колонке?
sniknik (2004-12-13 18:24:00) [1]> Хотя подозреваю, что конструкция будет что-то типа
> where поле like %искомая подстрока%
не будет
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1102698760&n=1
YurikGL (2004-12-13 16:19:00) [2]able © (13.12.04 16:02) [11]
Ты словами опиши что тебе надо.
Хотя подозреваю, что конструкция будет что-то типа
where поле like %искомая подстрока%
А вообще, сходи на http://podgoretsky.com/ddp.htmlи почитай "Мартин Грубер. Понимание SQL"
able (2004-12-13 16:02:00) [3]YurikGL © (12.12.04 22:08) [10]
Так а как сгенерить запрос where, чтобы он подходил 100%?
YurikGL (2004-12-12 22:08:00) [4]
> able © (12.12.04 13:05)
А не проще в другой датасет сделать сначала селект с where в котором все записи гарантированно будут удовлетворять твоему условию, а потом пробежаться по этому датасету и пихнуть в мемо все его записи?
able (2004-12-12 20:08:00) [5]Zacho © (12.12.04 16:11) [8]
Спасибо большое, почитаю..
Zacho (2004-12-12 16:11:00) [6]able © (12.12.04 15:53) [7]
Про учебники/документацию, подскажешь что-нибудь хорошее?
Вообще по СУБД советую К.Дж.Дейт "Введение в системы баз данных"
По SQL - М.Грабер "SQL"
По Дельфи и БД, честно говоря, кроме "Дельфи N. Руководство разработчика БД" Шумаков, Фаронов (N - номер версии Дельфи, точно знаю, что есть для 3,4,5), ничего не вспоминается. Но эта тема неоднократно поднималась здесь, поищи в архивах или спроси в "Потрепаться" - наверняка много чего насоветуют.
Да, ещё естественно Delphi Help :) особенно всё, что касается TDataSet
able (2004-12-12 15:53:00) [7]Zacho © (12.12.04 14:33) [6]
Thanks, все сделал, что надо было.
Про учебники/документацию, подскажешь что-нибудь хорошее?
Zacho (2004-12-12 14:33:00) [8]able © (12.12.04 14:08) [5]
Но как искать по определённой колонке?
Вот без этого цикла: for i:=0 to datam.ADOTable1.Fields.Count-1 do
А вместо txt:=dbgrid1.DataSource.DataSet.Fields. Fields[i].AsString; просто брать данные из нужного поля. Например, txt:=dbgrid1.SelectedField.AsString; Или txt:=dbgrid1.DataSource.DataSet.FieldByName('MY_FIELD').AsString;
И вообще, не обижайся, но сильно советую почитать учебники/документацию, а то у тебя явное незнание основ работы с БД в Дельфи.
able (2004-12-12 14:08:00) [9]Zacho © (12.12.04 13:22) [1]
Сделал
for i:=0 to datam.ADOTable1.Fields.Count-1 do
Всё работает.
Но как искать по определённой колонке?
able (2004-12-12 14:07:00) [10]Zacho © (12.12.04 13:22) [1]
Вылетает exception: "List index out of bounds (6)" :(
able (2004-12-12 13:23:00) [11]Zacho © (12.12.04 13:22) [1]
Спасибо!
Сейчас пойду тестить...
Anatoly Podgoretsky (2004-12-12 13:23:00) [12]First/Next
Zacho (2004-12-12 13:22:00) [13]able © (12.12.04 13:05)
Забудь ты про грид, данные находятся не в гриде, а в датасете.
Соответственно, тебе нужно сделать ещё один цикл по датасету, например так:
datam.ADOTable1.First;
while not datam.ADOTable1.Eof do
begin
for i:=1 to datam.ADOTable1.Fields.Count do
begin
txt:=dbgrid1.DataSource.DataSet.Fields.Fields[i].AsString;
Find := FindCompare.IndistinctMatching(3, txt, EditFilter.Text);
memo1.Lines.add(txt+' '+inttostr(find));
end;
end;
datam.ADOTable1.Next;
end;
Eщё посоветую перед выполнением этого сделать datam.ADOTable1.DisableControls, а после - datam.ADOTable1.EnableControls