Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / (ADO) Как задать параметры? / 7 сообщений из 7, страница 1 из 1
23.12.2002, 01:01
    #32082833
MikeMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
ADOStoredProc

Как задать параметры по именам (т.е. используя имена параметров заданных на сервере), т.е. как IB было:
with IBStoredProc do
begin
Active := False;
ProcName := 'bzzz';
ParamByName.AsInteger := 123;
...

Как такое сделать в ADO?

на сервере:
CREATE PROCEDURE [dbo].sp_SpecislityStandart_insert
@specialityCode varchar(6),
...

в дельфе:
with DM.StoredProc, Parameters do
begin
Active := False;
ProcedureName := 'sp_SpecialityStandart_insert';
ParamValues['@specialityCode'].AsString := edSpecialityCode.Text;
^^^ тут она ругается, что такого параметра нет...

Конечно можно сделать что-то вроде
AddParameter.Value := ...
...
и так все параметры по порядку, но как-то не очень удобно...
...
Рейтинг: 0 / 0
23.12.2002, 01:03
    #32082834
MikeMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
Сорри тест
Код: plaintext
1.
2.
3.
4.
try
    with DM.StoredProc, Parameters do
    begin
      Active := False;
...
Рейтинг: 0 / 0
23.12.2002, 10:34
    #32082891
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
.....
ProcedureName := 'sp_SpecialityStandart_insert';
Parameters.CreateParameter('@specialityCode', ftString, pdInput, 6, 0 );
Parameters.ParamByName('@specialityCode').Value := edSpecialityCode.Text;
ExecProc;
...
Рейтинг: 0 / 0
23.12.2002, 19:35
    #32083336
MikeMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
Вы не совсем верно поняли мой вопрос :)

Параметры, которые создаются с помощью AddParamter, CreateParameter связаны с параметрами в хранимой процедуре тока порядком (очередностью следования), и не связаны по имени, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure  [DBO].sp_tTest_insert 
	@varcharField varchar( 50 ),
	@smalldatetimeField smalldatetime,
	@floatField float
as

	INSERT INTO tTest (varcharField, smalldatetimeField, floatField)
	VALUES (@varcharField, @smalldatetimeField, @floatField);
GO

Если я пишу так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  try
    with DM.StoredProc, Parameters do
    begin
      Active := False;
      ProcedureName := 'sp_tTest_insert';
      Clear;
      CreateParameter('@varcharField', ftString, pdInput,  50 , 'AABBaabbcc');
      CreateParameter('@smalldatetimeField', ftDate, pdInput,  4 , '12.12.02');
      CreateParameter('@floatField', ftFloat, pdInput,  8 ,  12 . 05 );

... то все проходит, а если так...
Код: plaintext
1.
2.
3.
      CreateParameter('@varcharField', ftString, pdInput,  50 , 'AABBaabbcc');
      CreateParameter('@floatField', ftFloat, pdInput,  8 ,  12 . 05 );
      CreateParameter('@smalldatetimeField', ftDate, pdInput,  4 , '12.12.02');

... то вылезает ошибка преобразования типа флоат к smalldate, т.е. имя заданного мною параметра ей паралельно... и борланды в своих хелпах это не скрывают...
В IB достаточно было тока задать имя процедуры, а все параметры она создаваля сама, и им можно было присваивать значения в любом порядке по именам, которые значились в хранимой процедуре ...

В АДО вроде нечто похожее нахожу...
property ParamValues[const ParamName: String]: Variant;
Note: ParamValues operates with the names of parameters as they appear in an SQL statement or stored procedure, not the Name property of TParameter objects. The two should not be confused.

Но когда я делаю так...
Код: plaintext
1.
2.
3.
4.
      ProcedureName := 'sp_tTest_insert';
      ParamValues['@varcharField'].AsString := 'AABBcc';
      ParamValues['@smalldatetimeField'].AsDate := '12.12.02';
      ParamValues['@floatField'].AsFloat :=  12 . 05 ;

... она ругается: "что такого параметра нет"

ВОПРОС: Как такое делается в ADO? (и вообще делается как-то?)
плзз... помогите разобраться!!!
...
Рейтинг: 0 / 0
24.12.2002, 07:20
    #32083393
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
вот работоспособный пример на ADO компонентах
(проверено с вашей процедурой)
procedure TForm1.BitBtn1Click(Sender: TObject);
var
MyProc : TADOStoredProc;
begin
MyProc := TADOStoredProc.Create(nil);
MyProc.Connection := LocalConnection;
with MyProc, Parameters do
begin
Active := False;
ProcedureName := 'sp_tTest_insert';
Clear;
CreateParameter('@varcharField', ftString, pdInput, 50, 'AABBaabbcc');
CreateParameter('@smalldatetimeField', ftDate, pdInput, 4, '12.12.02');
CreateParameter('@floatField', ftFloat, pdInput, 8, 12.05);
ExecProc;
end;
MyProc.Free;
end;
вставляет как из пушки
...
Рейтинг: 0 / 0
25.12.2002, 08:20
    #32083857
Бектуров Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
>>... то все проходит, а если так...
>> CreateParameter('@varcharField', ftString, pdInput, 50, 'AABBaabbcc');
>> CreateParameter('@floatField', ftFloat, pdInput, 8, 12.05);
>> CreateParameter('@smalldatetimeField', ftDate, pdInput, 4, '12.12.02');

фактические параметры параметры в запрос подставляются так:
exec sp_MyProc @Param[0], @Param, @Param
если создавать параметры как показано выше, то @Param это ftFloat, @Param ftDate от сюда и ошибка преобразования.

>> ProcedureName := 'sp_tTest_insert';
>> ParamValues['@varcharField'].AsString := 'AABBcc';
>> ParamValues['@smalldatetimeField'].AsDate := '12.12.02';
>> ParamValues['@floatField'].AsFloat := 12.05;
при таком подходе параметров нет, потому что они не создаются автоматически при задании имени процедуры, в общем что бы можно было к параметру по имени обращятся либо создавать их нужно в прядке следования либо ADOStoredProc.Parameters.ParseSQL
...
Рейтинг: 0 / 0
25.12.2002, 08:22
    #32083858
Бектуров Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(ADO) Как задать параметры?
выше вот этот кусок неверно отображается почему -то
Код: plaintext
1.
2.
фактические параметры параметры в запрос подставляются так: 
exec sp_MyProc @Param[ 0 ], @Param[ 1 ], @Param[ 2 ]
если создавать параметры как показано выше, то @Param[ 1 ] это ftFloat, @Param[ 2 ] ftDate от сюда и ошибка преобразования. 
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / (ADO) Как задать параметры? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]