procedure TForm1.Timer1Timer(Sender: TObject);
var
t:TSystemTime;
d:TDateTime;
b,n:string;
begin
GetLocalTime(t);
d:=SystemTimeToDateTime(t);
b:=DateToStr(d);
n:=copy(b,1,5);
Label2.Caption:=n;
Query1.Close;
Form1.Query1.Params[0].Value:=Label2.Caption;
end;
Свойство Params компонента Query
Текст запроса:
Select *
From ":x:x.db"
Where (l=:n);
Order By ...
Выдаётся ошибка
В чём дело?
P.S. Не забывайте, что нужно сначала присваивать запрос, а уже ПОТОМ - параметры.
procedure TForm1.Timer1Timer(Sender: TObject);
var
t:TSystemTime;
d:TDateTime;
b,n:string;
begin
GetLocalTime(t);
d:=SystemTimeToDateTime(t);
b:=DateToStr(d);
n:=copy(b,1,5);
Label2.Caption:=n;
Query1.Close;
if not Query1.Prepared then
Query1.Prepare;
Form1.Query1.ParamByName(n).asString:=Label2.Caption;
end;
Цитата:
From ":x:x.db"
А разве имена таблиц можно указывать параметрами???????
Или в имени файла допустимо использовать ":"??????
А имя таблицы указано не параметром. Я поставил x, потому что подумал, что названия таблиц роли не играют, ну и нафиг их писать.
Я кое-что переделал. Новый код:
Свойства есть такие (paramvalues [ИМЯ]) или методы (ParamByName)?
И писать внутри методов класса имя его экземпляра ("Form1") нехорошо.
Хотя, возможно, проблема заключается в передаче даты, как строкового значения. Не получается его правильно привести к исходному типу, отсюда и "ненахождение" значений
Цитата: el scorpio
Хотя, возможно, проблема заключается в передаче даты, как строкового значения. Не получается его правильно привести к исходному типу, отсюда и "ненахождение" значений
Я почти уверен что дело имено в этом. В БД Тип поля - Alpha (строковый тип до 297 символов). Какой тип должен быть у параметра?
зы Через ParamByName не получалось.
Конечно можно было бы сделать просто дату, но мне не нужны года. Нужно только число, месяц. Всё.
[COLOR=red][COLOR=black]Washington, [/COLOR]почитай пожалуйста правила форума и научись правильно оформлять код. в правилах подробные объяснения.[/COLOR]
1) В инспекторе объектов в свойствах куери не надо прописывать параметры. Просто убери их.
2) Вообще-то куери надо делать опен или exec.
Вот моя шпаргалка на этот счет:
{Внимание, в Query никаких параметров создавать не надо!!!}
procedure TForm1.Button1Click(Sender: TObject);
begin
//Таким способом можно выполнить неселективную процедуру, передав входные параметры.
n:=strtoint(Edit1.Text);
g:=strtoint(Edit2.Text);
IBQuery1.Close;
IBQuery1.SQL.Clear; // очистить текст sql
IBQuery1.SQL.Add('EXECUTE PROCEDURE search_proc :n, :w'); // задать текст запроса
IBQuery1.Prepare; // отправить запрос на сервер, проверить его корректность и т.п.
IBQuery1.ParamByName('n').asInteger:=n; // задать значение параметра
IBQuery1.ParamByName('w').asInteger:=g; // задать значение параметра
IBQuery1.Open; //или IBQuery.ExecSQL
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Пример как выполнить селективную процедуру
IBQuery1.Close;
IBQuery1.SQL.Clear; // очистить текст sql
IBQuery1.SQL.Add('select * from proc2(:er)'); // задать текст запроса
IBQuery1.Prepare; // отправить запрос на сервер, проверить его корректность и т.п.
IBQuery1.ParamByName('er').asInteger:=n; // задать значение параметра
IBQuery1.Open; //только метод Open!!!!!!!!!
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//Пример как выполнить неселективную процедуру с передачей входных и
// получением выходных параметров
//Необходимо указывать реальные параметры, такие как они называются в базе!!!!
//В инспекторе объектов создавать никаких параметров не надо!!!
rt:=0;
try
SP1.Prepare;
SP1.ParamByName('n_res').AsInteger:=1;
SP1.ParamByName('n_sour').AsInteger:=4;
SP1.ExecProc;
rt:=SP1.ParamByName('rty').AsInteger;
except showmessage('ошибка!');
end;
Edit1.Text:=inttostr(rt);
end;
end.
Он орёт мне, что тип параметра неверный.
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select Reports, Payments');
Query1.SQL.Add('From ":Planning:Planning.db"');
Query1.SQL.Add('Where (Data=01.01 and x=:x)');
Query1.SQL.Add('Order By Reports, Payments');
Query1.Prepare;
Query1.Open;
Значение параметра:
procedure TForm2.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=true then
begin
NDS:=1;
end
else
begin
NDS:=0;
end;
Form1.Label5.Caption:=IntToStr(NDS);
Form1.Query1.ParamByName('Nds').asInteger:=StrToInt(Form1.Label5.Caption);
end;
Текст ошибки:
Field 'Nds' is an unknown type
http://forum.codenet.ru/showpost.php?p=171121&postcount=10
и относиться она абсолютно ко всем посетителям форума, которые ещё не читали правила форума Делфи.