Array
(
)

Situação estranha com DBExpress

Uiliangurjon
   - 30 jan 2006

Amigos, estou desenvolvendo um aplicativo e estou tentando construir algumas rotinas em tempo de execução li um artigo aki no clubedelphi (http://www.clubedelphi.net/artigos/DbExpressFacil.asp)
e tentei fazer um pouco diferente

1º - Criei uma storedprocedure no banco para que ela seja responsavel pela manutenção (inclusão, alteração e exclusão) simplesmente tenho que passar os valores e a procedure faz o resto

2º - criei uma unit chamada funcoes onde escrevi o seguinte codigo

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
Parametro:= frm.Components[i].name;
Conteudo:= TCustomEdit(frm.Components[i]).Text;
dm1.DataSetDados.ParamByName(parametro).Value := Conteudo;
end;
end;
dm1.DataSetDados.ExecSQL();

3º - Crie um form para tentar fazer a inclusão em uma tabela usando o procedimento do item acima

PROBLEMA: sempre da um erro não consigo entender o erro que da

mensagem de erro : invalid argument
quando não da a mensagem que eu programei na procedure do banco de dados

Segue a procedure do banco de dados:
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