Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: CL | DM;

Вниз

Параметрический запрос   Найти похожие ветки 

 
alex-ran   (2003-08-26 12:07) [0]

Уважаемые мастера, помогите плиз, если пишу запрос в одну строку то все ОК, а если несколько строк то вылетаю с сообщением: "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;

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


 
Reindeer Moss Eater ©   (2003-08-26 12:09) [1]

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


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

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


 
LVitaliy ©   (2003-08-26 12:12) [3]

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


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

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


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

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


 
Danilka ©   (2003-08-26 12:19) [6]

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

:))


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

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


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


> Active = true;

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


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

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


 
Zacho ©   (2003-08-26 12:44) [10]

Да вообще не нужно 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:47) [11]

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


 
Danilka ©   (2003-08-26 13:06) [12]

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


 
Hawk2 ©   (2003-08-26 15:30) [13]

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
14-48717
Ahmad K
2003-08-26 02:43
2003.09.15
Delphi 7 vs Delphi 3


3-48464
Val
2003-08-22 13:22
2003.09.15
Работа с isql


6-48661
Maverick
2003-07-15 18:49
2003.09.15
какой компонент?


6-48683
Delpher_Gray
2003-07-14 13:14
2003.09.15
Как лучше всего передавать информацию через сокеты ?


1-48514
MakNik
2003-09-02 16:06
2003.09.15
переделать код с FoxPro в Delphi