27/01/2006

o que ha de errado, com esse procedimento

Criei essa procedure no delphi para passar os parametros para um sqldataset(dbexpress) mas quando rodo o sistema e tento inseir um registro vem a mensagem que eu porgramei na procedure do banco, e não faz a inclusão do registro, testei a procedure do banco e funciona 100¬, não entendo o que acontece quando tendo passar os valores pelo delphi


procedure PreencheParametros(frm:TWinControl);
begin

dm1.DataSetDados.Close;
dm1.DataSetDados.CommandType := ctStoredProc;
dm1.DataSetDados.CommandText := Tabela;
dm1.DataSetDados.ParamByName(´I_ACAO´).AsString := acao;

for i:=0 to frm.ComponentCount -1 do
begin
if frm.Components[i] is TCustomEdit then
begin
if TCustomEdit(frm.Components[i]).Text <> ´´ then
dm1.DataSetDados.ParamByName(frm.Components[i].name).Value := TCustomEdit(frm.Components[i]).Text
else
dm1.DataSetDados.ParamByName(frm.Components[i].name).Clear;
end;

if frm.Components[i] is TMaskEdit then
begin
if TCustomEdit(frm.Components[i]).Text <> ´´ then
dm1.DataSetDados.ParamByName(frm.Components[i].name).Value := TMaskEdit(frm.Components[i]).Text
else
dm1.DataSetDados.ParamByName(frm.Components[i].name).Clear;
end;

if frm.Components[i] is TComboBox then
begin
if TCustomEdit(frm.Components[i]).Text <> ´´ then
dm1.DataSetDados.ParamByName(frm.Components[i].name).Value := TComboBox(frm.Components[i]).Text
else
dm1.DataSetDados.ParamByName(frm.Components[i].name).Clear;
end;
end;

dm1.DataSetDados.ExecSQL();
end;


Uiliangurjon

Respostas

27/01/2006

Motta

Seria bom vc tb publicar a msg de erro e a SP.


Responder Citar

27/01/2006

Uiliangurjon

quando tento incluir da um erro de dizendo que não posso incluir

->>>>>ERRO_INSERT (esta na procedure)

CREATE PROCEDURE MANUTENCAO_BAIRRO (
I_ACAO VARCHAR(1),
I_CODIGO INTEGER,
I_LOG VARCHAR(45),
I_CEP VARCHAR(45),
I_BAI VARCHAR(45),
I_CID VARCHAR(45),
I_UF VARCHAR(2))
AS
BEGIN
/* INSERE UM NOVO REGISTRO */
IF (:I_ACAO = ´I´) THEN
BEGIN
INSERT INTO BAIRRO (
BAI_LOGRADOURO,
BAI_CEP,
BAI_BAIRRO,
BAI_CIDADE,
BAI_UF
)
VALUES (
:I_LOG,
:I_CEP,
:I_BAI,
:I_CID,
:I_UF
);
WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END

/* ALTERA UM REGISTRO */
IF (:I_ACAO = ´A´) THEN
BEGIN
UPDATE BAIRRO SET
BAI_LOGRADOURO = :I_LOG,
BAI_CEP = :I_CEP,
BAI_BAIRRO = :I_BAI,
BAI_CIDADE = :I_CID,
BAI_UF = :I_UF

WHERE BAI_CODIGO = :I_CODIGO;

WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_UPDATE;
END

/* EXCLUI UM REGISTRO */
IF (:I_ACAO = ´E´) THEN
BEGIN
DELETE FROM BAIRRO

WHERE BAI_CODIGO = :I_CODIGO;

WHEN SQLCODE -530 DO
EXCEPTION ERRO_VIOLACAO_FK;
WHEN ANY DO
EXCEPTION ERRO_DELETE;
END
END


Responder Citar

27/01/2006

Motta

Já verificou direitos de acesso:

Grant de execute ?
Grant de Insert ?
Sinonimo ?
Etc ?

O user que roda a app é o mesmo que via via banco direto ?


Responder Citar

28/01/2006

Uiliangurjon

O problema é que executando a procedure direto no banco funciona, e quando passo os valores dos parametros no delphi de forma normal tipo

dm1.dataset.parambyname(´cod´).value := edit.text

dm1.dataset.execsql();

funciona o problema esta quando tento usar o procedimento que esta no primeiro topico


Responder Citar