Tym kodem wysyłam pocztę z rekordów biorąc emaile, tematy i treść:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled:=False;
Button5.Enabled:=False;
Button8.Enabled:=False;
Statusbar1.Panels[0].Text:='';
Label3.Caption:= IntToStr(IBQuery1.RecordCount);
Form1.jvProgressbar1.Position:=0;
Form1.jvProgressbar1.Max:=STrToInt(Label3.Caption);
idMessage1.CharSet:='charset="windows-1250"'; //ustawiamy kodowanie
idMessage1.ContentTransferEncoding:='8bit'; // przesyłanie 8bitowe
idMessage1.ContentType:='text/html'; // przesyłamy tekst
idMessage1.clear; //CZYŚCIMY
idMessage1.from.name := 'xxx'; //NAZWA NADAWCY
idMessage1.from.address := 'xxx'; //ADRES NADAWCY
idMessage1.recipients.EMailAddresses:=IBQuery1.FieldByName('EMAIL').asString+' ; '; //ADRESAT MAILA
idSMTP1.UserName := 'xxx'; //DANE DO POŁACZENIA Z SERWEREM POCZTOWYM (TUTAJ JA MAM ADRES IP)
idSMTP1.Host := 'xxx';
idSMTP1.Password := 'xxx';
idSMTP1.AuthenticationType:=atNone; //wpisz gdy serwer nie wymaga uwierzytelnienia
idSMTP1.AuthenticationType:=atLogin; //wpisz gdy serwer wymaga uwierzytelnienia (zalecane)
IBquery1.first;
while not IBQuery1.eof do
begin
idMessage1.recipients.EMailAddresses:=IBQuery1.FieldByName('email').asString; //ADRESAT MAILA
idmessage1.Body.Clear;
idmessage1.Body.Add(IBQuery1.FieldByName('TRESC').asString+#13+#13+jvRichedit1.Lines.Text); //TREŚĆ MAILA
idMessage1.subject:=IBQuery1.FieldByName('TEMAT').asString; //TEMAT MAILA
Edit2.Text:=IBQuery1.Fields[0].AsString;
Listbox1.Items.Add(IBQuery1.Fields[0].AsString);
Form1.jvProgressbar1.Position:=Form1.jvProgressbar1.Position+1;
Label3.Caption:=IntToStr(Form1.jvProgressbar1.Position)+' / '+IntToStr(Form1.jvProgressbar1.Max);
try
begin
idSMTP1.connect;
idSMTP1.Send(idmessage1);
Application.ProcessMessages; //to dodaj
EDIT8.Text:=IntToStr(IBQuery1.RecordCount);
end;
finally
idSMTP1.disconnect;
end;
IBQuery1.Next;
end;
Button6.Click//edytuj kol WYSLANE NA "T"
end;
Button6 do edycji rekordów (kolumna WYSLANE), które wysłałem
Tym kodem edytuję tą kolumnę, ale chodzi mi aby tylko te rekordy edytował które wysłałem np. o dzisiejszej dacie pofiltrowanej:
procedure TForm1.Button6Click(Sender: TObject);
var
minim, maxym: string;
begin
//min ID
with ibquery1, sql do
begin
Close;
Clear;
Add('SELECT MIN (id_klienta) FROM KLIENCI');
Open;
minim:=IBQuery1.Fields[0].AsString;
end;
//max ID
with ibquery1, sql do
begin
Close;
Clear;
Add('SELECT MAX (id_klienta) FROM KLIENCI');
Open;
maxym:=IBQuery1.Fields[0].AsString;
end;
// Button4.Click;//cala tabela
//EDYCJA KOLUMNY WYSLANE
with IBQuery1, SQL do
begin
Close;
Clear;
Add('UPDATE KLIENCI SET WYSLANE=:WYSLANE WHERE ID_KLIENTA BETWEEN '+minim+ ' AND '+maxym);
// Add('UPDATE KLIENCI SET WYSLANE=:WYSLANE WHERE TRESC_DATA = '+DateToStr(Date));
ParamByName('WYSLANE').AsString := 'N';
ExecSQL;
IBTransaction1.Commit;
end;
//Button4.Click; //odświez
end;
Rozumiem że MIN i MAX wartości on pobiera z całej tabeli, nie z rekordów które pofiltrowałem, a właśnei tak chcę zrobić, bo wtedy mi całą tabelę edytuje (kolumna WYSLANE).
Jak to wykonać? próbowałem dać do filtru jeszcze datę, ale błąd wyskakuje.
Debugger Exception Notification
Project Project1.exe raised exception class EIBInterBaseError with message 'expression evaluation not supported'. Process stopped. Use Step or Run to continue.
OK Help