Problema ao excluir usando loop..
estou com um probleminha onde uso aki esta função...
O problema é que a função esta excluindo somente um registro..a tabela tem vários registros que são excluidos de uma só vez, e depois ele sai do formulário automáticamente...tem como executar a função toda primeiro para depois sair do form ?...t+ vlw..
BD_CONT_REC.First; while not BD_CONT_REC.Eof do BD_CONT_REC.Delete; Close;
O problema é que a função esta excluindo somente um registro..a tabela tem vários registros que são excluidos de uma só vez, e depois ele sai do formulário automáticamente...tem como executar a função toda primeiro para depois sair do form ?...t+ vlw..
Gigatel
Curtidas 0
Respostas
Rjun
17/09/2005
Aparentemente seu código está OK. Você usou o trace para ver se ele passa somente um vez pelo loop? Pq você não utiliza um sql para fazer a exclusão dos registros.
DELETE FROM Tabela
GOSTEI 0
Martins
17/09/2005
Aparentemente seu código está OK. Você usou o trace para ver se ele passa somente um vez pelo loop? Pq você não utiliza um sql para fazer a exclusão dos registros.
DELETE FROM Tabela
vc pode fazer assim, mas se vc quiser utilizar a sua função, vc vai fazer algumas alterações para que ela fique assim:
begin while not Ds1.Eof do begin Ds1.Delete; ShowMessage(´Nome: ´+Ds1Nome.AsString); //Só para checar!!! end; Close; //Só vai fechar o form depois q excluí todos os reg Ok! end;
Boa sorte e bom desenvolvimento!!!
GOSTEI 0
Gigatel
17/09/2005
Vou fazer uns teste... aki, más parece estar funcionando...blz...t+
GOSTEI 0
Gameiro
17/09/2005
não sei se pode ser isso mas eu uso assim
uso o first e o next
ate mais. :)
begin Ds1.first; while not Ds1.Eof do begin Ds1.Delete; ShowMessage(´Nome: ´+Ds1Nome.AsString); //Só para checar!!! Ds1.next; end; Close; //Só vai fechar o form depois q excluí todos os reg Ok! end;
uso o first e o next
ate mais. :)
GOSTEI 0
Userba
17/09/2005
estou com um probleminha onde uso aki esta função...
O problema é que a função esta excluindo somente um registro..a tabela tem vários registros que são excluidos de uma só vez, e depois ele sai do formulário automáticamente...tem como executar a função toda primeiro para depois sair do form ?...t+ vlw..
BD_CONT_REC.First; while not BD_CONT_REC.Eof do BD_CONT_REC.Delete; Close;
Olá!
Está faltando um ´Next´ no seu código :)
... BD_CONT_REC.First; while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; BD_CONT_REC.Next; end; close; ...
GOSTEI 0
Gigatel
17/09/2005
Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema...
Valw..o apoio de todos..t+
while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close;
Valw..o apoio de todos..t+
GOSTEI 0
Marco Salles
17/09/2005
Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema...
Código:
while not BD_CONT_REC.Eof do
begin
BD_CONT_REC.Delete;
end;
Close;
Não é nenhuma surpesa que é este codigo funcione
Está faltando um ´Next´ no seu código
Não porque o propio delete faz as vias do Next
GOSTEI 0
Martins
17/09/2005
[quote:a14007b580=´Marco Salles´]
Não é nenhuma surpesa que é este codigo funcione
Não porque o propio delete faz as vias do Next[/quote:a14007b580]
Verdade [b:a14007b580]Marcos[/b:a14007b580], por isso não coloquei o [b:a14007b580]Next[/b:a14007b580], vamos ter mais atenção pessoal e dar mais enfase no estudo das estruturas dos blocos de comando do Delphi.
Boa Sorte a todos!!!
Martins
Aí galera valew pelo apoio..más por encrível que pareça esta é a função que funcionou sem problema...
Código:
while not BD_CONT_REC.Eof do
begin
BD_CONT_REC.Delete;
end;
Close;
Não é nenhuma surpesa que é este codigo funcione
Está faltando um ´Next´ no seu código
Não porque o propio delete faz as vias do Next[/quote:a14007b580]
Verdade [b:a14007b580]Marcos[/b:a14007b580], por isso não coloquei o [b:a14007b580]Next[/b:a14007b580], vamos ter mais atenção pessoal e dar mais enfase no estudo das estruturas dos blocos de comando do Delphi.
Boa Sorte a todos!!!
Martins
GOSTEI 0
Rjun
17/09/2005
Eu achei estranho o bloco só funcionar com um begin..end. Era só uma linha. Não teria que funcionar sem o begin..end?
GOSTEI 0
Martins
17/09/2005
Eu achei estranho o bloco só funcionar com um begin..end. Era só uma linha. Não teria que funcionar sem o begin..end?
Com certeza [b:3041189d62]Rjun[/b:3041189d62], mas isso seria correto desde que ele não quisesse sair do form após a exclusões, veja novamente o código dele:
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
Pois bem, ele fez quase tudo certo, e estaria tudo certo de ele não estivesse colocado aquele [b:3041189d62]Close[/b:3041189d62], pq para todos os efeitos ele vai ser lido após o [b:3041189d62]Delete[/b:3041189d62], e isso fecha o form e não permite q a rotina dele seja efetuada com sucesso, então faz-se necessário a utilização do bloco [b:3041189d62]begin... end;[/b:3041189d62]. Pq enquanto a condição for verdadeira, será executado o q estiver entre esse bloco, somente quando for falso, será executado o q estiver fora dele, blz!!
Espero ter ajudado.
Boa sorte a todos!!
Martins
GOSTEI 0
Rjun
17/09/2005
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
GOSTEI 0
Adriano Santos
17/09/2005
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
[b:67b99e1a0a]Martins[/b:67b99e1a0a], o [b:67b99e1a0a]Rjun[/b:67b99e1a0a] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.
GOSTEI 0
Gigatel
17/09/2005
[quote:bbf06d4943=´Adriano Santos´]
[b:bbf06d4943]Martins[/b:bbf06d4943], o [b:bbf06d4943]Rjun[/b:bbf06d4943] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.[/quote:bbf06d4943]
Aí galera sem querer botar lenha na fogueira, mas temos que práticos ..por isso que falei POR INCRIVÉL que paressa eu tbm acha que funcionava assim tbm..más na prática o que funcionou foi mesmo este codigo outro acima não dá certo...flw...
Más dúvidadas estão aqui para tentar ser resolvidas..t+...
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
[b:bbf06d4943]Martins[/b:bbf06d4943], o [b:bbf06d4943]Rjun[/b:bbf06d4943] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.[/quote:bbf06d4943]
Aí galera sem querer botar lenha na fogueira, mas temos que práticos ..por isso que falei POR INCRIVÉL que paressa eu tbm acha que funcionava assim tbm..más na prática o que funcionou foi mesmo este codigo outro acima não dá certo...flw...
while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close; end;
Más dúvidadas estão aqui para tentar ser resolvidas..t+...
GOSTEI 0
Adriano Santos
17/09/2005
Aí galera sem querer botar lenha na fogueira, mas temos que práticos ..por isso que falei POR INCRIVÉL que paressa eu tbm acha que funcionava assim tbm..más na prática o que funcionou foi mesmo este codigo outro acima não dá certo...flw...
Más dúvidadas estão aqui para tentar ser resolvidas..t+...
while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close; end;
Cara, que loko...não tinha que dar erro.
GOSTEI 0
Gigatel
17/09/2005
Deixa falar erro num dá..más ele deleta somente um registro...que para mim num era viável...heheheheeh...tenho cada ganbiarra aki no delphi de deixar qualquer programador de cabelo em pé...t+
GOSTEI 0
Martins
17/09/2005
[quote:e81831b81e=´Adriano Santos´]
[b:e81831b81e]Martins[/b:e81831b81e], o [b:e81831b81e]Rjun[/b:e81831b81e] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.[/quote:e81831b81e]
Hehehe!!!!
Certo pessoal!!!
Eu tb sempre acreditei q assim
fosse funcnionar, e deveria funcionar pq já utilizei assim antes e funcionou Ok!, mas como ele disse q não estava funcionando, só acrescentei o [b:e81831b81e]begin ... end[/b:e81831b81e], e os comentários anteirores foram dentro da lógica imaginada para solucionar o caso do colega, quero pedir desculpas a quem por ventura tenha se sentido de alguma forma atingido por mim, na boa pessoal, hehehe!!!
[b:e81831b81e]RJun[/b:e81831b81e], estou com vc, e sempre q preciso fazer exclusões, faço tudo via [b:e81831b81e]SQL[/b:e81831b81e]
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
[b:e81831b81e]Martins[/b:e81831b81e], o [b:e81831b81e]Rjun[/b:e81831b81e] está correto. O Algoritimo será executado até terminar o while, depois ele sairá e executará o Close. Faça o teste. É batata.[/quote:e81831b81e]
Hehehe!!!!
Certo pessoal!!!
Eu tb sempre acreditei q assim
while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok!
fosse funcnionar, e deveria funcionar pq já utilizei assim antes e funcionou Ok!, mas como ele disse q não estava funcionando, só acrescentei o [b:e81831b81e]begin ... end[/b:e81831b81e], e os comentários anteirores foram dentro da lógica imaginada para solucionar o caso do colega, quero pedir desculpas a quem por ventura tenha se sentido de alguma forma atingido por mim, na boa pessoal, hehehe!!!
[b:e81831b81e]RJun[/b:e81831b81e], estou com vc, e sempre q preciso fazer exclusões, faço tudo via [b:e81831b81e]SQL[/b:e81831b81e]
GOSTEI 0
Rjun
17/09/2005
Bom, desculpem minha insistência, mas estou curioso para saber o motivo de não funcionar sem o begin..end. Se alguem me der uma resposta lógica, juro que paro.
GOSTEI 0
Martins
17/09/2005
Martins, acho que você esta enganado. De acordo com o código mostrado, ele teria que executar o comando Delete até que o arquivo chegasse ao fim. Somente depois que saisse do while o close seria executado. O código abaixo teria que funcionar sem o begin..end.
BD_CONT_REC.First; //Vai para o ínicio da tabela. while not BD_CONT_REC.Eof do //enquanto não chegar ao fim da tab. BD_CONT_REC.Delete; //delete os registros, não precisa do next Ok! Close; // Feche o formulário.
[b:93696ec649]RJun[/b:93696ec649] assumo meu ledo engano, tb utilizei assim, quando não utilizava ainda [b:93696ec649]SQL[/b:93696ec649], agora faço tudo por [b:93696ec649]SQL[/b:93696ec649], mas como ele disse q não estava funcionando, só acrescentei o begin.. end, mas o código.
while not BD_CONT_REC.Eof do BD_CONT_REC.Delete; Close;
funciona aqui perfeitamente, com ou sem begin... end, então passei uma segunda alternativa para o colega, agora pq não deu certo da forma acima, não sei mesmo.
T+
GOSTEI 0
Gigatel
17/09/2005
aí galera...eu fiz assim..
até ontem o código funcionava e do nada parou... ????será que é o que...veja o código completo..
Alguém pode dar uma analizada...o curioso é que pararei de trabalhar nesta função por acreditar ter resolvido o problema...
while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close;
até ontem o código funcionava e do nada parou... ????será que é o que...veja o código completo..
unit Unit33;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, Wwdbigrd, Wwdbgrid, DBCtrls, Mask,
XPMenu, DB, IBCustomDataSet, IBUpdateSQL, IBQuery;
type
T_FORM_CR_MS = class(TForm)
Image1: TImage;
GroupBox1: TGroupBox;
Label21: TLabel;
XPMenu1: TXPMenu;
Button1: TButton;
BD_CONT_REC: TIBQuery;
BD_CONT_RECSelected: TIntegerField;
BD_CONT_RECGS_COR_CODIGO: TIntegerField;
BD_CONT_RECGS_COR_NOME: TIBStringField;
BD_CONT_RECGS_COR_DESCRICAO: TIBStringField;
BD_CONT_RECGS_COR_DATA_VENC: TIBStringField;
BD_CONT_RECGS_COR_VALOR_PARCELA: TIBStringField;
BD_CONT_RECGS_COR_DATRASO: TFloatField;
BD_CONT_RECGS_COR_SELECT: TIntegerField;
BD_CONT_RECGS_COR_VALOR_ENT: TIBStringField;
BD_CONT_RECGS_COR_END: TIBStringField;
BD_CONT_RECGS_COR_COMP: TIBStringField;
BD_CONT_RECGS_COR_BAIRRO: TIBStringField;
BD_CONT_RECGS_COR_CIDADE: TIBStringField;
BD_CONT_RECGS_COR_TEL_01: TIBStringField;
BD_CONT_RECGS_COR_TEL_02: TIBStringField;
BD_CONT_RECGS_COR_TEL_03: TIBStringField;
BD_CONT_RECGS_COR_TEL_04: TIBStringField;
BD_CONT_RECGS_COR_CPF_CNPJ: TIBStringField;
BD_CONT_RECGS_COR_UF: TIBStringField;
BD_CONT_RECGS_COR_CEP: TIBStringField;
BD_CONT_RECGS_COR_N_PARCELAS: TIBStringField;
BD_CONT_RECGS_COR_DATA_CAD: TIBStringField;
BD_CONT_RECGS_COR_CODACES: TIntegerField;
BD_CONT_RECGS_COR_CODPROD: TIBStringField;
BD_CONT_RECGS_COR_VALOR_TOTAL: TIBStringField;
BD_CONT_RECGS_COR_VENDEDOR: TIBStringField;
BD_CONT_RECGS_COR_CODACESPAR: TIntegerField;
BD_CONT_RECGS_COR_CODCLI: TIntegerField;
IBUP_CONT_REC: TIBUpdateSQL;
DS_CONT_REC: TDataSource;
wwDBGrid1: TwwDBGrid;
Label1: TLabel;
Label3: TLabel;
Label2: TLabel;
Edit6: TEdit;
Edit2: TEdit;
Edit7: TEdit;
Edit1: TEdit;
Edit8: TEdit;
Label4: TLabel;
Label5: TLabel;
Edit3: TEdit;
Edit5: TEdit;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
Button2: TButton;
BD_ARQUIVO_MORTO_FIN: TIBQuery;
BD_ARQUIVO_MORTO_FINGS_ARF_CODIGO: TIntegerField;
BD_ARQUIVO_MORTO_FINGS_ARF_NOME: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_CPF_CNPJ: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_N_PARCELAS: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_VENC: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_CAD: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_CODACES: TIntegerField;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_BAX: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_DESCRICAO: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_CODPROD: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_TOTAL: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_PARCELA: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_ENT: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_VENDEDOR: TIBStringField;
BD_ARQUIVO_MORTO_FINGS_ARF_CODCLI: TIntegerField;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_PAGO: TIBStringField;
IBUP_ARQUIVO_MORTO_FIN: TIBUpdateSQL;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure Edit6Exit(Sender: TObject);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure wwDBGrid2KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BD_CONT_RECCalcFields(DataSet: TDataSet);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BD_CONT_RECAfterPost(DataSet: TDataSet);
procedure BD_CONT_RECBeforeDelete(DataSet: TDataSet);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
_FORM_CR_MS: T_FORM_CR_MS;
implementation
uses Unit18, Unit21, Unit40;
{$R *.dfm}
procedure T_FORM_CR_MS.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not((ssctrl in shift) or (ssalt in shift) or (ssshift in shift)) then begin
begin
if key=vk_f2 then begin
end
else
if key=vk_f3 then begin
end
else
if key=vk_f4 then begin
end
else
if key=vk_f5 then begin
end
else
if key=vk_f8 then begin
end
else
if key=vk_escape then begin
close;
end;
end;
end;
end;
procedure T_FORM_CR_MS.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked = true then
begin
edit7.Visible := true;
edit7.enabled := true;
edit7.text := ´0´;
edit7.SetFocus;
end
else
edit7.Visible := false;
edit2.text := ´0,00´;
end;
procedure T_FORM_CR_MS.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked = true then
begin
edit8.Visible := true;
edit8.text := ´0´;
edit8.SetFocus;
end
else
edit8.Visible := false;
edit1.text := ´0,00´;
end;
procedure T_FORM_CR_MS.Edit6Exit(Sender: TObject);
begin
edit6.Text:= format(´¬n´, [strtofloat(edit6.Text)]);
end;
procedure T_FORM_CR_MS.Edit6KeyPress(Sender: TObject;
var Key: Char);
begin
if not ( Key In [´0´..´9´,8] ) then
Abort;
If Key = 13 Then
Begin
SelectNext(Sender as tWinControl, True, True );
Key := 0;
end;
end;
procedure T_FORM_CR_MS.wwDBGrid2KeyPress(Sender: TObject;
var Key: Char);
begin
If Key = 13 Then
Begin
SelectNext(Sender as tWinControl, True, True );
Key := 0;
end;
end;
procedure T_FORM_CR_MS.Button1Click(Sender: TObject);
begin
Close;
end;
procedure T_FORM_CR_MS.FormCreate(Sender: TObject);
begin
BD_CONT_REC.Close;
BD_CONT_REC.Open;
BD_ARQUIVO_MORTO_FIN.Close;
BD_ARQUIVO_MORTO_FIN.Open;
end;
procedure T_FORM_CR_MS.BD_CONT_RECCalcFields(DataSet: TDataSet);
var
Atraso: Double;
begin
Atraso:= Date - BD_CONT_RECGS_COR_DATA_VENC.AsDateTime;
if Atraso > 0 then
BD_CONT_RECGS_COR_DATRASO.AsFloat := Atraso
else
BD_CONT_RECGS_COR_DATRASO.AsFloat := 0;
end;
procedure T_FORM_CR_MS.Button2Click(Sender: TObject);
begin
while not BD_CONT_REC.Eof do
begin
BD_CONT_REC.Delete;
end;
Close;
end;
procedure T_FORM_CR_MS.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := Cafree;
end;
procedure T_FORM_CR_MS.BD_CONT_RECAfterPost(DataSet: TDataSet);
begin
if DM1.IBTransaction1.InTransaction then
DM1.IBTransaction1.CommitRetaining;
end;
procedure T_FORM_CR_MS.BD_CONT_RECBeforeDelete(DataSet: TDataSet);
begin
BD_ARQUIVO_MORTO_FIN.Close;
BD_ARQUIVO_MORTO_FIN.Open;
BD_ARQUIVO_MORTO_FIN.Insert;
BD_ARQUIVO_MORTO_FINGS_ARF_DESCRICAO.Value := BD_CONT_RECGS_COR_DESCRICAO.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_NOME.Value := BD_CONT_RECGS_COR_NOME.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_CPF_CNPJ.Value := BD_CONT_RECGS_COR_CPF_CNPJ.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_CODPROD.Value := BD_CONT_RECGS_COR_CODPROD.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_N_PARCELAS.Value := BD_CONT_RECGS_COR_N_PARCELAS.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_VENC.Value := BD_CONT_RECGS_COR_DATA_VENC.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_CAD.Value := BD_CONT_RECGS_COR_DATA_CAD.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_CODACES.Value := BD_CONT_RECGS_COR_CODACESPAR.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_DATA_BAX.Value := FormatDateTime(´dd/mm/yyyy´,Date);
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_TOTAL.Value := BD_CONT_RECGS_COR_VALOR_TOTAL.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_PARCELA.Value := BD_CONT_RECGS_COR_VALOR_PARCELA.Value;
BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_ENT.Value := BD_CONT_RECGS_COR_VALOR_ENT.Value;
// BD_ARQUIVO_MORTO_FINGS_ARF_VALOR_PAGO.Value := Edit2.Text;
BD_ARQUIVO_MORTO_FINGS_ARF_VENDEDOR.Value := BD_CONT_RECGS_COR_VENDEDOR.Value;
BD_ARQUIVO_MORTO_FIN.Post;
if DM1.IBTransaction1.InTransaction then
DM1.IBTransaction1.CommitRetaining;
end;
procedure T_FORM_CR_MS.FormShow(Sender: TObject);
Var
i,r: integer;
n: real;
begin
n:= 0;
r:= BD_CONT_REC.RecordCount;
BD_CONT_REC.First;
for i:=1 to r do
begin
n:= n + BD_CONT_RECGS_COR_VALOR_PARCELA.asfloat;
BD_CONT_REC.Next;
end;
Edit6.Text:= formatfloat(´R$ ,#,,0.00´,n);
end;
end.
Alguém pode dar uma analizada...o curioso é que pararei de trabalhar nesta função por acreditar ter resolvido o problema...
GOSTEI 0
Martins
17/09/2005
Como assim parou?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:3a9d62609b]Begin .. end[/b:3a9d62609b], onde realmente está o erro?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:3a9d62609b]Begin .. end[/b:3a9d62609b], onde realmente está o erro?
GOSTEI 0
Martins
17/09/2005
Como assim parou?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:ebaead3e64]Begin .. end[/b:ebaead3e64], onde realmente está o erro?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:ebaead3e64]Begin .. end[/b:ebaead3e64], onde realmente está o erro?
GOSTEI 0
Gigatel
17/09/2005
Como assim parou?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:6be7d45946]Begin .. end[/b:6be7d45946], onde realmente está o erro?
Papo federau mesmo...fui usar pra valer o programa..cadastreis novos dados, desta vez o defenitivo...fui excluir os testes nenhum saiu...
GOSTEI 0
Gigatel
17/09/2005
estou usando esta fumção para chamar o código...
pode ter algo aki...más olhei e nada...
var
I : integer;
Titulos : string;
begin
if wwDBGrid1.SelectedList.Count = 0 then
ShowMessage(´Selecione ao menos um registro´)
else
begin
for I := 0 to wwDBGrid1.SelectedList.Count - 1 do
begin
BD_CONT_REC.GotoBookmark(wwDBGrid1.SelectedList.items[i]);
Titulos := Titulos + QuotedStr(BD_CONT_RECGS_COR_CODIGO.asstring);
if I < (wwDBGrid1.SelectedList.Count - 1) then
Titulos := Titulos + ´,´;
end;
_FORM_CR_MS := T_FORM_CR_MS.Create(Self);
_FORM_CR_MS.BD_CONT_REC.close;
_FORM_CR_MS.BD_CONT_REC.SQL.Text := ´SELECT * FROM CONTAS_RECEBER´ +
´ WHERE GS_COR_CODIGO IN ( ´ + Titulos + ´)´;
_FORM_CR_MS.BD_CONT_REC.Open;
_FORM_CR_MS.ShowModal;
BD_CONT_REC.Close;
BD_CONT_REC.open;
wwDBGrid1.UnselectAll;
end;
pode ter algo aki...más olhei e nada...
GOSTEI 0
Martins
17/09/2005
[quote:4b285e539c=´Martins´]Como assim parou?
vou ver se tenho tempo para olhar todo esse código... Vc já tentou remover o [b:4b285e539c]Begin .. end[/b:4b285e539c], onde realmente está o erro?
Papo federau mesmo...fui usar pra valer o programa..cadastreis novos dados, desta vez o defenitivo...fui excluir os testes nenhum saiu...[/quote:4b285e539c]
É só a exclusão q tá com problema? Vc já tentou reescrever a instrução sem begin end? Pq cara tá sinistro esse teu BD, não quer perder os dados não, hehe!!!
Não dá nenhum erro? coloca um ShowMessage lá para ver o q tá havendo cara.
GOSTEI 0
Gigatel
17/09/2005
indentifiquei a possível falha...Quando o registro é vizualizado o ponteiro do grid fica no ultimo registro ( provavelmente por causa do cáuculo ) aí posiciono para p primeiro registro aí ele faz as exclusões...aí coloquei um First..simplesmete TRAVA o aplicativo...hehehehe doideira...e de fato depois que coloquei a função de cálculos eu num testei depois a função num tinha reparado...más é só dá uma olhada no código acima.. acho que agora tá fácil de resolver..
GOSTEI 0
Gigatel
17/09/2005
Confirmado o bug se apresenta depois da execução desta função..
no evento ONSHOW coloquei ..
Para poder realizar o cálculo dos valores no grid...más eu presciso desta função funcionando..talvez alguma outra forma...vlw..t+
no evento ONSHOW coloquei ..
Var i,r: integer; n: real; begin // n:= 0; // r:= BD_CONT_REC.RecordCount; // BD_CONT_REC.First; // for i:=1 to r do // begin // n:= n + BD_CONT_RECGS_COR_VALOR_PARCELA.asfloat; // BD_CONT_REC.Next; // end; // Edit6.Text:= formatfloat(´R$ ,#,,0.00´,n);
Para poder realizar o cálculo dos valores no grid...más eu presciso desta função funcionando..talvez alguma outra forma...vlw..t+
GOSTEI 0
Isabelct
17/09/2005
aí galera...eu fiz assim..
procedure T_FORM_CR_MS.Button2Click(Sender: TObject); begin while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close; end;
Qual o componente de acesso? Me parece que está faltando um commit aí...
Pelo seu código, parece ser IBX. Tenta colocar a instrução
BD_CONT_REC.Transaction.CommitRettaining;
GOSTEI 0
Gigatel
17/09/2005
[quote:8f575d29ba=´Gigatel´]aí galera...eu fiz assim..
procedure T_FORM_CR_MS.Button2Click(Sender: TObject); begin while not BD_CONT_REC.Eof do begin BD_CONT_REC.Delete; end; Close; end;
Qual o componente de acesso? Me parece que está faltando um commit aí...
Pelo seu código, parece ser IBX. Tenta colocar a instrução
BD_CONT_REC.Transaction.CommitRettaining;
Oi blz ?..para evitar de ficar colocando esta função acima eu coloquei ele no BeofreDelete, para ficar mais fácil..más meu problema agora esta mesmo na função..
Var i,r: integer; n: real; begin // n:= 0; // r:= BD_CONT_REC.RecordCount; // BD_CONT_REC.First; // for i:=1 to r do // begin // n:= n + BD_CONT_RECGS_COR_VALOR_PARCELA.asfloat; // BD_CONT_REC.Next; // end; // Edit6.Text:= formatfloat(´R$ ,#,,0.00´,n);
depois que executo este código é q apresenta o bug... vlw pela ajuda..
GOSTEI 0
Rjun
17/09/2005
Você ja tentou usar um [b:ad46f633bf]while not eof[/b:ad46f633bf] em vez de um [b:ad46f633bf]for[/b:ad46f633bf] pelo número de registros?
GOSTEI 0
Gigatel
17/09/2005
Você ja tentou usar um [b:26e5c0fd70]while not eof[/b:26e5c0fd70] em vez de um [b:26e5c0fd70]for[/b:26e5c0fd70] pelo número de registros?
De onde, da função de excluir ou somar .
GOSTEI 0
Gigatel
17/09/2005
Talvez tenha outra forma de excluir sem prescisar usar um loop....
GOSTEI 0
Rjun
17/09/2005
Eu quis dizer para usar o [b:e9fb9ae0ea]while[/b:e9fb9ae0ea] nesse momento:
var n: double; begin n:= 0; BD_CONT_REC.First; while not BD_CONT_REC.Eof do begin n := n + BD_CONT_REC.FieldByName(´GS_COR_VALOR_PARCELA´).asfloat; BD_CONT_REC.Next; end; Edit6.Text := FormatFloat(´R$ ,#,,0.00´,n); end;
GOSTEI 0
Gigatel
17/09/2005
Não deu certo...num dá erro, más tbm num exclui...
GOSTEI 0
Rjun
17/09/2005
Coloque um First no seu código de exclusão.
procedure T_FORM_CR_MS.Button2Click(Sender: TObject); begin BD_CONT_REC.First; while not BD_CONT_REC.Eof do BD_CONT_REC.Delete; Close; end;
GOSTEI 0
Gigatel
17/09/2005
Rjun Valeu.. fiz uma pequena modificação e deu certo ( aparentimente )..vlw..t+
é isso aí..outra coisa o q acontece se eu colocar um Commit no evento afterdelete ?
Var n: double; begin n:= 0; BD_CONT_REC.First; while not BD_CONT_REC.Eof do begin n := n + BD_CONT_REC.FieldByName(´GS_COR_VALOR_PARCELA´).asfloat; BD_CONT_REC.Next; end; BD_CONT_REC.First; Edit6.Text := FormatFloat(´R$ ,#,,0.00´,n);
é isso aí..outra coisa o q acontece se eu colocar um Commit no evento afterdelete ?
GOSTEI 0
Isabelct
17/09/2005
Oi blz ?..para evitar de ficar colocando esta função acima eu coloquei ele no BeofreDelete, para ficar mais fácil..más meu problema agora esta mesmo na função..
No beforeDelete não resolve. Os eventos ´Before´ acontecem antes. Teria que ser no AfterDelete, ou seja, depois de deletar. Daí sim daria o mesmo efeito.
Mas pensando a nivel de performance isso é ruim, pois você encerraria a transação a cada registro apagado e isso te traria dois problemas: 1) O processo fica mais lento; 2) Se a exclusão der erro, os registros já excluidos não podem mais ser recuperados.
Por isso mantenho minha opinião inicial de que você deveria colocar a chamada do Commit após o laço while que fará a deleção dos registros.
GOSTEI 0
Gigatel
17/09/2005
[quote:7816f9d39b=´Gigatel´]
Oi blz ?..para evitar de ficar colocando esta função acima eu coloquei ele no BeofreDelete, para ficar mais fácil..más meu problema agora esta mesmo na função..
No beforeDelete não resolve. Os eventos ´Before´ acontecem antes. Teria que ser no AfterDelete, ou seja, depois de deletar. Daí sim daria o mesmo efeito.
Mas pensando a nivel de performance isso é ruim, pois você encerraria a transação a cada registro apagado e isso te traria dois problemas: 1) O processo fica mais lento; 2) Se a exclusão der erro, os registros já excluidos não podem mais ser recuperados.
Blz..vou testar, e sua idéia é boa..vou analiza-la..vlw..
Por isso mantenho minha opinião inicial de que você deveria colocar a chamada do Commit após o laço while que fará a deleção dos registros.[/quote:7816f9d39b]
GOSTEI 0
Daniel_mc
17/09/2005
Olha só pessoal, eu costumo utilizar isto. O erro é que esta faltando uma linha:
O que acontece é que a função EOF verifica se chegou ao fim da tabela mas não perorre ela, ela deixa esse trabalho por sua conta.
BD_CONT_REC.First; while not BD_CONT_REC.Eof do begin BD_CONT_REC.First; //Posiciona na primira lnha novamente BD_CONT_REC.Delete; end; Close;
O que acontece é que a função EOF verifica se chegou ao fim da tabela mas não perorre ela, ela deixa esse trabalho por sua conta.
GOSTEI 0