Dúvida quanto ao uso do SimpleDataSet

Firebird

21/10/2005

Tenho uma dúvida, aliada a minha inexperiência com DBExpress, está me tirando o sono. Tenho uma tela de extrato de conta. Nesta tela eu uso um DBGrid, para mostrar a situação de um dado momento. Preciso abrir uma consulta, por exemplo, entre um período de datas. Quando eu uso o SimplDataSet, para fazer a consulta, me gera um erro de listindex out of bound, erro esse já discutido aqui, onde o Vinicius2k, me disse que eu não deveria usar o SimpleDataSet. Então, o que usar no seu lugar, já q o DBExpress é unidirecional e os seus componentes também e o DBGrid é bidirecional. Somente usando o Simpledaset para mostrar no grid uma sql ele me satisfaz, mas quando preciso incluir uma consulta Sql nele, entã a coisa complica. O q vc´s sugerem?
ex: eu abro o simple assim: select * from tabela. Com o form aberto o usuário precisa saber o movimento entre o dia 12/10 e 20/10, aí faço:
select * from tabela where data btween :dt1 and :dt2, exemplo e não vai. Posso fazer no SqlQuery q funciona, mas o grid está no datasource do Simple. Como contornar isso? Via SP tenho q carregar os parãmetro pelo simple o q daria no mesmo. Tô sem rumo!!!


Paulo

Paulo

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

21/10/2005

Então, o que usar no seu lugar, já q o DBExpress é unidirecional e os seus componentes também e o DBGrid é bidirecional. Somente usando o Simpledaset para mostrar no grid uma sql ele me satisfaz, mas quando preciso incluir uma consulta Sql nele, entã a coisa complica. [b:861269be27]O q vc´s sugerem?[/b:861269be27]

Utilizar estrutura padrão (e ideal) de conexão do dbExpress aliada à Midas:
[b:861269be27]TSQLConnection[/b:861269be27] [color=red:861269be27]DriverName, LibraryName, Params e VendorLib[/color:861269be27], todas corretamente configuradas para acessar seu SGBD | + [b:861269be27]TSQLDataSet[/b:861269be27] [color=red:861269be27]CommandText[/color:861269be27], a instrução SQL a ser executada. [color=red:861269be27]SQLConnection[/color:861269be27], apontando para a SQLConnection acima. | + [b:861269be27]TDataSetProvider[/b:861269be27] [color=red:861269be27]DataSet[/color:861269be27], apontando para o SQLDataSet acima. | + [b:861269be27]TClientDataSet[/b:861269be27] [color=red:861269be27]ProviderName[/color:861269be27], apontando para o DataSetProvider acima. | + [b:861269be27]TDataSource[/b:861269be27] [color=red:861269be27]DataSet[/color:861269be27], apontando para o ClientDataSet acima.


T+


GOSTEI 0
Paulo

Paulo

21/10/2005

Eu uso basicamente SP. Só por sugestão, se eu criasse ums SP, com os parametros, executasse e depois abrisse o grid num simple, direcionado para a SP, funcionaria também, certo? Isso é somente uma sugestão, mas meu DataModule, ficaria com menos componentes.


GOSTEI 0
Paulo

Paulo

21/10/2005

Fiz assim, conforme o Vinicius2k disse. Dá o erro de
unssigned code.


Eis minha query:

with Dm.sqlExtRec do begin close; CommandText:=´select data_vencto,valor,status,codclie,n_doc,data_rec,desconto,acrescimo,multa,t_rec,emissao from c_receber where data_vencto between :ini and :fim´; ParamByName(´ini´).value:=strtodate(dtini.text); paramByName(´fim´).value:=strtodate(dtfim.text); open; end;



GOSTEI 0
Bruno Belchior

Bruno Belchior

21/10/2005

só uma sugestão...
with Dm.sqlExtRec do 
begin 
  Close; 
  CommandText:=´select data_vencto,valor, status, ´ +
    ´codclie, n_doc, data_rec, desconto, acrescimo, ´ +
    ´multa, t_rec, emissao from c_receber where ´ +
    ´data_vencto between :ini and :fim´; 
  ParamByName(´ini´).AsString:= FormatDateTime(´mm/dd/yyyy´, 
    StrToDate(DtIni.Text)); 
  ParamByName(´ini´).AsString:= FormatDateTime(´mm/dd/yyyy´,
    StrToDate(DtFim.Text)); 
  Open; 
end;



GOSTEI 0
Afarias

Afarias

21/10/2005

1) O SQL deve ser setado no TSQLDataSet

2) O Open deve ser realizado no TClientDataSet

3) Antes do Open, se há parâmentros no SQL deve ser realizado um FetchParams no TClientDataSet e esses parâmetros devem receber os valores no próprio TClientDataSet


T+


GOSTEI 0
Paulo

Paulo

21/10/2005

Valeu, Bruno. Era o formato da data mesmo.


GOSTEI 0
POSTAR