Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Параметрический запрос [D5, Paradox]


alex-ran ©   (2003-08-26 12:07:00) 

Уважаемые мастера, помогите плиз, если пишу запрос в одну строку то все ОК, а если несколько строк то вылетаю с сообщением: "Field "pPeriod" is of an unknown type". Вот кусок кода:

qrClients:=TQuery.Create(Self);
with qrClients do
begin
Active := False;
with Params.CreateParam(ftString,"pPeriod",ptInput) do asString:="0307";
DatabaseName := "UMC";
SQL.Clear;
SQL.Add("SELECT FIO, NTel, StatUser FROM Clients");
SQL.Add("INNER JOIN Account ON (Clients.NTel = Account.NTel)");
SQL.Add("WHERE Account.Period=:pPeriod");
SQL.Add("ORDER BY Clients.StatUser");
Prepare;
// SQL.Add("SELECT FIO, NTel, StatUser FROM Clients INNER JOIN Account ON (Clients.NTel = Account.NTel) WHERE Account.Period=:pPeriod ORDER BY Clients.StatUser"); - если так то все ОК!
Active := True;
First;
end;

Почему так происходит? Помогите разобраться.


Hawk2   (2003-08-26 15:30:00) [1]

Danilka © (26.08.03 13:06) [12] > Но для чего именно я так, навскидку, после водки, не могу вспомнить. :))

Parameters for datasets that represent queries are only created by specifying parameters in the SQL statement. :-)


Danilka   (2003-08-26 13:06:00) [2]

alex-ran (26.08.03 12:47)
параметры создаются сами, когда делаешь sql.add(...),
или sql.text = ...
Если в тексте встречается :NAME, создается параметр с именем NAME и неизвестным типом, поэтому нет нужды в CreateParam, вернее есть, но для чего именно я так, навскидку, после водки, не могу вспомнить. :))


alex-ran   (2003-08-26 12:47:00) [3]

Zacho © Спасибо, заработало.
Только интересно узнать почему при явном вызове CreateParam получаются такие грабли?


Zacho   (2003-08-26 12:44:00) [4]

Да вообще не нужно Params.CreateParam вызывать.

Parameters for datasets that represent queries are only created by specifying parameters in the SQL statement. The TParam objects in such as dataset’s Params property are created automatically when parameter tokens are added to the SQL statement.


alex-ran   (2003-08-26 12:38:00) [5]

По совету Danilka перенес строку
with Params.CreateParam(ftString,"pPeriod",ptInput) do asString:="0307";
после последнего SQL.Add
Но теперь ошибка: Could not find object


Соловьев   (2003-08-26 12:23:00) [6]


> Active = true;

а где идет присвоение параметров?


Danilka   (2003-08-26 12:21:00) [7]

вернее не так, когда ты сделал SQL.Clear; твои параметры пибились, потом, после SQL.Add опять появились но с неизветсным типом, вобщем, побежал я водку пить, сам разберешся..


Danilka   (2003-08-26 12:19:00) [8]

alex-ran (26.08.03 12:07)
перед
prepare;
напиши:
ShowMessage(IntToStr(params.Count));

:))


alex-ran   (2003-08-26 12:18:00) [9]

Пробовал и спереди и сзаду :) - не помогает, и, по-моему это достаточно логично - зачем пробел, если новая строка?


Е-Моё имя   (2003-08-26 12:17:00) [10]

а чо, для парадокса #13#10 не разделитель?


LVitaliy   (2003-08-26 12:12:00) [11]

Попробуй поставить пробелы в конце вообще проблем не должно быть
SQL.Add("SELECT FIO, NTel, StatUser FROM Clients ");


LVitaliy   (2003-08-26 12:10:00) [12]

Попробуй поставить пробелы в конце
SQL.Add("SELECT FIO, NTel, StatUser FROM Clients ");


Reindeer Moss Eater   (2003-08-26 12:09:00) [13]

Происходит так потому, что пробелов между словами не хватает


Наверх

Титульная страница Поиск, карта сайта Написать письмо