Fórum BDE X Ado usando o componente StoredProc, nao retorna #289028
21/07/2005
0
é a seguinte :
CREATE PROCEDURE sp_ProxNumero(@Campo varchar(20), @ProxNumero varchar(20) OUTPUT) AS --10:14
DECLARE @AnoStr char(4)
DECLARE @Num varchar(20)
DECLARE @n int
DECLARE @UltValor float
DECLARE @Ano smallint
DECLARE @TamCampo tinyint
DECLARE @UsaAno char(1)
DECLARE @ResultStr varchar(20)
DECLARE @AnoAtual smallint
SELECT @AnoAtual = DATEPART(year, GETDATE())
SELECT @Ano = Ano, @UsaAno = UsaAno FROM NrContr WHERE CdCampo = @Campo
IF @UsaAno = ´S´ AND @AnoAtual <> @Ano
Begin
BEGIN TRAN
UPDATE NrContr SET Ano = @AnoAtual, UltValor = 0 WHERE CdCampo = @Campo
COMMIT
End
-- //////// METODO NOVO
DECLARE cursor_prox CURSOR FOR SELECT UltValor, Ano, TamCampo, UsaAno FROM NrContr
WHERE CdCampo = @Campo
OPEN cursor_prox
FETCH NEXT FROM cursor_prox INTO @UltValor, @Ano, @TamCampo, @UsaAno
UPDATE NrContr SET UltValor = @UltValor + 1
WHERE CURRENT OF cursor_prox
CLOSE cursor_prox
DEALLOCATE cursor_prox
-- METODO ANTIGO (NAO APAGAR AINDA)
/*
SELECT @UltValor = UltValor, @Ano = Ano,
@TamCampo = TamCampo, @UsaAno = UsaAno
FROM NrContr
WHERE CdCampo = @Campo
UPDATE NrContr SET UltValor = @UltValor+1
WHERE CdCampo = @Campo
*/
-- FIM DO METODO ANTIGO (NAO APAGAR AINDA)
SELECT @AnoStr = STR(@Ano,4)
SELECT @Num = STR(@UltValor+1, @TamCampo)
SELECT @n = 1
while @n <= @TamCampo
begin
if substring(@Num, @n, 1) = ´ ´
SELECT @ResultStr = @ResultStr + ´0´
else
SELECT @ResultStr = @ResultStr + Substring(@Num, @n, 1)
SELECT @n = @n + 1
end
SELECT @Num = @ResultStr
if @UsaAno = ´S´
SELECT @ProxNumero = @AnoStr + @Num
else
SELECT @ProxNumero = @Num
GO
Uso ela no Delphi da seguinte Forma:
function ProxNumero(prNmCampo: String): String;
begin
with dtmConfig.stpProxNumero do begin
ParamByName(´@Campo´).AsString := prNmCampo;
try
ExecProc;
except
ProxNumero := ProxNumero(prNmCampo);
Exit;
end;
ProxNumero := ParamByName(´@ProxNumero´).AsString;
end;
end;
e para usar é só
Ex
Label1.caption := ProxNumero(´NrContrObAvulso´);
Só
Mas mudei minha conexão para ADO e nao me retorna nada...
O que pode estar acontecendo?
Abraços...
Tremonti
Curtir tópico
+ 0Posts
21/07/2005
Rjun
Parameters.ParamByName(´Nome´).Value;
Gostei + 0
21/07/2005
Tremonti
Gostei + 0
21/07/2005
Rjun
function ProxNumero(prNmCampo: String): String; begin dtmConfig.stpProxNumero.Parameters.ParamByName(´@Campo´).AsString := prNmCampo; try ExecProc; except ProxNumero := ProxNumero(prNmCampo); Exit; end; ProxNumero := ParamByName(´@ProxNumero´).AsString; end;
Assim deveria funcionar. Agora, algumas observações.
Por que você usa try..except? Seria mais simples você encerrar a stored procedure com return(0) e avaliar o parametro @RETURNVALUE.
Na stored procedure você abre uma transação só para efetuar um update. Isso não faz sentido.
Em cada operação de gravação, verifique as variáveis @@ERROR e @@ROWCOUNT para verificar se a operação foi bem sucedida, caso contrario finalize a stored procedure com return(@ERROR).
Gostei + 0
22/07/2005
Tremonti
Gostei + 0
22/07/2005
Tremonti
te explico como ela funciona também
me manda um e-mail
fernando_tremonti@yahoo.com.br
Abraços...
Gostei + 0
22/07/2005
Rjun
Gostei + 0
22/07/2005
Tremonti
Mas como otmizar esta procedure no sql, me ajuda?!
Gostei + 0
22/07/2005
Rjun
Gostei + 0
22/07/2005
Tremonti
Eu localizo nas tabelas o campo correspondente para incrementar.
E assim vai
E na NrContr eu armazeno o ultimo valor, somo 1 e jogo nesse novo nrcontrole
Gostei + 0
22/07/2005
Rjun
Gostei + 0
22/07/2005
Tremonti
só quero saber pq nao funciona com ADO e BDE funciona bem...
Abraços...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)