Delphi Can

Orjinalini görmek için tıklayınız: Alerter devreye girmesi girmemesi
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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;
(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