Unassigned Code em SP
Antes da minha SP ter parâmetros do tipo data, funcionava belezinha . Foi só colocar a data que começou a encrenca do [b:3e1b475c5e]UNASSIGNED CODE[/b:3e1b475c5e]
Tentei fazer as dicas do pessoal aqui do fórum , mas nenhuma deu certo.
FB 1.5
DBExpress
Tentei fazer as dicas do pessoal aqui do fórum , mas nenhuma deu certo.
FB 1.5
DBExpress
with dmMovimento1.qyGridAcompanh do begin CLOSE; sql.clear; sql.TEXT := ´select * from SALL_ACOMPANH(:PCODACO, :PCODCON, :PORIOCO, :PCODCLA, :PCODSTA, :PDATAIN, :PDATAFI, :PORDEM)´; ParamByName(´PCODACO´).value := xFiltroSelect.Key1; ParamByName(´PCODCON´).value := xFiltroSelect.Key2; ParamByName(´PORIOCO´).value := xFiltroSelect.Key3; ParamByName(´PCODCLA´).value := xFiltroSelect.Key4; ParamByName(´PCODSTA´).value := xFiltroSelect.Key5; ParamByName(´PDATAIN´).asdate := edDatAcoIni.date; ParamByName(´PDATAFI´).asdate := edDatAcoFim.date; ParamByName(´PORDEM´).value := xFiltroSelect.Ordenacao; Open; end;
Powerlog Tecnologia
Curtidas 0
Respostas
Powerlog Tecnologia
05/03/2008
Só para complementar:
Isso só acontece em parâmetros do tipo DATA em uma SP que me retorna a SELECT.
Em SP de Insert, Update funciona normal...
Isso só acontece em parâmetros do tipo DATA em uma SP que me retorna a SELECT.
Em SP de Insert, Update funciona normal...
GOSTEI 0
Hall 9000
05/03/2008
Uso DBExpress FB 1.5.
Tenho uma base de dados com uma tabela VENDA que tem data. Fiz um teste e funcionou.
Você tem que fazer as tradicionais ligações: sqldataset ao connection, depois um provider ao sqldataset, um clientdataset ao provider e ligar o datasource ao cds.
Na consulta vc passa o parâmetro para o sqldataset (fechado) depois da um close e open no CLIENTDATASET e NÃO no sqldataset.
procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLDataSet1 do
begin
Close;
ClientDataSet1.Close;
CommandText:= ´SELECT * FROM VENDA WHERE DATA_VENDA = :DT ´;
Params.ParamByName(´DT´).AsDate:= DateEdit1.Date;
ClientDataSet1.Open;
end;
end;
Tenta isso.
Falou.
Tenho uma base de dados com uma tabela VENDA que tem data. Fiz um teste e funcionou.
Você tem que fazer as tradicionais ligações: sqldataset ao connection, depois um provider ao sqldataset, um clientdataset ao provider e ligar o datasource ao cds.
Na consulta vc passa o parâmetro para o sqldataset (fechado) depois da um close e open no CLIENTDATASET e NÃO no sqldataset.
procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLDataSet1 do
begin
Close;
ClientDataSet1.Close;
CommandText:= ´SELECT * FROM VENDA WHERE DATA_VENDA = :DT ´;
Params.ParamByName(´DT´).AsDate:= DateEdit1.Date;
ClientDataSet1.Open;
end;
end;
Tenta isso.
Falou.
GOSTEI 0
Powerlog Tecnologia
05/03/2008
Colega, tentei fazer o que vc me pediu e ficou assim:
Porém agora dá outro erro:
Lembrando que antes dos parâmetros DATA funcionava ... :cry:
with dmMovimento1.sqlSp_Datas do begin Close; CommandText:= ´select * from SALL_ACOMPANH(:PCODACO, :PCODCON, :PORIOCO, :PCODCLA, :PCODSTA, :PDATAIN, :PDATAFI, :PORDEM)´; Params.ParamByName(´PCODACO´).asinteger := xFiltroSelect.Key1; Params.ParamByName(´PCODCON´).asinteger := xFiltroSelect.Key2; Params.ParamByName(´PORIOCO´).asinteger := xFiltroSelect.Key3; Params.ParamByName(´PCODCLA´).asinteger := xFiltroSelect.Key4; Params.ParamByName(´PCODSTA´).asinteger := xFiltroSelect.Key5; Params.ParamByName(´PDATAIN´).asdate := edDatAcoIni.date; Params.ParamByName(´PDATAFI´).asdate := edDatAcoFim.date; Params.ParamByName(´PORDEM´).asstring := xFiltroSelect.Ordenacao; cdsacompanh.Open; cdsacompanh.IndexFieldNames := ´codaco;dinaco´; end;
Porém agora dá outro erro:
password required
Lembrando que antes dos parâmetros DATA funcionava ... :cry:
GOSTEI 0
Bico
05/03/2008
Bom dia.
Cara, trabalhar com datas em stored procedure é meio complicado.
Acredito que a forma mais fácil de solucionar este problema seria passar os parâmetros diretamente no SQL.
Por exemplo:
Esta seria minha stored procedure:
Para executá-la diretamente no banco:
No delphi você poderia montar o SQL da seguinte forma:
Atenciosamente,
Fernando.
Cara, trabalhar com datas em stored procedure é meio complicado.
Acredito que a forma mais fácil de solucionar este problema seria passar os parâmetros diretamente no SQL.
Por exemplo:
Esta seria minha stored procedure:
CREATE PROCEDURE TESTE_DATA (COD_PES INTEGER, DATA_INI DATE, DATA_FIM DATE) RETURNS (NRO_NF CHAR(8), VALOR NUMERIC(12,2), DATA DATE) AS BEGIN FOR SELECT S.NUM_DUP, S.VLR, S.DATA FROM SAIDA S WHERE S.COD_PES = :COD_PES AND S.DATA >= :DATA_INI AND S.DATA <= :DATA_FIM ORDER BY S.NUM_DUP INTO :NRO_NF, :VALOR, :DATA DO SUSPEND; END;
Para executá-la diretamente no banco:
SELECT * FROM TESTE_DATA(1555, ´01.12.2007´, ´01.01.2008´)
No delphi você poderia montar o SQL da seguinte forma:
function TForm1.BuscarNotas(CodCli: integer; DTIni, DTFim: TDateTime): boolean; var SQL, sDTIni, sDTFim: string; begin sDTIni := FormatDateTime(´DD.MM.YYYY´, DTIni); sDTFim := FormatDateTime(´DD.MM.YYYY´, DTFim); SQL := Format(´SELECT * FROM TESTE_DATA(´ + IntToStr(CodCli) + ´, ¬s, ¬s)´, [QuotedStr(sDTIni), QuotedStr(sDTFim)]); ... end;
Atenciosamente,
Fernando.
GOSTEI 0
Hall 9000
05/03/2008
Essa mensagem aparece geralmente quando a propriedade LoginPrompt esta setada para True.
No seu código ainda falou fechar o cds antes de dar o Open:
with dmMovimento1.sqlSp_Datas do
begin
Close;
CommandText:= ´select * from SALL_ACOMPANH(:PCODACO, :PCODCON, :PORIOCO, :PCODCLA, :PCODSTA, :PDATAIN, :PDATAFI, :PORDEM)´;
Params.ParamByName(´PCODACO´).asinteger := xFiltroSelect.Key1;
Params.ParamByName(´PCODCON´).asinteger := xFiltroSelect.Key2;
Params.ParamByName(´PORIOCO´).asinteger := xFiltroSelect.Key3;
Params.ParamByName(´PCODCLA´).asinteger := xFiltroSelect.Key4;
Params.ParamByName(´PCODSTA´).asinteger := xFiltroSelect.Key5;
Params.ParamByName(´PDATAIN´).asdate := edDatAcoIni.date;
Params.ParamByName(´PDATAFI´).asdate := edDatAcoFim.date;
Params.ParamByName(´PORDEM´).asstring := xFiltroSelect.Ordenacao;
cdsacompanh.Close; /// ====>>> Fechar o ClientDataSet
cdsacompanh.Open;
cdsacompanh.IndexFieldNames := ´codaco;dinaco´;
end;
Estranho que funciona sem o parametro da data... esperimenta tira-lo agora e fazer um teste para ver se ainda funciona... Vc está usando o SQLConnection?
No seu código ainda falou fechar o cds antes de dar o Open:
with dmMovimento1.sqlSp_Datas do
begin
Close;
CommandText:= ´select * from SALL_ACOMPANH(:PCODACO, :PCODCON, :PORIOCO, :PCODCLA, :PCODSTA, :PDATAIN, :PDATAFI, :PORDEM)´;
Params.ParamByName(´PCODACO´).asinteger := xFiltroSelect.Key1;
Params.ParamByName(´PCODCON´).asinteger := xFiltroSelect.Key2;
Params.ParamByName(´PORIOCO´).asinteger := xFiltroSelect.Key3;
Params.ParamByName(´PCODCLA´).asinteger := xFiltroSelect.Key4;
Params.ParamByName(´PCODSTA´).asinteger := xFiltroSelect.Key5;
Params.ParamByName(´PDATAIN´).asdate := edDatAcoIni.date;
Params.ParamByName(´PDATAFI´).asdate := edDatAcoFim.date;
Params.ParamByName(´PORDEM´).asstring := xFiltroSelect.Ordenacao;
cdsacompanh.Close; /// ====>>> Fechar o ClientDataSet
cdsacompanh.Open;
cdsacompanh.IndexFieldNames := ´codaco;dinaco´;
end;
Estranho que funciona sem o parametro da data... esperimenta tira-lo agora e fazer um teste para ver se ainda funciona... Vc está usando o SQLConnection?
GOSTEI 0
Powerlog Tecnologia
05/03/2008
Colega Hall 9000: o close eu dei antes de chamar a select, pois tenho uma função que fecha todos os CDSs.
Colega Bico: já tentei passar por parâmetro nesse formato dd.mm.yyyy nas não dessa forma que vc mostrou com ¬s. Vou tentar e posto aqui...
Colega Bico: já tentei passar por parâmetro nesse formato dd.mm.yyyy nas não dessa forma que vc mostrou com ¬s. Vou tentar e posto aqui...
GOSTEI 0
Powerlog Tecnologia
05/03/2008
Ô negócio difícil datas...
Mesmo com as dicas do Bico:
tá louco...
Mesmo com as dicas do Bico:
[b:5d27d19c2b]password required[/b:5d27d19c2b]
tá louco...
GOSTEI 0
Powerlog Tecnologia
05/03/2008
alguma luz no fim do túnel ?????
GOSTEI 0
Emerson Nascimento
05/03/2008
with dmMovimento1.sqlSp_Datas do begin Close; CommandText:= ´select * from SALL_ACOMPANH(:PCODACO, :PCODCON, :PORIOCO, :PCODCLA, :PCODSTA, :PDATAIN, :PDATAFI, :PORDEM)´; Params.ParamByName(´PCODACO´).asinteger := xFiltroSelect.Key1; Params.ParamByName(´PCODCON´).asinteger := xFiltroSelect.Key2; Params.ParamByName(´PORIOCO´).asinteger := xFiltroSelect.Key3; Params.ParamByName(´PCODCLA´).asinteger := xFiltroSelect.Key4; Params.ParamByName(´PCODSTA´).asinteger := xFiltroSelect.Key5; Params.ParamByName(´PDATAIN´).asSQLTimeStamp := DateTimeToSqlTimeStamp(edDatAcoIni.date); Params.ParamByName(´PDATAFI´).asSQLTimeStamp := DateTimeToSqlTimeStamp(edDatAcoFim.date); Params.ParamByName(´PORDEM´).asstring := xFiltroSelect.Ordenacao; cdsacompanh.Open; cdsacompanh.IndexFieldNames := ´codaco;dinaco´; end;
acrescente a unit SqlTimSt à cláusula uses
GOSTEI 0
Powerlog Tecnologia
05/03/2008
Colega Emerson...
Copiei e colei do jeito que vc informou...
Será alguma configuração no componente SQLConnection ?
expression evaluation not supported
password required
Copiei e colei do jeito que vc informou...
Será alguma configuração no componente SQLConnection ?
GOSTEI 0
Powerlog Tecnologia
05/03/2008
Consegui resolver passando os parâmetros como STRING.
Espero ter ajudado mais alguém !
PS: Agora uso o FB 2.03, talvez também tenha feito diferença...
No Delphi:
SQL.text := ´ select * from smov_areceber_boleto(´+ inttostr(fFiltroSelect.key1)+´,´+inttostr(fFiltroSelect.key2)+´,´+ iif(fFiltroSelect.dat1 = 0 , ´null´, QuotedStr(FormatDateTime(´dd.mm.yyyy´,fFiltroSelect.dat1)))+´,´+ iif(fFiltroSelect.dat2 = 0 , ´null´, QuotedStr(FormatDateTime(´dd.mm.yyyy´,fFiltroSelect.dat2)))+´)´;
No IBExpert:
CREATE OR ALTER PROCEDURE SMOV_ARECEBER_BOLETO( PREC_CODIGO INTEGER, PREC_CODCLI INTEGER, PDATINI VARCHAR(10), PDATFIM VARCHAR(10)) RETURNS ( REC_CODIGO INTEGER, (...)
sqltext = ´select * from ARECEBER a where 1 = 1 ´; if ((:pREC_CODIGO is not null) and (:pREC_CODIGO > 0)) then sqltext = sqltext || ´ and REC_CODIGO = ´|| :pREC_CODIGO; if ((:PREC_CODCLI is not null) and (:PREC_CODCLI > 0)) then sqltext = sqltext || ´ and REC_CODCLI = ´|| :PREC_CODCLI; if (:PDATINI is not null) then sqltext = sqltext || ´ and a.rec_datven >= ´´´||:PDATINI||´´´´; if (:PDATFIM is not null) then sqltext = sqltext || ´ and a.rec_datven <= ´´´||:PDATFIM||´´´´;
Espero ter ajudado mais alguém !
PS: Agora uso o FB 2.03, talvez também tenha feito diferença...
GOSTEI 0