Fórum procedure com oracle dbexpress #370052

27/04/2009

0

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.


Juliermecarvalho

Juliermecarvalho

Responder

Posts

27/04/2009

Josehenrique

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!!


Responder

Gostei + 0

28/04/2009

Juliermecarvalho

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


Responder

Gostei + 0

01/06/2009

Diegogrv

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+


Responder

Gostei + 0

03/06/2009

Discorpio

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:

 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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar