![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметров ADO запросу
EugeneP © (2002-07-26 14:34:00)В MS Accesse написан запрос, который имеет некоторые параметры (т.е. неопределенные
значения которые аксесс спрашивает перед выполнением этого запроса).
К аксесовской базе подключаюсь из Дельфей с помощью ADO.
У компонента ADOQuery прописываю в свойствах эти параметры (с теми же именами)
присваиваю им в программе значения
а при открытии запроса выдается сообщение что данные параметры не определены
по умолчанию
(т.е. в аксес их значения не передались)
в связи с вышесказанным вопрос - как правильно передать параметры в аксесовский
запрос.
USE (2002-07-30 06:57:00) [1]/*Посмотри текст программы как у меня*/
CONECT_STR="Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;"+{Data Source=D:\ExBd\ТЕРМО\Bd0.mdb;}
"Data Source=%s; Mode=Read|Write|Share Deny None;Extended Properties="";"+
"Locale Identifier=1049;Persist Security Info=True;Jet OLEDB:System database="";"+
"Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=4;"+
"Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;"+
"Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";"+
"Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;"+
"Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
function TdmR3.GetCountForPeriod(LastDate: TDateTime; IsPlan: boolean): Integer;
var qu: TADOQuery;
S: String;
begin
qu:=TADOQuery.Create(nil);
try
S:=FormatDateTime("dd.mm.yy",LastDate);
qu.ConnectionString:=WideString(Format(CONECT_STR,[db_file]));
qu.SQL.Text:="select count(*) from DecadaVal as d where d.LastDate=:LastDate and IsPlan=:IsPlan";
qu.Parameters[0].Value:=LastDate;
qu.Parameters[1].Value:=IsPlan;
qu.Open;
Result:=qu.Fields[0].AsInteger;
finally
qu.Free;
end;
end;
ЮЮ (2002-07-29 04:03:00) [2]lf!
aus (2002-07-26 23:53:00) [3]можно еще так запрос составить (TADOQuery)
execute s p1, p2, p3...
где s - имя сохраненного запроса с параметрами, а p1, p2 - значения параметров.
Mike Kouzmine (2002-07-26 19:29:00) [4]А у меня только со ADOStoredProc получается :{
LordOfSilence (2002-07-26 16:57:00) [5]Кстати, вот текст моего "смоделированного" запроса:
PARAMETERS ParDate Long;
SELECT Vec.Summa, Vec.Type, Vec.DateVip
FROM Vec
WHERE (((Vec.Type)="по предъявлении") AND ((Month([DateVip]))>[ParDate]));
Есть различия. Я имею ввиду не имена полей/параметров
непосредственно. Вы, кстати, все же откуда взяли текст
этого запроса? Непосредственно из Access, таким, каким
он сам его создал? У Вас какой Access? У меня 2000.
Обратите внимание на объявление PARAMETERS.
Двойный и одинарный кавычки, круглые и квадратные скобки...
LordOfSilence (2002-07-26 16:38:00) [6]Евгений, только что смоделировал Вашу ситуацию у себя
на компе. Все как бы и работает...
Если Вас все еще интересуют подробности, откликнитесь.
Я попробую пошагово описать свои действия.
EugeneP (2002-07-26 16:01:00) [7]Я не утвеждал
я спрашивал
Спасибо. Буду пробовать.
LordOfSilence (2002-07-26 15:27:00) [8]Позвольте с Вами не согласиться. В Access можно
определить тип параметров. В режиме конструктора
запроса, меню Запрос, команда Параметры. В этом
режиме устанавливаются имя параметра и его тип.
EugeneP (2002-07-26 15:12:00) [9]SELECT SUM(US) AS ResExp
FROM Vec
WHERE (Vec.Type="по предъявлении") AND
(MONTH(DateVip)=ParMonth)
AND (YEAR(DateVip)=ParYear);
вот аксесовский запрос
ParMonth и ParYear параметры
где в аксесе можно определить их тип????
в дельфе присвоил им целый тип
а выборку я хочу делать как в вашем втором случае - то есть просто select * from MyQuery
LordOfSilence (2002-07-26 15:08:00) [10]А Вы типы этих параметров правильно определяете?
Целое - целое, строка - строка...
Я когда-то делал то же самое, все работало, точно помню.
Причем в двух вариантах:
1. Прописывал весь текст запроса в свойстве SQL.
2. Прописывал только "Select * from MyAccessQuery".
MyAccessQuery - это то, как Вы его назвали в Access.
Проверьте еще раз все параметры.