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

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2303
∙ повысить рейтинг »
star9491
Статус: Практикант
Рейтинг: 1901
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Бакалавр
Рейтинг: 959
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1531
Дата выхода:16.05.2010, 22:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:356 / 189
Вопросов / ответов:1 / 3

Вопрос № 178333: Уважаемые эксперты! Как многократно изменять SQL-запрос в элементе ADOQuery по событию в программе? Конкретно, по выделению элемента в списке объекта ComboBox изменять имя таблицы в SQL-запросе так, чтобы объект ADOQuery был активен и из DataSo...



Вопрос № 178333:

Уважаемые эксперты!
Как многократно изменять SQL-запрос в элементе ADOQuery по событию в программе?
Конкретно, по выделению элемента в списке объекта ComboBox изменять имя таблицы в SQL-запросе так, чтобы объект ADOQuery был активен и из DataSource.DataSet взять значения полученные по запросу.
СУБД – SQLServer2005 Express. Среда – Delphi7. Подключение к БД через ODBC.
Мой код:
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Text:='SELECT B_CODE B_NAME FROM C15';
ADOQuery4.Open;
ADOQuery4.Active:=True;
ADOQuery4.ExecSQL;
Объект ADOQuery выходит из активного состояния. Соответственно из DataSource можно взять только количество записей и первое значение от запроса.

Отправлен: 11.05.2010, 10:30
Вопрос задал: victor_kst, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает Victor Pyrlik, Модератор :
Здравствуйте, victor_kst.
вот небольшой пример..
В общем то, оформлено в виде функции - сделано специально, что бы показать что и как можно (хотя, это далеко не всё).
Можно проще - например использовать Requery() и т.д.
Старайтесь использовать свойство Active для открытия/закрытия набора данных - это безопасный метод.
При Close и Open - если набор данных в противоречивом состоянии (открыт уже а мы вызываем Open...) выскачет ошибка - старайтесь не надеяться на то, что у вас в коде все "хорошо" и ошибок не будет.. Для этого, используется в примере защищенный блок try
Ну и очень полезно отключать на время переключения набора данных от контролов - DisableControl и после его активации включать - EnableControl - это уберет ненужно моргание в таблицах.

ExecSQL используется для выполнения команд, как правило, управляющих запросов, не возвращающих результат.

Приложение:

-----
Жизнь игрушка – пока играешь сам..

Ответ отправил: Victor Pyrlik, Модератор
Ответ отправлен: 11.05.2010, 15:07
Номер ответа: 261336
Россия, Екатеринбург
Тел.: 89043822027
ICQ # 490191733
Абонент Skype: stells00

Оценка ответа: 5

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261336 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Алексей S, 5-й класс :
    Здравствуйте, victor_kst.

    ADOQuery4.Active:=True;
    ADOQuery4.ExecSQL;
    Этих двух строк не надо

    И если B_CODE и B_NAME это имена полей, а не имя и псевдоним, то между ними нужна запятая

    И помоему ADOQuery4.SQL.Clear; уже закрывает кверю, так что ADOQuery4.Active:=False; необязателен

    Ответ отправил: Алексей S, 5-й класс
    Ответ отправлен: 11.05.2010, 15:28
    Номер ответа: 261337

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо!

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261337 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Евгений/Genia007/, Бакалавр :
    Здравствуйте, victor_kst.
    Могу предложить следующее решение:
    Код:
    ADOQuery4.Close;
    ADOQuery4.SQL.Clear;
    ADOQuery4.SQL.Add('SELECT B_CODE, B_NAME FROM C15');
    ADOQuery4.Open;
    у меня в программе работает без проблем.
    -----
    Помогли тебе, помоги и ты.

    Ответ отправил: Евгений/Genia007/, Бакалавр
    Ответ отправлен: 11.05.2010, 15:48
    Номер ответа: 261338

    Оценка ответа: 5

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261338 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

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

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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное