Параметри в query

Параметри в Query.

Майстри говоріть, як працювати з параметрами в Query, а то у мене чогось властивість Params в design-time не працює. З'являється вікно додавання параметрів, а там все не активізовано.

в запиті повинні використовуватися параметри
наприклад
select pole1, pole2 from table
where pole1 =: param1 and pole2 =: param2

після цього у тебе з'являться параметри
і можна буде їх бачити в disign-time

параметри вказуються з двокрапкою попереду # 032;

Ну написав я запит, а чому мені викидає вікно "Query1: Perameters": Nom "not found" або "Поле" Nom "невизначеного типу"?

А текст запиту можна подивитися?

Спробуй привласнити параметру значення:

тип параметра потрібно вибрати
ptInput якщо ти хочеш його передавати в запит

Можна: SELECT * FROM SomeTable WHERE (Nomer =: Nom) OR (Fio =: Fio)

design-time? не працює.
тобто намагаєшся виконати поставивши властивість Active в true.
а більше нічого не робиш? Для десігна треба їх в десігне і привласнити. клацни на Params і проставити значення.

ось до речі
чому якщо вказуєш параметри в секції order by
і міняєш c допомогою параметра сортування

то це не працює, що в сортуванні можна використовувати параметри?

В тому то і справа що "клацни на Params і проставити значення.", А там все неактивно.

а там властивість таке поруч ParamCheck схоже воно у тебе false.

спочатку зроби його true а після запит з параметрами набери. якщо його пізніше міняти не спрацює.

Використовуй FIBPlus - у них є така штука, як макроси. Класна річ. Я їх якраз в Order By і використовую.

Пробував вже і так, але тут прикол, перший раз запит виконується без проблем, а потім лається "Query1: Field" Nom "is of an anknown type."

procedure TForm1.Button2Click (Sender: TObject);
begin
Query1.Params.CreateParam (ftInteger, "Nom", ptInput);
Query1.ParamByName ( "Nom"). AsInteger: = StrToInt (Edit1.Text);
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add ( "SELECT * FROM Proba22 WHERE (Nomer =: Nom)");
Open;
end;
end;

ти ж казав
"Params в design-time не працює"
а це рантфйм. через це все і плутаються.

треба
SQL.Clear;
SQL.Add ( "SELECT * FROM Proba22 WHERE (Nomer =: Nom)");
SQL.Params.ParamByName ( "Nom"). AsInteger: = 9;
Open;

ось цей рядок
SQL.Add ( "SELECT * FROM Proba22 WHERE (Nomer =: Nom)");
всі настройки переопределяет. параметри треба після визначати.

Урра. ВИЙШЛО.
TO sniknik: величезне спасибі.
а то я раніше писав "SELECT * FROM SomeTable WHERE Nomer =" + StrToInt (Edit1.Text) + "". і в тому ж дусі але хочеться якось цивілізовано.

а що в цій нецивілізованого?
цей запис теж нормально, не рахуючи того що ти тут помилився :-) як і я раніше, але сенс правильний. а з параметрами я зазвичай роблю коли їх багато або коли дату передаю, в запиті її писати обов'язково помилишся.

Пам'ять: 0.74 MB
Час: 0.039 c

Схожі статті