![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ruslan_r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 20.5.2002 Репутация: нет Всего: нет |
Учусь писать на Дельфи.
Делаю программу. Она представляет собой ввод данных в виде карточки в которую например входят данные (Фамилия, имя, отчество, год рождения, и.т.д.) Хочу сделать поиск карточки по любым выбраным реквизитам. например: (по фамилии и году рождения, остальные реквизиты пусты ), и что бы программы произвела поиск по заданому запросу и открыла карточку если такая существует. Подскажите как это сделать Как подсказал мне 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 |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Вроде формально всё правильно, а собственно что не получилось? Кстати, попробуй текст в одинарных кавычках, обычно так лучше работает:
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия='''+Edit2.Text+''''); -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 2 Всего: 10 |
Или попробуй так:
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия=: SURN'); Query1.Params[0].AsString := Edit2.Text; Как я понял, ты вибираешь все записи, в которых значение поля "Фамилия" равно Edit2.Text... -------------------- С уважением, А. Фролов. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Так не пойдёт - кверя может параметры не находить, надо вначале ParsSQL вызывать, а вообще идея не плохая, только давайте вначале узнаем что именно не работает. PS. А какая база данных если не секрет, там может быть еще проблема с пониманием русского текста, на выяснить поддерживается ли кириллица, иначе можно кверить до ссудного дня, ничего возвращаться не будет... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Alex101 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 2 Всего: 10 |
У меня с парадокс такое всегда работало... Можно еще через парамбайнейм Или и в этом случае не найдет? Через параметры удобнее и код понятнее... PS А может запрос-то делается, но просто ничего по нему не находится? -------------------- С уважением, А. Фролов. |
||||
|
|||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 2 Всего: 10 |
Query1.SQL.Add('SELECT * FROM main WHERE Фамилия='+'"'+Edit2.Text+'"');
Попробуй так. -------------------- С уважением, А. Фролов. |
|||
|
||||
| WhCrow |
|
|||
|
Unregistered |
Вообще-то, не совсем понятно что именно не получилось, но попробую предложить свой код:
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 |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
По поводу параметров - параметры кверей, созданных в дизайне можно использовать сразу, а если текст кверей присваивается в run-time, то BDE обычно ничего о параметрах не знает, и очень желательно добавить следующую строку:
query1.Params.ParseSQL(query1.sql.text, true); Иначе весьма вероятен вылет программы по ошибке. По поводу языка. Автору следует попробывать прокверить таблицу с английскими значениями, если это работает, а с русскими нет, то дело в языковых настройках - в самом парадоксе их можно поменять в свойствах таблицы - в том же месте где меняются вторичные индексы... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |