Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 13:17   #1
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию Поиск в delphi

Здравствуйте, помогите доработать поиск из таблицы access.
Имеется 2 поля edit и процедура:
Код:
var
Fields: Variant;
begin
Fields:=VarArrayOf([strtoint(edit1.text),edit2.Text]);
ADO_Tovar.Locate ('kod_tovara; postavwik',Fields,[loCaseInsensitive,loPartialKey]);
end;
Нужно сделать если какой-то из edit'ов пустой, то при поиске результат бы не учитывался. Т.е. к примеру вводим код товара (поле поставщик пустое) и в таблице находится строка по коду товара. Процедура же работает корректно при введённых 2х значениях + если edit1 пустое, то программа ругается Exception class EConvertError with message ''' is not a valid integer value'.
Fastah вне форума Ответить с цитированием
Старый 27.04.2011, 13:37   #2
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

Код:
procedure TForm2.Button4Click(Sender: TObject);
begin
if not adoquery1.Locate(pole,edit2.Text,[]) then
showmessage('Поле с такой записью не найдено. Проверьте правильность введеных данных');
end;
из моей программы, pole - это поле(столбец) где происходит поиск, edit2.Text - слово или текст который ищется в заданном поле. все рабочее
Азамат Казанчев вне форума Ответить с цитированием
Старый 27.04.2011, 13:59   #3
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

Вообще планируется 4 поля edit, и если 1 из них пустое, то придётся перебирать. Как-то не по красоте
Fastah вне форума Ответить с цитированием
Старый 27.04.2011, 14:08   #4
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

не понял, зачем 4?
1 эдит чтоб указать столбец, 2 эдит чтоб задать что ищишь. а 3 и 4 зачам?
Азамат Казанчев вне форума Ответить с цитированием
Старый 27.04.2011, 14:19   #5
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

ну смотри таблица в 4 столбца, что бы сделать поиск максимально функциональным в 4 разных edit'a пишутся значения (столбец соответствует edit'у), и находится единственная строка соотв. четырём условиям из 4х edit'ов
Fastah вне форума Ответить с цитированием
Старый 27.04.2011, 14:28   #6
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

4 столбца-это 4 разных поля(поставщик, товар. цена, адрес к примеру)как не крути 1 значение для поиска не будет отвечать(содержаться) этим(в этих) 4 полям(ях). Или я чего снова не понял( как цена может удовлетворять условию полей товара, поставщика, адреса к примеру). поиск находит ключевое(заданное) слово в твоей таблице и ищет его в поле которое ты задаешь( или я не прав?)
Азамат Казанчев вне форума Ответить с цитированием
Старый 27.04.2011, 14:44   #7
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

У меня такие поля и пусть соотв. edit'ы отвечают за поиск в них, наименование(edit1), поставщик(edit2), дата(edit3), остаток на складе(edit4)
К примеру мы хотим посмотреть что нам поставил определённый поставщик 28.02.2011, вводим в edit2 имя поставщика в edit3 дату, т.к. поля 1 и 4 не заполнены то поиск в них не учитывается, получаем строку удовлетворяющую условиям
Fastah вне форума Ответить с цитированием
Старый 27.04.2011, 14:51   #8
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

теперь понял. ты результат в отдельной таблице собираешься отображать?
Азамат Казанчев вне форума Ответить с цитированием
Старый 27.04.2011, 14:53   #9
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

строка указывается в уже созданной DBGrid
Fastah вне форума Ответить с цитированием
Старый 27.04.2011, 15:03   #10
Азамат Казанчев
Форумчанин
 
Регистрация: 25.04.2011
Сообщений: 110
По умолчанию

я поискал в своих старых файлах, почитай и твоя проблема решена
Код:
Locate(const KeyFields: string; 
const KeyValues: Variant; Options: TLocateOptions): Boolean;
Первый параметр это список полей разделяемых "точкой с запятой" либо одно поле. Второй параметр это значения, которым должны быть равны поля указанные в первом параметре если полей много то во втором параметре должен быть массив из Variant. Если указано несколько полей то переход осуществляется, только если каждое поле, указанное в первом параметре равно значению, указанному во втором параметре. Если переход прошёл успешно, то функция возвращает True. Для того чтобы получить массив из Variant можно использовать функцию VarArrayOf. Вот примеры использования метода Locate:

Код:
If not ClientDataSet1.Locate('LastName',Edit1.text,[]) then 
MessageDlg(' " '+Edit1.text+' " не найдено', mtError, [mbOK], 0);
пиши если что. удачи
Азамат Казанчев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный поиск в Delphi Алексей777911 Помощь студентам 8 03.02.2011 18:00
Поиск файлов в delphi _PROGRAMM_ Помощь студентам 4 21.09.2010 16:31
Поиск в Delphi Katrina_89 БД в Delphi 5 07.04.2010 18:18
Поиск решения на Delphi SHOP Фриланс 6 26.03.2010 12:11
поиск Borland Delphi 7 n fh dxdj Помощь студентам 1 25.10.2007 19:33