Hallo...
Mein letzter Strohhalm...euch zu fragen.
SOLL:
Die Datenbank "soll" ein Event (pro Tabelle) auslösen. Der Client soll dann seine Datenmenge aktualisieren können.
IST:
Ich habe alles ausprobiert...es wird kein Event ausgelöst.
Infos:
http://docwiki.embarcadero.com/RADSt...ngen_(FireDAC)
http://docwiki.embarcadero.com/RADSt...ngen_(FireDAC)
Beispiel ausprobiert:
https://stackoverflow.com/questions/...ql-server-2012
Ich habe mich für die Variante "_FD_EVENTS UPDATE notification" entschieden.
1. Broker ist on
2. _FD_EVENTS Tablelle wurde erstellt
3. 'evtUsers' Event wurde als Datensatz in der Tabelle angelegt (über Register der Komponente)
(Die Komponente versucht jedesmal den Datensatz anzulegen -> stille
Exception bei Vorhandensein...macht Spaß im Debug.
)
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse EMSSQLNativeException mit der Meldung '[FireDAC][Phys][
ODBC][Microsoft][
SQL Server Native Client 11.0][
SQL Server]Verletzung der PRIMARY KEY-Einschränkung "PK___FD_EVEN__737584F7CB96DC61". Ein doppelter Schlüssel kann in das dbo._FD_EVENTS-Objekt nicht eingefügt werden. Der doppelte Schlüsselwert ist (evtUsers).' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse EMSSQLNativeException mit der Meldung '[FireDAC][Phys][
ODBC][Microsoft][
SQL Server Native Client 11.0]OZum Festlegen dieses Attributs müssen bestimmte andere Attribute festgelegt werden. Einstellung des Attributs wird ignoriert.' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
4. Signal function der Komponente erhöht den Wert des Values
5. TFDPhysMSSQLDriverLink wird der gebraucht?
6. Beim Beenden oder Close kommt eine stille
Exception bei der Freigabe des Threads der Komponente.
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse $C0000005 mit der Meldung '
access violation at 0x004c893c: read of address 0x0000003c' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Delphi-Quellcode:
procedure TFDPhysMSSQLEventAlerter.InternalAbortJob;
begin
FWaitThread.Terminate; // <- hier
FWaitCommand.AbortJob(True);
end;
Ergebnis:
kein Event wird ausgelöst.
Was habe ich vergessen? Was ist falsch?
Wie kommt denn der Broker von
MSSQL ins Spiel? Der Alerter braucht doch nur im Task den Wert des Values vergleichen und das Event auslösen..oder?
Testcode:
Delphi-Quellcode:
procedure TForm1.ale1Alert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
qry1.Refresh;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
con1.Connected := True;
qry1.SQL.Text := 'select * from Users';
qry1.Open;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
con1.Close;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
ale1.Signal('evtUsers', 1);
end;
Delphi-Quellcode:
object Form1: TForm1
Left = 0
Top = 0
Caption = '
Form1'
ClientHeight = 511
ClientWidth = 933
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.
Name = '
Tahoma'
Font.Style = []
OldCreateOrder = False
DesignSize = (
933
511)
PixelsPerInch = 96
TextHeight = 13
object grd1: TDBGrid
Left = 32
Top = 88
Width = 889
Height = 401
Anchors = [akLeft, akTop, akRight, akBottom]
DataSource = ds1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.
Name = '
Tahoma'
TitleFont.Style = []
end
object btn1: TButton
Left = 32
Top = 40
Width = 75
Height = 25
Caption = '
Open'
TabOrder = 1
OnClick = btn1Click
end
object btn2: TButton
Left = 113
Top = 40
Width = 75
Height = 25
Caption = '
Close'
TabOrder = 2
OnClick = btn2Click
end
object btn3: TButton
Left = 264
Top = 40
Width = 75
Height = 25
Caption = '
btn3'
TabOrder = 3
OnClick = btn3Click
end
object con1: TFDConnection
Params.Strings = (
'
DriverID=MSSQL'
'
MARS=No'
'
Server=XXX'
'
User_Name=Blubb'
'
Password=Test'
'
Database=Bla')
Connected = True
LoginPrompt = False
Left = 824
Top = 24
end
object qry1: TFDQuery
Connection = con1
Left = 32
Top = 200
end
object ds1: TDataSource
DataSet = qry1
Left = 80
Top = 200
end
object ale1: TFDEventAlerter
Connection = con1
Names.Strings = (
'
evtUsers')
SubscriptionName = '
Events'
Options.AutoRegister = True
Options.MergeData = dmNone
Options.AutoRefresh = afNone
OnAlert = ale1Alert
Left = 824
Top = 80
end
object lnk1: TFDPhysMSSQLDriverLink
Left = 760
Top = 24
end
end