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;
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
Curtidas 0
Respostas
Motta
27/01/2006
Seria bom vc tb publicar a msg de erro e a SP.
GOSTEI 0
Uiliangurjon
27/01/2006
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
->>>>>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
GOSTEI 0
Motta
27/01/2006
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 ?
Grant de execute ?
Grant de Insert ?
Sinonimo ?
Etc ?
O user que roda a app é o mesmo que via via banco direto ?
GOSTEI 0
Uiliangurjon
27/01/2006
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
dm1.dataset.parambyname(´cod´).value := edit.text
dm1.dataset.execsql();
funciona o problema esta quando tento usar o procedimento que esta no primeiro topico
GOSTEI 0