![]() |
Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDAC
FireDAC NO_SQL_DATA error
Liste der Anhänge anzeigen (Anzahl: 2)
Hallöle...:?
Ich scheitere mal wieder and den einfachsten Sachen. :? Projekt Datatabase Events: 1. Trigger erstellt
Code:
2. Trigger getestet - Fehlerfrei -> mit jedem Aufruf eine neue GUID
create table _Events
( ID int IDENTITY(1,1) NOT NULL, EventType int NOT NULL, EventName nvarchar(30) NOT NULL, EventCurrentGUID uniqueidentifier NOT NULL, CONSTRAINT Events_pk PRIMARY KEY CLUSTERED (ID ASC) ) create index ixEventType on _Events (EventType) GO /* Events */ insert into _Events (EventType, EventName, EventCurrentGUID) values (0, 'Complete', NEWID()) GO /* Trigger*/ create trigger TR_Complete on Complete for insert, update, delete as begin update _Events set EventCurrentGUID = NEWID() where EventType = 0 end GO Problem: 1. Tabellen Änderung (Tabelle XY) über externen Editor (DBeaver) -> Event wird ausgeführt...ohne Fehler 8-) 2. Anwendung mit FireDAC: - :shock: Jedes Post der Tabelle XY über Query resultiert im Fehler! (Bild 1) - Fortsetzen -> Fehler (Bild 2) Was ich probiert habe: -> Trigger aus der Tabelle XY raus -> kein Fehler mehr! :evil: -> Beide Tabellen XY und _Events haben einen Primary Key! :roll: Jetzt ist mein Latein am Ende...ich hoffe auf eine Erklärung. :wink: PS: Die Tante ist nicht wirklich gesprächig. :? z.B.: ![]() ...das sieht nicht nach der Problelösung aus, sondern am Herumdoktern an den Symthomen. :? Danke... Nachtrag: Morgen werde ich das mal probieren: ![]() Update in SP verlagern und NOCOUNT_OFF ...schaun wir mal. :roll: Update: SET NOCOUNT ON im Trigger scheint es gebracht zu haben. Keine Meldung mehr. Jetzt muß ich noch testen ob das für jeden Trigger gilt oder global. Alternativ SP. |
AW: FireDAC NO_SQL_DATA error
Du hast es ja schon im Griff, also nur mal so aus der Ferne ein Gedanke:
Wenn man Trigger macht, die auf Updates einer Tabelle reagieren und als (re)Aktion im Trigger ein Update auf die gleiche Tabelle macht, ist das nicht endlose Rekursion? Also käme in Betracht, den Trigger nur bei Insert zu zünden, das Update, das daraus resultiert, bliebe folgenlos (aus Sicht des Triggers) Gilt es aber auch für Updates zu feueren, dann vielleicht etwas selektiver, über Vergleiche von old und new Values der Felder, explizit ausgenommen die GUID, die ja offenbar das Ergebnis der Aktion sein soll und nicht der Treiber. Dann gibt es gefühlt auch noch irgendwelche Optionen im Bereich Transaktionen, vor allem Client regulierte Transaktionen. Wenn das Heilmittel oder Rezept eine (gekapselte) SP ist, bringt das u.a. eine per Definition abgeschlossene Transaktion, wo niemand reinfuscht- und wo dann auch das rekursive Trigger Problem nicht auftritt. P.S.: Der Trigger geht gar nicht auf _Event, sondern auf Complete. Also Blödsinn, was ich geschrieben habe |
AW: FireDAC NO_SQL_DATA error
Ich hab mal Erkenntnis und Sachlage ignoriert und ein falsches Script laufen lassen. Interessante Ergebnisse im unteren Drittel.
![]() |
AW: FireDAC NO_SQL_DATA error
Moin...8-)
Zitat:
Code:
create table _Events
( ID int IDENTITY(1,1) NOT NULL, EventType int NOT NULL, EventName nvarchar(30) NOT NULL, EventCurrentGUID uniqueidentifier NOT NULL, CONSTRAINT Events_pk PRIMARY KEY CLUSTERED (ID ASC) ) create index ixEventType on _Events (EventType) GO /* Events */ insert into _Events (EventType, EventName, EventCurrentGUID) values (0, 'Complete', NEWID()) GO /* Trigger*/ create trigger TR_Complete on Complete for insert, update, delete as begin update _Events set EventCurrentGUID = NEWID() where EventType = 0 end GO Zitat:
UPDATE: 1. SP erstellt
Code:
2. Trigger auf SP umgestellt
create procedure SP_EventsUpdate @EventType int
as begin set NOCOUNT ON; update _Events set EventCurrentGUID = NEWID() where EventType = @EventType end GO
Code:
PS: Das NOCOUNT ON im Trigger galt nur für diesen. Alle Anderen haben den Fehler geschmissen. :wink: Da war eine SP besser...
create trigger TR_Complete on Complete for insert, update, delete as
begin exec SP_EventsUpdate @EventType = 0 end GO |
AW: FireDAC NO_SQL_DATA error
Zitat:
Ich hatte ja zunächst übersehen, dass 2 verschiedene Tabellen im Spiel sind. Hab ich ja auch geschrieben. Aber ich hab weiter gespielt. Die 2. Tabelle hast Du nicht veröffentlicht und ich habe Deinen Code etwas verdreht (eben nur mit einer Tabelle) laufen lassen. Im Link sieht man beim 2. Insert, dass das Einfügen von nur 1 Datensatz relativ viele Rows betrifft (rows affected). Mehr, als man erwarten würde? Ich nehme an, der Fehler (SQL_NO_DATA) soll eigentlich ein Schutzmechnismus sein, den NOCOUNT ON abschaltet. |
AW: FireDAC NO_SQL_DATA error
Moin...8-)
Zitat:
Ich echt ist es immer nur ein Datensatz. :zwinker:
Delphi-Quellcode:
/* Events statisch manuell */
insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (1, 'Part', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (2, 'PartDefault', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (3, 'Address', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (4, 'AddressType', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (5, 'Empoyee', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (6, 'EmpoyeeGroup', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (7, 'EmpoyeeQualificationType', NEWID(), 1) insert into _Events (EventType, EventName, EventCurrentGUID, EventActive) values (8, 'EmpoyeeType', NEWID(), 1) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz