Delphi Can
Alerter devreye girmesi girmemesi - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Alerter devreye girmesi girmemesi (/showthread.php?tid=7908)



Alerter devreye girmesi girmemesi - Kral - 22-10-2024

Selemlar,

FDEventAlerter kullanarak iki uygulama arasında bilgi alıyorum. Fakat garip bir sıkıntı var.

İki uygulamada  if OnlineOK then ve  if OfflineOK then doğru çalışırken  if CloseOK then sadece bir uygulamada devreye giriyor, diğer uygulama tepki vermiyor.
Bu sorun neden kaynaklı olabilir?


procedure TMainForm.FDEventAlerterTimeout(Sender: TObject);
var
  FDQ, uFDQ: TFDQuery;
  AlertId: Integer;
  OnlineOK, OfflineOK, ClosedOK: Boolean;
begin
  if SameText(AlertMessage, 'Message!') then
  begin
    FDQ := TFDQuery.Create(nil);
    FDQ.Connection := FDConnection;
    uFDQ := TFDQuery.Create(nil);
    uFDQ.Connection := FDConnection;
    try
      FDQ.Active := False;
      FDQ.Close;
      FDQ.SQL.Clear;
      FDQ.SQL.Text := 'SELECT * FROM USERS WHERE USERNAME<>:USER AND OPERATION IS NOT NULL AND TRIM(OPERATION) <> '''';';
      FDQ.ParamByName('USER').AsString := Users; // Mevcut kullanıcı hariç
      FDQ.Prepared := True;
      FDQ.Open;
      while not FDQ.Eof do
      begin
        AlertId := FDQ.FieldByName('ID').AsInteger;
        OnlineOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Online');
        OfflineOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Offline');
        ClosedOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Closed');

        if OnlineOK then
          ShowMessage(FDQ.FieldByName('USERNAME').AsString + ' Online!');


        if OfflineOK then
          ShowMessage(FDQ.FieldByName('USERNAME').AsString + ' Offline!');


        if ClosedOK then
          ShowMessage(AlertId.ToString + ' Close!'); // AYNI ANDA ÇALIŞAN 2 UYGULAMADAN SADECE BİRİ YAKALIYOR DİĞER YAKALAMIYOR


        FDQ.Next;
      end;
      uFDQ.Active := False;
      uFDQ.Close;
      uFDQ.SQL.Clear;
      uFDQ.SQL.Text := 'UPDATE USERS SET OPERATION=:OPER';
      uFDQ.ParamByName('OPER').AsString := EmptyStr; 
      uFDQ.ExecSQL;
    finally
      FDQ.Free;
      uFDQ.Free;
      AlertMessage := 'No!';
    end;
  end;
end;



Cvp: Alerter devreye girmesi girmemesi - Kral - 23-10-2024

(22-10-2024, Saat: 23:15)Kral Adlı Kullanıcıdan Alıntı: Selemlar,

FDEventAlerter kullanarak iki uygulama arasında bilgi alıyorum. Fakat garip bir sıkıntı var.

İki uygulamada  if OnlineOK then ve  if OfflineOK then doğru çalışırken  if CloseOK then sadece bir uygulamada devreye giriyor, diğer uygulama tepki vermiyor.
Bu sorun neden kaynaklı olabilir?


procedure TMainForm.FDEventAlerterTimeout(Sender: TObject);
var
  FDQ, uFDQ: TFDQuery;
  AlertId: Integer;
  OnlineOK, OfflineOK, ClosedOK: Boolean;
begin
  if SameText(AlertMessage, 'Message!') then
  begin
    FDQ := TFDQuery.Create(nil);
    FDQ.Connection := FDConnection;
    uFDQ := TFDQuery.Create(nil);
    uFDQ.Connection := FDConnection;
    try
      FDQ.Active := False;
      FDQ.Close;
      FDQ.SQL.Clear;
      FDQ.SQL.Text := 'SELECT * FROM USERS WHERE USERNAME<>:USER AND OPERATION IS NOT NULL AND TRIM(OPERATION) <> '''';';
      FDQ.ParamByName('USER').AsString := Users; // Mevcut kullanıcı hariç
      FDQ.Prepared := True;
      FDQ.Open;
      while not FDQ.Eof do
      begin
        AlertId := FDQ.FieldByName('ID').AsInteger;
        OnlineOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Online');
        OfflineOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Offline');
        ClosedOK := SameText(FDQ.FieldByName('OPERATION').AsString, 'Closed');

        if OnlineOK then
          ShowMessage(FDQ.FieldByName('USERNAME').AsString + ' Online!');


        if OfflineOK then
          ShowMessage(FDQ.FieldByName('USERNAME').AsString + ' Offline!');


        if ClosedOK then
          ShowMessage(AlertId.ToString + ' Close!'); // AYNI ANDA ÇALIŞAN 2 UYGULAMADAN SADECE BİRİ YAKALIYOR DİĞER YAKALAMIYOR


        FDQ.Next;
      end;
      uFDQ.Active := False;
      uFDQ.Close;
      uFDQ.SQL.Clear;
      uFDQ.SQL.Text := 'UPDATE USERS SET OPERATION=:OPER';
      uFDQ.ParamByName('OPER').AsString := EmptyStr; 
      uFDQ.ExecSQL;
    finally
      FDQ.Free;
      uFDQ.Free;
      AlertMessage := 'No!';
    end;
  end;
end;


FDQ.SQL.Add('SELECT * FROM USERS WHERE OPERATION IS NOT NULL AND TRIM(OPERATION) <> '''';');
SORUNU BU ŞEKİLDE ÇÖDÜM