Fórum Meu for não funciona #371525
23/06/2009
0
for i := 0 to Pred(dbgTitulos.SelectedRows.Count) do begin dtsTitulos.DataSet.Edit; dtsTitulos.DataSet.FieldByName(´LIDA´).AsString := ´S´; dtsTitulos.DataSet.Post; (dtsTitulos.DataSet as TOracleDataSet).Session.Commit; (dtsTitulos.DataSet as TOracleDataSet).RefreshRecord; if treMensagens.Selected.Text = Mens(strNovas) then if treMensagens.Selected.Parent.Text = Mens(strRecebidas) then AbreQry(qryRecebidasNovas) else AbreQry(qryEnviadasNovas) else if treMensagens.Selected.Text = Mens(strExcluidas) then if treMensagens.Selected.Parent.Text = Mens(strEnviadas) then AbreQry(qryEnviadasExcluidas) else AbreQry(qryRecebidasExcluidas); end;
Paulo
Curtir tópico
+ 0Posts
23/06/2009
Acacio
Gostei + 0
24/06/2009
Paulo
Gostei + 0
24/06/2009
Paulo
Gostei + 0
24/06/2009
.lg.
Pelo que entendi vendo o código... você pode correr todos os registros e usar somente os que você quiser. Tudo é possível. So é complidado de se obter. No seu caso... valide somente as colunas que estiverem selecionadas. Assim ele varre por apenas as células que você quiser.
.LG.
Gostei + 0
24/06/2009
Paulo
Gostei + 0
24/06/2009
Uasan
Pelo que estoiu vendo no seu for não tem next, ou seja ele sempre fica no primeiro registro.
Não sei se funciona mas tente assim no total de registro.
var Proximo:integer; begin Proximo := Pred(dbgTitulos.SelectedRows.Count); for i:=0 to proximo do begin .. .. .. seu codigo. .. .. proximo := proximo +1; end;
[]´s
Gostei + 0
24/06/2009
Uasan
Esquece o codigo acima viajei somente tente:
dtsTitulos.next;
[]´s
Gostei + 0
24/06/2009
Paulo
Gostei + 0
25/06/2009
Weber
while not dbgTitulos.Eof do begin dtsTitulos.DataSet.Edit; dtsTitulos.DataSet.FieldByName(´LIDA´).AsString := ´S´; dtsTitulos.DataSet.Post; (dtsTitulos.DataSet as TOracleDataSet).Session.Commit; (dtsTitulos.DataSet as TOracleDataSet).RefreshRecord; if treMensagens.Selected.Text = Mens(strNovas) then if treMensagens.Selected.Parent.Text = Mens(strRecebidas) then AbreQry(qryRecebidasNovas) else AbreQry(qryEnviadasNovas) else if treMensagens.Selected.Text = Mens(strExcluidas) then if treMensagens.Selected.Parent.Text = Mens(strEnviadas) then AbreQry(qryEnviadasExcluidas) else AbreQry(qryRecebidasExcluidas); dbgTitulos.Next; end;
Gostei + 0
25/06/2009
Paulo
procedure TfrmMensagensUsuarios.btnLidaClick(Sender: TObject); var i: Integer; s: String; ABookMarkList: TBookMarkList; begin if not Assigned(dtsTitulos.DataSet) then exit; ABookMarkList := dbgTitulos.SelectedRows; for i := 0 to Pred(ABookMarkList.Count) do begin //Na segunda passagem do loop, dá o erro. dtsTitulos.DataSet.Bookmark := ABookMarkList[i]; dtsTitulos.DataSet.Edit; dtsTitulos.DataSet.FieldByName(´LIDA´).AsString := ´S´; dtsTitulos.DataSet.Post; (dtsTitulos.DataSet as TOracleDataSet).Session.Commit; (dtsTitulos.DataSet as TOracleDataSet).RefreshRecord; if treMensagens.Selected.Text = Mens(strNovas) then if treMensagens.Selected.Parent.Text = Mens(strRecebidas) then AbreQry(qryRecebidasNovas) else AbreQry(qryEnviadasNovas) else if treMensagens.Selected.Text = Mens(strExcluidas) then if treMensagens.Selected.Parent.Text = Mens(strEnviadas) then AbreQry(qryEnviadasExcluidas) else AbreQry(qryRecebidasExcluidas); end; dtsTitulos.DataSet.FreeBookmark(ABookMarkList); end;
Gostei + 0
25/06/2009
Paulo
Gostei + 0
25/06/2009
Paulo
procedure TfrmMensagensUsuarios.btnLidaClick(Sender: TObject); var i: Integer; //s: String; ABookMarkList: TBookMarkList; ABookMarkStr: TBookmarkStr; begin if not Assigned(dtsTitulos.DataSet) then exit; //ABookMarkStr := dtsTitulos.DataSet.BookMark; ABookMarkList := dbgTitulos.SelectedRows; dtsTitulos.DataSet.First; for i := 0 to Pred(ABookMarkList.Count) do begin dtsTitulos.DataSet.Bookmark := ABookMarkList[i]; dtsTitulos.DataSet.Edit; dtsTitulos.DataSet.FieldByName(´LIDA´).AsString := ´S´; dtsTitulos.DataSet.Post; (dtsTitulos.DataSet as TOracleDataSet).Session.Commit; (dtsTitulos.DataSet as TOracleDataSet).RefreshRecord; end; dtsTitulos.DataSet.First; for i := 0 to Pred(dbgTitulos.SelectedRows.Count) do begin if treMensagens.Selected.Text = Mens(strNovas) then if treMensagens.Selected.Parent.Text = Mens(strRecebidas) then AbreQry(qryRecebidasNovas) else AbreQry(qryEnviadasNovas) else if treMensagens.Selected.Text = Mens(strExcluidas) then if treMensagens.Selected.Parent.Text = Mens(strEnviadas) then AbreQry(qryEnviadasExcluidas) else AbreQry(qryRecebidasExcluidas); end; dtsTitulos.DataSet.FreeBookmark(ABookMarkList); end;
Porem o segundo FOR creio não ser necessário, mas não consegui nada sem ele também. Está dando erro de Access Violation. Agora não sei se é por causa disso, pois ontem eu testando estava dando muitos desses erros, mas não consegui detectar onde era o erro. Hoje deu, parou e voltou a dar, coincidentemente ou não, após eu ter mudado o código para o que está acima. Foi necessário colocar o FIRST, pois a lista vinha bagunçada, ou seja, o cursor para no último registro sempre, mas eu não sei porque. Coloquei o First e agora faz o que eu quero. Abaixo as procedure e function, AbreQuery e Mens, se alguém puder e quiser analisar esse Access Violation. Agradeço desde então.
Procedure AbreQuery
procedure TfrmMensagensUsuarios.AbreQry(qry: TOracleDataSet); begin dtsTitulos.DataSet := qry; if qry.Active then qry.Refresh else qry.Open; end;
Function Mens
function mens; external ´drpmsg.dll´ name ´mens´;
Gostei + 0
25/06/2009
Weber
Gostei + 0
25/06/2009
Paulo
isto
dbgTitulos.SelectedRows.Count -1
é a mesma coisa que isso
Pred(dbgTitulos.SelectedRows.Count)
E conforme meu último código, está funcionando. O que passa é um Access Violation, que dá, mas após atualizar todas os registros marcados.
Mas acho que são alguns eventos que são disparados após ele atualizar tudo.
Gostei + 0
26/06/2009
Paulo
dtsTitulos.DataSet.FreeBookmark(ABookMarkList);
Comentei a linha e está funcionando.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)