powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / (ADO) Как задать параметры?
7 сообщений из 7, страница 1 из 1
(ADO) Как задать параметры?
    #32082833
MikeMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
(ADO) Как задать параметры?
    #32082834
MikeMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри тест
Код: plaintext
1.
2.
3.
4.
try
    with DM.StoredProc, Parameters do
    begin
      Active := False;
...
Рейтинг: 0 / 0
(ADO) Как задать параметры?
    #32082891
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.....
ProcedureName := 'sp_SpecialityStandart_insert';
Parameters.CreateParameter('@specialityCode', ftString, pdInput, 6, 0 );
Parameters.ParamByName('@specialityCode').Value := edSpecialityCode.Text;
ExecProc;
...
Рейтинг: 0 / 0
(ADO) Как задать параметры?
    #32083336
MikeMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы не совсем верно поняли мой вопрос :)

Параметры, которые создаются с помощью 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
(ADO) Как задать параметры?
    #32083393
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот работоспособный пример на 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
(ADO) Как задать параметры?
    #32083857
Бектуров Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>... то все проходит, а если так...
>> 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
(ADO) Как задать параметры?
    #32083858
Бектуров Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выше вот этот кусок неверно отображается почему -то
Код: plaintext
1.
2.
фактические параметры параметры в запрос подставляются так: 
exec sp_MyProc @Param[ 0 ], @Param[ 1 ], @Param[ 2 ]
если создавать параметры как показано выше, то @Param[ 1 ] это ftFloat, @Param[ 2 ] ftDate от сюда и ошибка преобразования. 
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / (ADO) Как задать параметры?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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