Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.03.2011, 18:58
popovich109 popovich109 вне форума
Прохожий
 
Регистрация: 01.03.2011
Сообщения: 5
Репутация: 10
По умолчанию поиск данных в DBGrid

как сделать поиск записи по вводимым символам? Есть два столбца: Наименование и Цена. Нужен поиск по столбцу Цена. Некторые числа с запятой (например 98,12).
Ответить с цитированием
  #2  
Старый 01.03.2011, 19:19
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Метод Locate в помосчь
пример использования
Locate(Название поля по которому производится поиск,vararrayof([Edit1.text]),[loCaseinsensitive,loPartialKey])
Ответить с цитированием
  #3  
Старый 01.03.2011, 22:26
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Код:
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  
Старый 02.03.2011, 01:31
popovich109 popovich109 вне форума
Прохожий
 
Регистрация: 01.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

при вводе цифры в edit1 выдает ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Сумма с ПДВ '%4%'''
Ответить с цитированием
  #5  
Старый 02.03.2011, 02:09
popovich109 popovich109 вне форума
Прохожий
 
Регистрация: 01.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

сделал вот так:

Код:
procedure TForm7.edit1Change(Sender: TObject);
var OptSet: TLocateOptions;
begin
OptSet:=OptSet + [loCaseInsensitive];
OptSet:=OptSet + [loPartialKey];
DM.Nakladnie.Locate('Сумма с НДС',edit1.Text,OptSet)
end;

работает, только с одним но. Таблица заполнена значениями формата ####,## если вводить в поисковое поле значение с запятой, то поиск не происходит, а как только ставлю точку вместо запятой, то все работает...
можно это исправить?
Ответить с цитированием
  #6  
Старый 02.03.2011, 09:33
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Поставь на edit ограничение на ввод символов..... в данном случае на запятую....
Ответить с цитированием
  #7  
Старый 02.03.2011, 11:20
popovich109 popovich109 вне форума
Прохожий
 
Регистрация: 01.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

сделал так:
edit1.Text:=StringReplace(edit1.Text, ',' , '.', [rfReplaceAll, rfIgnoreCase]);
OptSet:=OptSet + [loCaseInsensitive];
OptSet:=OptSet + [loPartialKey];
DM.Nakladnie.Locate('Сумма с НДС',edit1.Text,OptSet);

теперь другой вопрос появился.
в таблице есть Название и Количество, как сделать, чтобы при добавлении записи сразу шла проверка на наличие в Наименовании такой записи и если такое наименование есть, то суммировалось количество, а если такой записи нет, то добавлялась строка?
Ответить с цитированием
  #8  
Старый 02.03.2011, 19:21
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

есть метод 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  
Старый 03.03.2011, 07:22
popovich109 popovich109 вне форума
Прохожий
 
Регистрация: 01.03.2011
Сообщения: 5
Репутация: 10
По умолчанию

Большое спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter