Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 866

/ вопрос решён /

Здравствуйте, эксперты! ADO
У меня три поля Card_fam, Card_imy, Card_otch (фамилия Имя Отчеств)
На EdtFam у меня включена фильтрация по Фамилии, хочу cделать Поиск по трем полям не получается, Помогите пожалуйста! Вот код:
DM.FindCard.Filtered := False;
if (EdtFam.Text = '') and (EdtName.Text = '') and (EdtOtch.Text = '')then
begin
MessageDlg('Не заданы условия поиска!!', mtInformation, [mbOK], 0);
Exit;
end;
if (EdtFam.Text <> '') and (EdtName.Text <> '') and (EdtOtch.Text <> '') then
begin
if not dm.FindCard.Locate('Card_fam;Card_imy;Card_otch',
VarArrayOf([EdtFam.Text,EdtName.Text,EdtOtch.Text]),
[loCaseInsensitive, loPartialKey]) then
MessageDlg('Запись не найдена!', mtInformation, [mbOk], 0);
end;
Выдает пустую строку. Не могу разобраться помогите пожалуйста уважаемые Экспертыю
За ранее благодарен Senyor.

senyor Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: senyor (статус: Посетитель)
Вопрос отправлен: 10 марта 2010, 10:44
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, senyor!
лучше сделать по простому.
Ставим на форму TADOQuery. Одним концом привязываем к нашей базе, другим к таблице (он фактически подменяет собой TADOTable).
для обработчика пишем что то в стиле.

if (EdtFam.Text = '') and (EdtName.Text = '') and (EdtOtch.Text = '')then
begin
MessageDlg('Не заданы условия поиска!!', mtInformation, [mbOK], 0);
Exit;
end;
if (EdtFam.Text <> '') and (EdtName.Text <> '') and (EdtOtch.Text <> '') then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from ИМЯ_ТАБЛИЦЫ where Card_fam LIKE "%'+EdtFam.Text+'%"
and Card_imy LIKE "%'+EdtName.Text+'%" and Card_otch LIKE "%'+EdtOtch.Text+'%"';
ADOQuery1.Open;
end;
значки процента там стоят для того, что бы можно было набрать часть имени/фамилии. Если надо точный поиск, то используем конструкцию вида
'select * from ИМЯ_ТАБЛИЦЫ where Card_fam = "'+EdtFam.Text+'" and Card_imy = "'+EdtName.Text+'" and Card_otch = "'+EdtOtch.Text+'"';
ИМЯ_ТАБЛИЦЫ - здесь надо вписать имя таблицы с базы.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 марта 2010, 11:09
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 24; последнее сообщение — 11 марта 2010, 18:17; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2]

Вадим К

Вадим К (статус: Академик), 11 марта 2010, 15:38 [#21]:

два разных DataSource - и имеем, что имеем.

Идея всего этого такова - если хочется, что бы работало красиво и как надо - надо писать ручками. А если просто поиграться - то можно и через встроенные средства.

То есть, лучше поставить свои Edit, самому их заполнить, а потом отредактировать запись.
Галочка "подтверждения прочтения" - вселенское зло.
senyor

senyor (статус: Посетитель), 11 марта 2010, 17:16 [#22]:

Вадим я знаю как DBEdit-ы перенастроить на datasource2, а как использовать Edit-ы я не знаю, сделай подсказку пожалуйста
Вадим К

Вадим К (статус: Академик), 11 марта 2010, 17:37 [#23]:

вначале надо достать значения для изменения
ADOQuery1.FieldByName('имя_поля')
и позаполнять едиты.

Когда пользователь нажмет "применить", надо записать назад. Вот только я не помню, поддерживает ли ADOQuery живые запросы...

Но никто не мешает записывать их напрямую. для этого обычно в таблицах делают ключ. и для выбранной записи запоминают ключ. А вот когда надо обновить запись, просто делается UPDATE запрос к базе тем же ADOQuery.
Галочка "подтверждения прочтения" - вселенское зло.
senyor

senyor (статус: Посетитель), 11 марта 2010, 18:17 [#24]:

Вадим я сделал проще незнаю правильно ли это, вроде открывает с DBEdit-ами нормально
dm.FindCardSource.DataSet:=dm.ADOQuery2; проверяю на наличие ошибок

11 января 2013, 14:38: Статус вопроса изменён на решённый (изменил модератор DNK)

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:16
Выполнено за 0.02 сек.