Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 449
от 16.02.2008, 13:35

Администратор:Gh0stik
В рассылке:Подписчиков: 290, Экспертов: 31
В номере:Вопросов: 1, Ответов: 3

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 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.
Центральный.

Подскажите пож-та в чем косяк, может у мяделфи глючит??
Отправлен: 11.02.2008, 13:13
Вопрос задал: Артур Вильевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Артур Вильевич!

Нет, Delphi у Вас не глючит :)
Дело в том, что "Центральный" - это значение. Значение строки, как и в Delphi, надо обрамлять кавычками (одиночными). Поэтому правильно будет так:
query1.SQL.Add('Raion = '''+ Form21.ComboBox1.Text + '''');
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 10-ый класс)
Ответ отправлен: 11.02.2008, 13:18

Отвечает: 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


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное