with Form1.ADOQuery1 do
begin
Parameters[0].Value:=n;
close;
SQL.Clear;
SQL.Add('Select Reports');
SQL.Add('From Reports');
SQL.Add('Where Date=:Dat');
Active:=True;
open;
end;
Параметры в ADOQuery
Возьмём параметр n. По умолчанию он равен 16.01 (дата). При выполнении программы определяется текущая дата и жахается запись по дате. Так вот когда значение задано по умолчанию - всё ОК. Когда значение параметра определяется по ходу программы - NO! Этот параметр указывает на текстовое поле в Acceess'е. Какой у него должен быть тип?
Ниче не понял. Поподробней пожалуйста. :)
Вообще если есть у кого ссылка на книжку, где подробно про эти параметры, киньте, пжалста.
Ты бы хоть сказал, что происходит при ненормальном поведении запроса - выскакивает исключение, неправильно обрабатывается запрос или вообще ничего не происходит. А то так тебе никто ничего не подскажет. В лучшем случае будет гадание на кофейной гуще...
Я уже сам разобрался. Оказывается - досадная мелочь:
Код:
Значение параметра присваивалось перед созданием запроса, а надо после:
Код:
with Form1.ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('Select Reports');
SQL.Add('From Reports');
SQL.Add('Where Date=:Dat');
Parameters[0].Value:=n;
Active:=True;
open;
end;
begin
close;
SQL.Clear;
SQL.Add('Select Reports');
SQL.Add('From Reports');
SQL.Add('Where Date=:Dat');
Parameters[0].Value:=n;
Active:=True;
open;
end;
Код:
Ini:=TIniFile.Create(IniFileName);
Sis:=Ini.ReadInteger('User','Sis',0);
with Form1.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('Select Reports');
SQL.Add('From Reports');
SQL.Add('Where Sis<=:Sis');
Parameters[0].Value:=Sis;
Active:=True;
open;
end;
Sis:=Ini.ReadInteger('User','Sis',0);
with Form1.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('Select Reports');
SQL.Add('From Reports');
SQL.Add('Where Sis<=:Sis');
Parameters[0].Value:=Sis;
Active:=True;
open;
end;
Ошибка:
Цитата:
Отсутствует значение для одного или нескольких параметров.
Всё перепроверил - ничего не получается. Чо делать?
И ещё - не знаю, баг или как, но если использовать одно имя параметра несколько раз в тексте запроса, то создаётся несколько параметров с одинаковыми именами. А значение будет только у одного :(
Подожди, а в каком смысле несколько раз? Как их можно несколько раз использовать?
Код:
select ЧТО_ТО from ТАБЛИЦА
where (ПОЛЕ1 = :pValue) and (ПОЛЕ2 = :pValue)
where (ПОЛЕ1 = :pValue) and (ПОЛЕ2 = :pValue)
Присвоил значение параметру pValue, а всё равно ошибка. Начал отлаживать и обнаружил два параметра, с одинаковым именем. Но первый имел значение, а у второго оно осталось неопределённым.
Работал через ADO с какой-то сетевой БД. Впредь стараюсь подобных ситуаций избегать.
Изменил я имена параметров, как ты посоветовал. Всё равно орёт ошибу.
А обязательно делать совпадение имён поля и таблицы???
Изменил имя таблицы. Всё равно ошибка.
Разобрался я с этой ошибкой. Не смейтесь пожалуйста, но имена полей в таблице и в запросе не совпадали. Глупо, я знаю