Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Поиск по запросу


Автор: ruslan_r 10.7.2002, 12:06
Учусь писать на Дельфи.
Делаю программу. Она представляет собой  ввод данных  в виде карточки в которую например входят данные (Фамилия, имя, отчество, год рождения, и.т.д.) Хочу сделать поиск карточки  по любым выбраным реквизитам. например: (по фамилии и году рождения, остальные реквизиты пусты  ), и что бы программы произвела поиск по заданому запросу и открыла карточку если такая  существует. Подскажите как это сделать  

Как подсказал мне Vit у меня не получилось. Или я может неправильно задал вопрос.

Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия="'+Edit2.Text+'"');
Query1.Open;
LL.Caption:=IntToStr(Query1.RecordCount);
IF Query1.RecordCount=0 THEN ShowMessage('Нет такой записи');
b:=Query1.FieldByName('Key').AsInteger;

Автор: Vit 10.7.2002, 15:09
Вроде формально всё правильно, а собственно что не получилось? Кстати, попробуй текст в одинарных кавычках, обычно так лучше работает:

Query1.SQL.Add('SELECT * FROM main WHERE Фамилия='''+Edit2.Text+'''');


Автор: Alex101 10.7.2002, 22:56
Или попробуй так:
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия=: SURN');
Query1.Params[0].AsString := Edit2.Text;
Как я понял, ты вибираешь все записи, в которых значение поля "Фамилия" равно Edit2.Text...

Автор: Vit 10.7.2002, 23:32
Цитата(Alex101 @ 10.7.2002, 14:56)
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия=: SURN');
Query1.Params[0].AsString := Edit2.Text;

Так не пойдёт - кверя может параметры не находить, надо вначале ParsSQL вызывать, а вообще идея не плохая, только давайте вначале узнаем что именно не работает.

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


Автор: Alex101 11.7.2002, 08:34
Цитата(Alex101 @ 10.7.2002, 14:56)
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия=: SURN');
Query1.Params[0].AsString := Edit2.Text;

Цитата(Vit @ 11.7.2002, 00:32)
Так не пойдёт - кверя может параметры не находить, надо вначале ParsSQL вызывать, а вообще идея не плохая, только давайте вначале узнаем что именно не работает.

У меня с парадокс такое всегда работало...
Можно еще через парамбайнейм
Или и в этом случае не найдет?
Через параметры удобнее и код понятнее...
PS
А может запрос-то делается, но просто ничего по нему не находится?

Автор: Alex101 11.7.2002, 09:14
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия='+'"'+Edit2.Text+'"');
Попробуй так.

Автор: WhCrow 11.7.2002, 14:26
Вообще-то, не совсем понятно что именно не получилось, но попробую предложить свой код:
Query1.SQL.Clear;
Query1.SQL.Text:='select * from main where фамилия='''+Edit2.Text+''''; {хотя я бы не советовала задавать *, даже если тебе реально надо вытащить все значения, лучше их перечислить (печатать много, но это окупится). С запросами, содержащими *, часто возникают проблемы после изменений в базе}
Qiery1.Open;
Query1.Last; {реально кворя может узнать сколько было вытянуто записей, если она пройдётся по ним. Для этого мы выполняем эту строку.}
LL.Caption:=IntToStr(Query1.RecordCount);
Query1.First; //возвращаем на первую запись
if LL.Caption='0' then
 ShowMessage('Нет такой записи')
else
 for i:=0 to StrToInt(LL.Caption)-1 do
 begin
   b:=Query1.FieldByName('Key').AsInteger; {либо если ты знаешь каким по счёту идёт в базе твой филд Key, то задать можно следующим образом b:= Query1.Fields.Fields[номер филда по счёту начиная с 0].AsInteger;}
   Query1.Next;
 end;
Query1.Close;
Надеюсь поможет  :D

Автор: Vit 11.7.2002, 15:09
По поводу параметров - параметры кверей, созданных в дизайне можно использовать сразу, а если текст кверей присваивается в run-time, то BDE обычно ничего о параметрах не знает, и очень желательно добавить следующую строку:

 query1.Params.ParseSQL(query1.sql.text, true);

Иначе весьма вероятен вылет программы по ошибке.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)