|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
поиск данных в DBGrid
как сделать поиск записи по вводимым символам? Есть два столбца: Наименование и Цена. Нужен поиск по столбцу Цена. Некторые числа с запятой (например 98,12).
|
#2
|
||||
|
||||
Метод Locate в помосчь
пример использования Locate(Название поля по которому производится поиск,vararrayof([Edit1.text]),[loCaseinsensitive,loPartialKey]) |
#3
|
||||
|
||||
Код:
ADOQuery1.Active:=false; ADOQuery1.SQL.clear; ADOQuery1.add(select * from "Table1"); ADOQuery1.SQL.add ('Where POLE1 like '''+'%'+edit1.text+'%'''); ADOQuery1.Active:=true; Table1 - Наименование твоей таблицы POLE1 - наименование поля по которому хочешь искать.... P.S. повесь этот код на событие OnChange обьекта Edit1. Последний раз редактировалось Dead_Gigabit, 01.03.2011 в 22:28. |
#4
|
|||
|
|||
при вводе цифры в edit1 выдает ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Сумма с ПДВ '%4%'''
|
#5
|
|||
|
|||
сделал вот так:
Код:
procedure TForm7.edit1Change(Sender: TObject); var OptSet: TLocateOptions; begin OptSet:=OptSet + [loCaseInsensitive]; OptSet:=OptSet + [loPartialKey]; DM.Nakladnie.Locate('Сумма с НДС',edit1.Text,OptSet) end; работает, только с одним но. Таблица заполнена значениями формата ####,## если вводить в поисковое поле значение с запятой, то поиск не происходит, а как только ставлю точку вместо запятой, то все работает... можно это исправить? |
#6
|
||||
|
||||
Поставь на edit ограничение на ввод символов..... в данном случае на запятую....
|
#7
|
|||
|
|||
сделал так:
edit1.Text:=StringReplace(edit1.Text, ',' , '.', [rfReplaceAll, rfIgnoreCase]); OptSet:=OptSet + [loCaseInsensitive]; OptSet:=OptSet + [loPartialKey]; DM.Nakladnie.Locate('Сумма с НДС',edit1.Text,OptSet); теперь другой вопрос появился. в таблице есть Название и Количество, как сделать, чтобы при добавлении записи сразу шла проверка на наличие в Наименовании такой записи и если такое наименование есть, то суммировалось количество, а если такой записи нет, то добавлялась строка? |
#8
|
||||
|
||||
есть метод Lookup
пример: Код:
.......................................... var Lookres:variant; begin lookres:=Table1.Lookup('LICHNIY_NOMER',edit1.Text,'LICHNIY_NOMER'); if vartype(lookres)<>varnull then errStr:='Запись с таким личным номером есть в базе данных'; end; ................................................ первый параметр это поле по которому надо искать, второй -это значение которое надо найти, а в третий параметр падают значения тех полей, которые ты задашь, при положительном поиске! То есть у тебя есть таблица в которой есть поля f1,f2,f3,f4 например ты ищешь по полю f2 lookres:=Table1.Lookup('f2',edit1.Text,'f3;f4'); это значит, если такое значение есть то в переменную lookres передатутся значения полей f3 и f4 при отрицательном поиске vartype(lookres)=varnull это и провиряешь но.. в чем заключается секс... в отличае от locate Lookup не переводит курсор на найденую запись. Так что тут в принципе вариантов масса как сделать. можешь например сделать так: сначала Проверяешь есть ли такая запись, если есть то с помощью locate потом переходишь на эту запись. а там уже складывай вычитай, умножай.. и.т.д)))) |
#9
|
|||
|
|||
Большое спасибо!
|