powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не работает параметр в запросе ADOQuery
17 сообщений из 17, страница 1 из 1
Не работает параметр в запросе ADOQuery
    #40019918
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, ув. форумчане! Есть код процедуры:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
 if TreeView1.Selected.Text <> 'Все файлы' then
  begin
   MyAdoQ.Close;
   MyAdoQ.Parameters[0].Value := QuotedStr(TreeView1.Selected.Text);
   MyAdoQ.Open;
   ADOQuery3.Close;
   ADOQuery3.Parameters[0].Value := MyAdoQ.Fields[0].AsString;
   ADOQuery3.Open;
   DBGrid1.DataSource := DataSource2;
  end else DBGrid1.DataSource := DataSource1;
end;



1. Дело в том что MyAdoQ.Parameters[0].Value := QuotedStr(TreeView1.Selected.Text) не работает. Выводил в Memo а там просто запрос с параметром :Q. При этом ADOQuery3.Parameters[0].Value := MyAdoQ.Fields[0].AsString работает, если я создам MyAdoQ в процедуре перед этим вручную.
2. В ADOQuery3 стоит свойство Prepared = true, но проблема в том, что если убрать ADOQuery3.Close, то данные в DBGrid меняются только один раз и дальше уже изменить параметр не получается.
3. И хотелось бы понять, работает ли Prepared вообще. В интернете не нашел информации по этому поводу, целый день голову ломаю.
Заранее спасибо всем кто отликнется!
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019919
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors,

QuotedStr в данном случае: лишний
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019922
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,

Спасибо! И правда, помогло! Но... Почему? Там же латинские буквы
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019923
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
Gerasimenko,
Спасибо! И правда, помогло! Но... Почему? Там же латинские буквы

Потому СУБД сама разбирается с параметрами и ей там кавычки не требуются.
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019925
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

стоило бы догадаться, но, не додумался до этого. Спасибо за информацию! Вот бы еще и с остальными вопросами разобраться:)
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019927
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
borsПочему?

Очевидно потому, что значения в БД у тебя без кавычек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019931
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Я и не скрываю этого, поэтому и пришел сюда узнавать что-то новое, чего собственными силами не смог найти/не знал что и где искать:)
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
borsЯ и не скрываю этого

Скрываешь. Ты нигде не упомянул, что у тебя в БД значения хранятся без кавычек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019940
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Прошу простить, неверно понял что имеете в виду:)

Однако, все равно слабо понимаю как работает св-во prepared в adoquery, и верно ли я пытаюсь его использовать
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019941
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
Почему?
Есть два способа вызвать запрос с параметрами.

1. Неправильный. Вставить значения непосредственно в текст запроса
Код: pascal
1.
Query1.SQL.Text := 'SELECT * FROM mytable WHERE fld1 = ' + param1 + ' AND fld2 = ' + param2;


Здесь переменные param1, param2 должны быть delphi строками строго в формате SQL. Строки в кавычках, даты в кавычках и в определенном формате, дробные числа с разделителем точкой и т.д

2. Правильный. Сформировать параметрический запрос и заполнить параметры
Код: pascal
1.
2.
3.
Query1.SQL.Text := 'SELECT * FROM mytable WHERE fld1 = :param1 AND fld2 = param2';
Query1.ParamByName('param1').Value := param1;
Query1.ParamByName('param2').Value := param2;


Здесь переменные param1, param2 должны быть такого же (или пподобного) типа, как и соответствующие поля в базе (string, TDateTime, Double) и содержать ровно те данные, которые нужно передать на сервер без дополнительных символов, спец.форматирования и т.д. А клиентская библиотека и сервер уже сами разберутся, что с ними делать
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019945
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Спасибо большое за подробный ответ! Наконец-то дошло:)
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019948
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
2. В ADOQuery3 стоит свойство Prepared = true, но проблема в том, что если убрать ADOQuery3.Close, то данные в DBGrid меняются только один раз и дальше уже изменить параметр не получается.
Потому, что, скорее всего, метод Open реализован так (или похоже)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TAdoQuery.Open;
begin
  if not FOpened then begin
    ExecQuery;
    FOpened := True;
  end;
end;

Соответственно если датасет у вас не закрывается, то библиотека не считает его необходимым открывать.
bors
3. И хотелось бы понять, работает ли Prepared вообще
Да. Но оно обычно автоматически устанавливается в True при візове методов ParamByName или Open. И необходивость делать прямое присвоение
Код: pascal
1.
Prepared := True;

возникает крайне редко. Обычноо это делается для того, чтобы отвалидировать запрос без его выполнения
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019955
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Есть два способа вызвать запрос с параметрами.

И, строго говоря, в первом случае получается запрос без параметров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019956
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Огрооомнейшая Вам благодарность! Столько времени и нервов потратил чтобы понять описанные Вами вещи
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40019958
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

_Vasilisk_Есть два способа вызвать запрос с параметрами.

И, строго говоря, в первом случае получается запрос без параметров.


Изначально запрос и был записан как в варианте 1, поэтому и ошибочно решил что делая запрос способом 2 следует передавать параметры как в варианте 1
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40020001
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_

bors
3. И хотелось бы понять, работает ли Prepared вообще
Да. Но оно обычно автоматически устанавливается в True при візове методов ParamByName или Open. И необходивость делать прямое присвоение
Код: pascal
1.
Prepared := True;

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


Если вызывать ADOQuery.Active := True; и Prepared := True; должно работать?
...
Рейтинг: 0 / 0
Не работает параметр в запросе ADOQuery
    #40020012
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
Если вызывать ADOQuery.Active := True; и Prepared := True; должно работать?

_Vasilisk_
необходивость делать прямое присвоение возникает крайне редко.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не работает параметр в запросе ADOQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]