powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск в таблице
4 сообщений из 4, страница 1 из 1
Поиск в таблице
    #32115817
Здравствуйте Уважаемые! Доброе время суток. Возник следующий вопрос: Как организовать поиск в таблице. Например найдена какая либо запись, но возможны совпадения. Как найти совпадающее значение, после найденого первого.
Заранее очень благодарен!
...
Рейтинг: 0 / 0
Поиск в таблице
    #32116131
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще всего обычно дать запрос на SQL а какой запрос, зависит от базы данных, которую юзаешь, от структуры таблицы, в частности о наличии уникальных полей. Второй вариант менее изящный и вообще говоря более тормозной, фетчить записи с таблицы и сравнивать с тем что прочитал. Как только равно, значит курсор стоит на дублирующей записи
...
Рейтинг: 0 / 0
Поиск в таблице
    #32116167
vladuha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
procedure TfrmMain.acSearchExecute(Sender: TObject);
var FromPos: TBookmark;
begin
FromPos:=dgSkupka.DataSource.DataSet.GetBookMark;
with qrSelectForFind do
begin
Close;
SQL.Clear;
SQL.Add('select keyfield from Table');
SQL.Add('where любое условие');
SQL.Add('order by лунашудв');
Open;
end;

if not qrSelectForFind.IsEmpty then
begin
ID:=qrSelectForFind.FieldByName('keyfield').AsFloat;
dgSkupka.DataSource.DataSet.Locate('keyfield',Variant(ID),[]);
end
else
begin
ShowMessage('Значение не найдено');
dgSkupka.DataSource.DataSet.GotoBookMark(FromPos);
end;
finally
dgSkupka.DataSource.DataSet.FreeBookMark(FromPos);
end;

procedure TfrmMain.acSearchNextExecute(Sender: TObject);
var FromPos: TBookmark;
begin
Found:=FALSE;
try
FromPos:=dgSkupka.DataSource.DataSet.GetBookMark;
qrSelectForFind.Next;
if not qrSelectForFind.EOF then
begin
ID:=qrSelectForFind.FieldByName('keyfield').AsFloat;
dgSkupka.DataSource.DataSet.Locate('keyfield',Variant(ID),[]);
Found:=TRUE;
end
else Found:=FALSE;
if not Found then
begin
ShowMessage('Значение не найдено');
dgSkupka.DataSource.DataSet.GotoBookMark(FromPos);
end;
finally
dgSkupka.DataSource.DataSet.FreeBookMark(FromPos);
// Cursor:=crDefault;
end; //finally
end;
Есть две кнопки -- одна для начала поиска, по которой вызывается диалоговое окно, в котором указываются условия поиска а потом вызывается TfrmMain.acSearchExecute, а вторая кнопка для продолжения поиска, в которой вызывается TfrmMain.acSearchNextExecute.
...
Рейтинг: 0 / 0
Поиск в таблице
    #32116171
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример решения этой задачи не очень хороший, с fetch'ем... При размерах таблицы под миллион записей это тормозное решение... даже более чем... к тому же трафик сети.....
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]