Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Alerter devreye girmesi girmemesi
#1
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;
Cevapla
#2
(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
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Döngüye girmemesi Husv 2 750 14-02-2023, Saat: 15:56
Son Yorum: Husv
  Uygulamanın otomatik olarak devreye girmesi brs 19 22.297 13-02-2018, Saat: 09:38
Son Yorum: gonulali



Konuyu Okuyanlar: 1 Ziyaretçi