Вопрос № 122656: Уважаемые эксперты, помогите пож-та разобраться в ошибке. Пишу в Делфи 7
DM - это датамодуль, там находятся все таблицы и компоненты Query.
В 21 форме у мя стоит ComboBox1 для выбора части(района) города.
И кнопку по нажатию на которую вы...
Вопрос № 122.656
Уважаемые эксперты, помогите пож-та разобраться в ошибке. Пишу в Делфи 7
DM - это датамодуль, там находятся все таблицы и компоненты Query.
В 21 форме у мя стоит ComboBox1 для выбора части(района) города.
И кнопку по нажатию на которую выполняется следующее действие:
With DM do
begin
Query1.Close;
query1.SQL.Clear;
query1.SQL.Add(\'Select * from svobod where \');
query1.SQL.Add(\'Raion =\'+Form21.ComboBox1.Text);
query1.Open;
end;
end;
В Combobox1 Значение text установил Центральный.
После нажатия выводится сообщение об ошибке такого характера:
Invalid field name.
Центральный.
Подскажите пож-та в чем косяк, может у мяделфи глючит??
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Артур Вильевич!
Нет, Delphi у Вас не глючит :)
Дело в том, что "Центральный" - это значение. Значение строки, как и в Delphi, надо обрамлять кавычками (одиночными). Поэтому правильно будет так:
query1.SQL.Add('Raion = '''+ Form21.ComboBox1.Text + '''');
Отвечает: Selya
Здравствуйте, Артур Вильевич!
Поробуйте такую вещь, как использование запросов с параметрами. В Вашем случае это будет выглядеть примерно так:
With DM.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from svobod where');
SQL.Add('Raion = :RaionID;'); // обрати внимание на ';' в конце
Parameters.ParseSQL(SQL.Text, True);
Parameters.ParamValues['RaionID'] := Form21.ComboBox1.Text;
ExecSQL;
// Open; // не надо
end;
Премущества такого подхода очевидны, когда параметров много (см. в приложении)
Приложение:
Ответ отправил: Selya (статус: 7-ой класс)
Ответ отправлен: 11.02.2008, 14:31
Отвечает: Виктор Пырлик
Здравствуйте, Артур Вильевич!
Используйте так: var s:String; begin s := Format('Select * from svobod where Raion = %s',[QuotedStr(Form21.ComboBox1.Text)]); query1.SQL.Add(s);
тут интересно следующее.. 1. Мы формируем запрос в строке - это удобно для отладки.. 2. Мы используем функцию Format - это удобно для форматирования строки 3. Мы используем функцию QuotedStr - которая нам даёт корректное представление строковых переменных.
Вот, в общем то
такая практика значительно сокращает количество ошибок. Конечно, использовать строковой переменной не обязательно, но на стадии разработки очень полезно.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 12.02.2008, 06:52