| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Так не пойдёт - кверя может параметры не находить, надо вначале ParsSQL вызывать, а вообще идея не плохая, только давайте вначале узнаем что именно не работает. PS. А какая база данных если не секрет, там может быть еще проблема с пониманием русского текста, на выяснить поддерживается ли кириллица, иначе можно кверить до ссудного дня, ничего возвращаться не будет... |
| Автор: Alex101 11.7.2002, 08:34 | ||||
У меня с парадокс такое всегда работало... Можно еще через парамбайнейм Или и в этом случае не найдет? Через параметры удобнее и код понятнее... 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; Надеюсь поможет |
| Автор: Vit 11.7.2002, 15:09 |
| По поводу параметров - параметры кверей, созданных в дизайне можно использовать сразу, а если текст кверей присваивается в run-time, то BDE обычно ничего о параметрах не знает, и очень желательно добавить следующую строку: query1.Params.ParseSQL(query1.sql.text, true); Иначе весьма вероятен вылет программы по ошибке. По поводу языка. Автору следует попробывать прокверить таблицу с английскими значениями, если это работает, а с русскими нет, то дело в языковых настройках - в самом парадоксе их можно поменять в свойствах таблицы - в том же месте где меняются вторичные индексы... |