|
#1
|
||||
|
||||
Запрос SQL:
Запрос SQL:
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject); var f:string; begin f:=inputbox('Поиск по БД','Введите фамилию человека',''); if f <> '' then begin with Form1.Query1 do begin Close; SQL.Clear; SQL.Add('SELECT Number'); SQL.Add('FROM MobNomera'); SQL.Add('WHERE Fam like "%'+'f'+'%" and Name like "%'+'f'+'%"'); Open; if Form1.Query1.RecordCount>0 then ShowMessage(Form1.Query1.Fields[0].AsString); end; end; end; А если я пробую так: Код:
procedure TForm1.SpeedButton1Click(Sender: TObject); var f:string; begin f:=inputbox('Поиск по БД','Введите фамилию человека',''); if f <> '' then begin with Form1.Query1 do begin Close; SQL.Clear; SQL.Add('SELECT Number'); SQL.Add('FROM MobNomera'); //SQL.Add('WHERE Fam like "%'+'f'+'%" and Name like "%'+'f'+'%"'); Open; if Form1.Query1.RecordCount>0 then ShowMessage(Form1.Query1.Fields[0].AsString); end; end; end; Код:
SELECT * FROM MobNomera.db |
#2
|
||||
|
||||
Советую почитать что-нибудь по SQL.
Зачем искать вхождение фамилии в полях fam и name, я полагаю искать нужно только в fam. Поэтому код должен выглядеть примерно так: Код:
procedure TForm1.SpeedButton1Click(Sender: TObject); var f:string; begin f:=inputbox('Поиск по БД','Введите фамилию человека',''); if f <> '' then begin with Form1.Query1 do begin Close; SQL.Clear; SQL.Add('SELECT Number'); SQL.Add('FROM MobNomera'); SQL.Add(Format('WHERE fam LIKE %s',[QuotedStr('%'+f+'%')])); Open; if Form1.Query1.RecordCount>0 then ShowMessage(Form1.Query1.Fields[0].AsString); end; end; end; Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
and заменить на or
И переменную f не надо заключать в кавычки. было Код:
SQL.Add('WHERE Fam like "%'+'f'+'%" and Name like "%'+'f'+'%"'); надо Код:
SQL.Add('WHERE Fam like "%'+f+'%" or Name like "%'+f+'%"'); |
#4
|
||||
|
||||
Все равно почему то ничего не выводит((. Даже ваш код. В сообщении должен выводится номер телефона (Number) найденный по введенной фамилии.
А если изменить как то эту строчку? SELECT * FROM MobNomera.db |
#5
|
|||
|
|||
Попробуйте в таблице создать запись с простой фамилией, например: "1", затем попробуйте поиск по этой фамилии.
Строчка, которую вы, настойчиво хотите изменить в свойстве SQL, удаляется при вызове команды SQL.Clear. Поэтому можете писать там что угодно, на работу программы она никак не влияет. Последний раз редактировалось mik, 07.10.2008 в 15:46. |
#6
|
||||
|
||||
Цитата:
Есть там Fam и Name? |
#7
|
|||
|
|||
Поля такие есть, иначе программа ругнулась бы во время выполнения.
Скорее всего сравнение идет с учетом регистра. В базе - "Иванов", а в переменной присваивается - "иванов". |
#8
|
|||
|
|||
Тут без исходника не угадаешь. Малоли что там в свойствах наворочено.
|
#9
|
|||
|
|||
Если дело в регистре, то надо так:
Код:
SQL.Add('WHERE UPPER(Fam) like "%'+AnsiUpperCase(f)+'%" or UPPER(Name) like "%'+AnsiUpperCase(f)+'%"'); |
#10
|
|||
|
|||
Регистр, это только пример. Может быть и раскладка клавиатуры.
Пример с простой фамилией избавляет от первого и второго случаев, и при правильном использовании наших подсказок, artemavd сможет наконец-то посмотреть на результат своего творчества. |
#11
|
|||
|
|||
Ну, да, согласен.
про регистр вообще просто лучше не забывать изначально. Поэтому лучше сразу на это заложиться. |
#12
|
|||
|
|||
Да, согласен. Про регистр. Про обработку исключений. Про защиту от "кривых" рук, или от "дураков", или как там это еще называется. Ну и т. п. Много есть всего, про что надо помнить.
Последний раз редактировалось mik, 07.10.2008 в 16:27. |