procedure com oracle dbexpress
Tenho uma procedure de inclusão no Oracle simples e funcionado perfeitamente executo ela fora do Delphi e passando os parâmetros e tudo funciona corretamente.
Mais quando vou executar ele no Delphi ela da erro.
Já tentei assim
ssp := TSQLStoredProc.Create(nil);
ssp.SQLConnection := Conn;
ssp.StoredProcName := ´SP_GRUPOS´;
ssp.Close;
ssp.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);;
ssp.ParamByName(´vNOME´ ).AsString := edtNome.Text;
ssp.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
ssp.ParamByName(´vUSUARIO´ ).AsInteger := 1;
ssp.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
ssp.ExecProc;
FreeAndNil(ssp);
Assim.
qry := TSQLDataSet.Create(nil);
qry.SQLConnection := Conn;
qry.CommandText := ´EXEC SP_GRUPOS(:vID_GRUPOS, :vNOME, :vDESCRICAO, :vUSUARIO, :vOPR)´;
qry.Close;
qry.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);
qry.ParamByName(´vNOME´ ).AsString := edtNome.Text;
qry.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
qry.ParamByName(´vUSUARIO´ ).AsInteger := 1;
qry.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
qry.ExecSQL;
e nada alguém pode me ajudar???
Estou usando Delphi 2009 e DBEpress Oracle 10g XE
Selects, funções, funciona menos a procedure.
Mais quando vou executar ele no Delphi ela da erro.
Já tentei assim
ssp := TSQLStoredProc.Create(nil);
ssp.SQLConnection := Conn;
ssp.StoredProcName := ´SP_GRUPOS´;
ssp.Close;
ssp.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);;
ssp.ParamByName(´vNOME´ ).AsString := edtNome.Text;
ssp.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
ssp.ParamByName(´vUSUARIO´ ).AsInteger := 1;
ssp.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
ssp.ExecProc;
FreeAndNil(ssp);
Assim.
qry := TSQLDataSet.Create(nil);
qry.SQLConnection := Conn;
qry.CommandText := ´EXEC SP_GRUPOS(:vID_GRUPOS, :vNOME, :vDESCRICAO, :vUSUARIO, :vOPR)´;
qry.Close;
qry.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);
qry.ParamByName(´vNOME´ ).AsString := edtNome.Text;
qry.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
qry.ParamByName(´vUSUARIO´ ).AsInteger := 1;
qry.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
qry.ExecSQL;
e nada alguém pode me ajudar???
Estou usando Delphi 2009 e DBEpress Oracle 10g XE
Selects, funções, funciona menos a procedure.
Juliermecarvalho
Curtidas 0
Respostas
Josehenrique
27/04/2009
Estou usando Delphi 2009 e DBEpress Oracle 10g XE
Selects, funções, funciona menos a procedure.
Amigo desculpe nao ter a solulção do seu problema, na realidade queria pedir sua ajuda, pois nao estou conseguindo utilizar o DBX do Delphi2007 com o Oracle XE, já mexi no tnsnames.ora, listener.ora , sqlnet.ora, mas nao sei o que está errado, por outros programas e pela pagina de administracao do Oracle XE eu consigo utilizar o banco normalmente, quando vou fazer conexao pelo Delphi ao clicar em connect no SQLConnection recebo erro ORA-12154 TNS: nao foi possivel resolver o identificador de conexao especificado.
se puder me orientar quanto a versao de dll e vendor lib que está utilizando, pois acredito o erro deve estar ai ja que outros programas acessam o BD normalmente.
Obrigado!!
GOSTEI 0
Juliermecarvalho
27/04/2009
Cara eu crio um classe de conexão em tempo de projeto
Mais os parâmetros passados para esta classe estão aqui.
ConnectionName := ´AUTOMACAOCOMERCIALORACLE´;
DriverName := ´ORACLE´;
LibraryName := ´dbxora.dll´;
VendorLib := ´oci.dll´;
GetDriverFunc := ´getSQLDriverORACLE´;
Params.Add(´Database=127.0.0.1´);//se for local
Params.Add(´User_Name=AUTOMACAOCOMERCIAL´);//nome usuario
Params.Add(´Password=123´);//senha
LoginPrompt := False;
E funciona que é uma beleza!
qualquer coisa entra em contato por
jcoliviera@unesc.br
Mais os parâmetros passados para esta classe estão aqui.
ConnectionName := ´AUTOMACAOCOMERCIALORACLE´;
DriverName := ´ORACLE´;
LibraryName := ´dbxora.dll´;
VendorLib := ´oci.dll´;
GetDriverFunc := ´getSQLDriverORACLE´;
Params.Add(´Database=127.0.0.1´);//se for local
Params.Add(´User_Name=AUTOMACAOCOMERCIAL´);//nome usuario
Params.Add(´Password=123´);//senha
LoginPrompt := False;
E funciona que é uma beleza!
qualquer coisa entra em contato por
jcoliviera@unesc.br
GOSTEI 0
Diegogrv
27/04/2009
Boa tarde julierme,
também estou com problema com Delphi e procedure de base com banco oracle 10g.
Eu utilizo delphi 6/7 e vc?
Meu erro é que os parametros das rotinas de base vem invertido.
Ex.: No banco a procedure esta com os parametros na ordem x,y,z mas, quando utilizo no delphi os parametro retornam na ordem z,y,x e as vezes embaralhado, com isso gera um erro na execução da rotina.
O seu problema é o mesmo?
você já conseguiu resolver o problema?
obrigado t+
também estou com problema com Delphi e procedure de base com banco oracle 10g.
Eu utilizo delphi 6/7 e vc?
Meu erro é que os parametros das rotinas de base vem invertido.
Ex.: No banco a procedure esta com os parametros na ordem x,y,z mas, quando utilizo no delphi os parametro retornam na ordem z,y,x e as vezes embaralhado, com isso gera um erro na execução da rotina.
O seu problema é o mesmo?
você já conseguiu resolver o problema?
obrigado t+
GOSTEI 0
Discorpio
27/04/2009
Bom dia a todos.
Julierme.
Muito embora voce não tenha reportado a nós o tipo de erro que ele gera, então presumindo que o erro ou seja nome de parâmetros errados, ou erro na Instrução SQL de sua procedure pois o código abaixo da Stored Procedure que voce passou, está devidamente correto, só precisando de alguns ajustes, para que o erro seja reportado, assim:
Repare que eu omiti o método ´ssp.Close´, pois se voce o está instanciando o objeto em memória, utilizando-o e depois destruindo-o, então não há necessidade de se fechar a Stored Procedure, pois quando a mesma é instanciada, se encontra fechada.
Por outro lado, usar um TSQLDataSet para executar Stored Procedures, voce deve configurar a propriedade CommandType com ´ctStoredProc´ e o CommandText somente com o nome da Stored Procedure, assim:
[code]
try
try
qry := TSQLDataSet.Create(nil);
qry.SQLConnection := Conn;
qry.CommandType := ctStoredProc; // Método esquecido
qry.CommandText := ´SP_GRUPOS´ // Aqui só o nome da SP
qry.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);
qry.ParamByName(´vNOME´ ).AsString := edtNome.Text;
qry.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
qry.ParamByName(´vUSUARIO´ ).AsInteger := 1;
qry.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
qry.ExecSQL;
except
On E: Exception do ShowMessage(E.Message)
end;
finally
FreeAndNil(qry);
end;
[code]
Repare também que eu condifique dois procedimentos ´Try´ aninhados, isto porque se houver o erro, o bloco protegido Finally vai destruir o objeto da memória havendo erro ou não.
Julierme.
Muito embora voce não tenha reportado a nós o tipo de erro que ele gera, então presumindo que o erro ou seja nome de parâmetros errados, ou erro na Instrução SQL de sua procedure pois o código abaixo da Stored Procedure que voce passou, está devidamente correto, só precisando de alguns ajustes, para que o erro seja reportado, assim:
try try ssp := TSQLStoredProc.Create(nil); ssp.SQLConnection := Conn; ssp.StoredProcName := ´SP_GRUPOS´; ssp.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);; ssp.ParamByName(´vNOME´ ).AsString := edtNome.Text; ssp.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text; ssp.ParamByName(´vUSUARIO´ ).AsInteger := 1; ssp.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção ssp.ExecProc; except On E: Exception do ShowMessage(E.Message); end; finally FreeAndNil(ssp); end;
Repare que eu omiti o método ´ssp.Close´, pois se voce o está instanciando o objeto em memória, utilizando-o e depois destruindo-o, então não há necessidade de se fechar a Stored Procedure, pois quando a mesma é instanciada, se encontra fechada.
Por outro lado, usar um TSQLDataSet para executar Stored Procedures, voce deve configurar a propriedade CommandType com ´ctStoredProc´ e o CommandText somente com o nome da Stored Procedure, assim:
[code]
try
try
qry := TSQLDataSet.Create(nil);
qry.SQLConnection := Conn;
qry.CommandType := ctStoredProc; // Método esquecido
qry.CommandText := ´SP_GRUPOS´ // Aqui só o nome da SP
qry.ParamByName(´vID_GRUPOS´).AsInteger := StrToInt(edtCodigo.Text);
qry.ParamByName(´vNOME´ ).AsString := edtNome.Text;
qry.ParamByName(´vDESCRICAO´).AsString := edtDescricao.Text;
qry.ParamByName(´vUSUARIO´ ).AsInteger := 1;
qry.ParamByName(´vOPR´ ).AsString := Fopr;//parâmentro de operção
qry.ExecSQL;
except
On E: Exception do ShowMessage(E.Message)
end;
finally
FreeAndNil(qry);
end;
[code]
Repare também que eu condifique dois procedimentos ´Try´ aninhados, isto porque se houver o erro, o bloco protegido Finally vai destruir o objeto da memória havendo erro ou não.
GOSTEI 0