Dúvida quanto ao uso do SimpleDataSet
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!!!
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
Curtidas 0
Respostas
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
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
21/10/2005
Fiz assim, conforme o Vinicius2k disse. Dá o erro de
Eis minha query:
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
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
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+
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
21/10/2005
Valeu, Bruno. Era o formato da data mesmo.
GOSTEI 0