Fórum DBExpress(SQLStoredProc) SQL 2000 #267627
06/02/2005
0
Delphi 7, DBExpress.
Estou com problema ao usar SQLStoredProc em uma Procedure que contenha Params:
Segue o Codigo da Procedure :
CREATE PROCEDURE Mov_Vend @NOME AS NVARCHAR(36), @ORIG AS NVARCHAR(1)
AS
BEGIN
DECLARE @CODIGO AS NVARCHAR(10)
SET @CODIGO = NULL
BEGIN TRANSACTION
SET @CODIGO = (Select Max(Codigo)As MaxCod From Vend)
IF @CODIGO <> NULL
BEGIN
SET @CODIGO = CAST((@CODIGO) AS INTEGER) + 1
SET @CODIGO = ´00´ + CAST(@CODIGO AS NVARCHAR(2))
SET @CODIGO = SUBSTRING(@CODIGO, LEN(@CODIGO)-1, 2)
END
ELSE
BEGIN
SET @CODIGO = ´01´
END
INSERT INTO VEND (CODIGO, NOME, ORIG) Values (@CODIGO, @NOME, @ORIG)
COMMIT TRANSACTION
END
GO
Segue o Codigo no Delphi:
VAR
P1, P2: TParam;
begin
with SQLStoredProc1 do
begin
StoredProcName := ´Mov_Vend ´;
Params.Clear;
P1 := TParam.Create(Params, ptInput);
P2 := TParam.Create(Params, ptInput);
Params[0].Name := ´@NOME´;
Params[1].Name := ´@ORIG´;
ParamByName(´@NOME´).AsString := tVendNome.Value;
ParamByName(´@Orig´).AsString := ´M´;
ExecProc;
END;
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de inclusão do registro: ´ + Exc.Message);
Abort;
end;
end;
P1.Free;
P2.Free;
end;
Iranilson
Curtir tópico
+ 0Posts
06/02/2005
Bon Jovi
Gostei + 0
07/02/2005
Iranilson
Quando passa por ExecProc, erro eo segunte:
LIST INDEX OUT OF BOUNDS (0).
Valeu!
Gostei + 0
08/02/2005
Bon Jovi
Caso tenha q criar em tempo de execução, tente de outra forma, com CreateParam:
[size=9:6aafd2514a]SQLStoredProc1.SQLConnection := SQLConnection1;
SQLStoredProc1.StoredProcName := ´dbo.Mov_Vend´;
SQLStoredProc1.Params.Clear;
SQLStoredProc1.Params.CreateParam(ftString, ´@NOME´, ptInput);
SQLStoredProc1.Params.CreateParam(ftString, ´@ORIG´, ptInput);
SQLStoredProc1.ParamByName(´@NOME´).AsString := ´xxx´;
SQLStoredProc1.ParamByName(´@ORIG´).AsString := ´M´;
SQLStoredProc1.ExecProc;[/size:6aafd2514a]
Gostei + 0
09/02/2005
Iranilson
Em tempo de projeto da o mesmo erro ´LIST INDEX OUT OF BOUNDS (0). ´ Agora que vc passou este código esta dando este: ´MOV_VEND EXPECTS PARAMETER @ORIG, WHICH WAS NOT SUPPLIED´. É aparentemente é um problema facil, mais estou com esse problema ja algum tempo. espero que alguem consiga me esclarecer o que esta acontecedo. Ja postei em varios Fórum até agora nada vc foi o unico que se enteresou.
OBRIGADO BON JOVI
Gostei + 0
09/02/2005
Bon Jovi
Usei:
Delphi 7 update 1
MDAC 2.8
WinXP Pro SP2
SQL Server 2000 SP3
Os mais importantes são MDAC 2.8 e o Delphi 7 atualizado.
Segue código testado:
[.DFM] object SQLConnection1: TSQLConnection ConnectionName = ´MSSQLConnection´ DriverName = ´MSSQL´ GetDriverFunc = ´getSQLDriverMSSQL´ LibraryName = ´dbexpmss.dll´ LoginPrompt = False Params.Strings = ( ´DriverName=MSSQL´ ´HostName=.´ ´DataBase=tempdb´ ´User_Name=desenv´ ´Password=desenv´ ´BlobSize=-1´ ´ErrorResourceFile=´ ´LocaleCode=0000´ ´MSSQL TransIsolation=ReadCommited´ ´OS Authentication=False´) VendorLib = ´oledb´ Left = 84 Top = 4 end object SQLStoredProc1: TSQLStoredProc MaxBlobSize = -1 Params = < item DataType = ftInteger Name = ´@RETURN_VALUE´ ParamType = ptResult Size = 4 end item DataType = ftString Name = ´@NOME´ ParamType = ptInput end item DataType = ftString Name = ´@ORIG´ ParamType = ptInput end> SQLConnection = SQLConnection1 StoredProcName = ´dbo.Mov_Vend´ Left = 112 Top = 4 end [.PAS] procedure TForm1.Button1Click(Sender: TObject); begin SQLStoredProc1.ParamByName(´@NOME´).AsString := ´xxx´; SQLStoredProc1.ParamByName(´@ORIG´).AsString := ´M´; SQLStoredProc1.ExecProc; end; procedure TForm1.FormCreate(Sender: TObject); begin SQLConnection1.Connected := True; end; procedure TForm1.FormDestroy(Sender: TObject); begin SQLConnection1.Connected := False; end;
SQLSERVER: CREATE TABLE VEND (CODIGO NVARCHAR(10), NOME NVARCHAR(36), ORIG NVARCHAR(1)) GO CREATE PROCEDURE Mov_Vend @NOME AS NVARCHAR(36), @ORIG AS NVARCHAR(1) AS BEGIN DECLARE @CODIGO AS NVARCHAR(10) SET @CODIGO = NULL BEGIN TRANSACTION SET @CODIGO = (Select Max(Codigo)As MaxCod From Vend) IF @CODIGO <> NULL BEGIN SET @CODIGO = CAST((@CODIGO) AS INTEGER) + 1 SET @CODIGO = ´00´ + CAST(@CODIGO AS NVARCHAR(2)) SET @CODIGO = SUBSTRING(@CODIGO, LEN(@CODIGO)-1, 2) END ELSE BEGIN SET @CODIGO = ´01´ END INSERT INTO VEND (CODIGO, NOME, ORIG) Values (@CODIGO, @NOME, @ORIG) COMMIT TRANSACTION END GO
Gostei + 0
10/02/2005
Iranilson
Obrigado mais uma vez.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)