Stored Procedure com DBExpress
Olá Pessoal,
Estou começando a utilizar o componente DBExpress com Oracle. Alguém poderia me informar como faço a chamada de uma Stored Procedure? Pois estou utilizando o TSimplesDataset.
PERIODO.Close;
PERIODO.Params.ParamByName(´parperiodo´).AsString:=EDIT_PERIODO.Text;
PERIODO.Params.ParamByName(´parexercicio´).AsString:=EDIT_EXERCICIO.Text;
PERIODO.Params.ParamByName(´paremp´).AsString:=EDIT_EMPRESA.Text;
PERIODO.Params.ParamByName(´pardatainicial´).AsDate:=DataInicial.Date;
PERIODO.Params.ParamByName(´pardatafim´).AsDate:=DataFim.Date;
PERIODO.Execute;
Assim, apresenta um erro ´Cursor not returned from query´.
Estou começando a utilizar o componente DBExpress com Oracle. Alguém poderia me informar como faço a chamada de uma Stored Procedure? Pois estou utilizando o TSimplesDataset.
PERIODO.Close;
PERIODO.Params.ParamByName(´parperiodo´).AsString:=EDIT_PERIODO.Text;
PERIODO.Params.ParamByName(´parexercicio´).AsString:=EDIT_EXERCICIO.Text;
PERIODO.Params.ParamByName(´paremp´).AsString:=EDIT_EMPRESA.Text;
PERIODO.Params.ParamByName(´pardatainicial´).AsDate:=DataInicial.Date;
PERIODO.Params.ParamByName(´pardatafim´).AsDate:=DataFim.Date;
PERIODO.Execute;
Assim, apresenta um erro ´Cursor not returned from query´.
Hcnc
Curtidas 0
Respostas
Welington
13/08/2004
Ao invés do comando ´Execute´, use ExecProc.
Nunca utizei o ParambyName, sempre usei o FindParam.
Ex.:
PERIODO.Params.FindParam(´parperiodo´).AsString:=EDIT_PERIODO.Text;
Mas este dois com certeza devem ter o mesmo desempenho.
Nunca utizei o ParambyName, sempre usei o FindParam.
Ex.:
PERIODO.Params.FindParam(´parperiodo´).AsString:=EDIT_PERIODO.Text;
Mas este dois com certeza devem ter o mesmo desempenho.
GOSTEI 0
Hcnc
13/08/2004
Caro Welington,
O componente TSimplesDataset do DBExpress não possui ExecProc. A sua chamada da procedure com banco Oracle foi com qual componente?
O componente TSimplesDataset do DBExpress não possui ExecProc. A sua chamada da procedure com banco Oracle foi com qual componente?
GOSTEI 0
Hcnc
13/08/2004
Caro Welington,
O componente TSimplesDataset do DBExpress não possui ExecProc. A sua chamada da procedure com banco Oracle foi com qual componente?
O componente TSimplesDataset do DBExpress não possui ExecProc. A sua chamada da procedure com banco Oracle foi com qual componente?
GOSTEI 0
Welington
13/08/2004
O componente que eu utilizo é o SQLStoredProc da paleta DBExpress. Uso ele com o banco de dados Firebird. Por que vc não tenta utilizar este componente??? Apesar do banco não ser o Oracle, a lógica de programação é a mesma.
GOSTEI 0
Hcnc
13/08/2004
Oi Welington,
Já troquei de componente e com relação ao erro anterior era o parametro type do params do componente que estava ´PtInput´. Parametrizei para PtInputOutput e eliminei o erro. Mas, apresentou outro erro. Tenho cinco parametro (Periodo:ftString; Exercicio:ftString; Emp:ftBCD; Datainicial:fttimeStamp; Datafim:fttimeStamp), quando passo os parametros e executo ´ExecProc´ apresenta o arro de Action Violation at Adress. Vc já passou por um erro assim? Também tentei colocar os parametros todos ftString, mas não funcionou! Que acha?
Hugo
Já troquei de componente e com relação ao erro anterior era o parametro type do params do componente que estava ´PtInput´. Parametrizei para PtInputOutput e eliminei o erro. Mas, apresentou outro erro. Tenho cinco parametro (Periodo:ftString; Exercicio:ftString; Emp:ftBCD; Datainicial:fttimeStamp; Datafim:fttimeStamp), quando passo os parametros e executo ´ExecProc´ apresenta o arro de Action Violation at Adress. Vc já passou por um erro assim? Também tentei colocar os parametros todos ftString, mas não funcionou! Que acha?
Hugo
GOSTEI 0
Welington
13/08/2004
Atribua os campos desta forma:
StoredProc.ParamByName(´Periodo´).Value := Edit1.Text;
StoredProc.ParamByName(´Exercicio´).Value := Edit2.Text;
StoredProc.ParamByName(´Emp´).Value := StrToFloat(Edit3.Text);
StoredProc.ParamByName(´DataInicial´).Value := StrToDateTime(Edit4.Text);
StoredProc.ParamByName(´DataFinal´).Value := StrToDateTime(Edit5.Text);
Verifique se os campos do formulário possuem a propriedade MaxLength maior do que os parâmetros na StoredProc.
Se não der certo envie a sua storedproc.
Tenho um exemplo de como usar StoredProc, mas com o Firebird. Se vc estiver interessado, envie uma mensagem particular passando o seu e-mail.
StoredProc.ParamByName(´Periodo´).Value := Edit1.Text;
StoredProc.ParamByName(´Exercicio´).Value := Edit2.Text;
StoredProc.ParamByName(´Emp´).Value := StrToFloat(Edit3.Text);
StoredProc.ParamByName(´DataInicial´).Value := StrToDateTime(Edit4.Text);
StoredProc.ParamByName(´DataFinal´).Value := StrToDateTime(Edit5.Text);
Verifique se os campos do formulário possuem a propriedade MaxLength maior do que os parâmetros na StoredProc.
Se não der certo envie a sua storedproc.
Tenho um exemplo de como usar StoredProc, mas com o Firebird. Se vc estiver interessado, envie uma mensagem particular passando o seu e-mail.
GOSTEI 0