To sum this up again:
- Its not the table nor the constraint when I can fire a non parameterized SQL without issue
- This is a Thread which runs at the same time as Parallel Tasks dumps data from whatever number of servers
- The DB Monitor log shows the correct parameters going in and the FBTrace log shows the incorrect data insert attempt
This is as vanilla as it gets, even moved that out of the Thread into Main:
Insert:
Code: Select all
Con.SQL.SQL.Text := 'insert into trusteddomains (netbiosname, domainid, dnsdomainname, domainsid, dc, dsdomainkinds, trusttype) ';
Con.SQL.SQL.Add('values (:netbiosname, :domainid, :dnsdomainname, :domainsid, :dc, :dsdomainkinds, :trusttype)');
Con.SQL.Params[0].Value := 'SMB03';
Con.SQL.Params[1].Value := 1;
Con.SQL.Params[2].Value := 'smb03.local';
Con.SQL.Params[3].Value := 'S-1-5-21-3188387342-845300696-3033364349';
Con.SQL.Params[4].Value := 'VMSMB03';
Con.SQL.Params[5].Value := 34;
Con.SQL.Params[6].Value := 2;
Con.SQL.Execute;
Error:
Code: Select all
raised exception class EIBCError with message 'violation of FOREIGN KEY constraint "FK_MNGDDOMAINS_ID" on table "TRUSTEDDOMAINS"
Foreign key reference target does not exist
Problematic key value is ("DOMAINID" = -7167)'.
DB Monitor:
Code: Select all
12/18/2021 10:47:55 AM n/a SQL Execute: insert into trusteddomains (netbiosname, domainid, dnsdomainname, domainsid, dc, dsdomainkinds, trusttype)
values (:netbiosname, :domainid, :dnsdomainname, :domainsid, :dc, :dsdomainkinds, :trusttype)
:netbiosname(WideString[5])='SMB03'
:domainid(Byte)=1
:dnsdomainname(WideString[11])='smb03.local'
:domainsid(WideString[40])='S-1-5-21-3188387342-845300696-3033364349'
:dc(WideString[7])='VMSMB03'
:dsdomainkinds(Byte)=34
:trusttype(Byte)=2
Domain:
Code: Select all
CREATE DOMAIN DWORD
AS BIGINT
check ( value between 0 and 4294967295 )
;
Table:
Code: Select all
CREATE TABLE TRUSTEDDOMAINS
(
NETBIOSNAME VARCHAR(80) NOT NULL,
DOMAINID BIGINT NOT NULL,
DNSDOMAINNAME VARCHAR(120) NOT NULL,
DOMAINSID STRINGSID NOT NULL,
DC VARCHAR(80) NOT NULL,
DSDOMAINKINDS DWORD NOT NULL,
TRUSTTYPE DWORD NOT NULL,
CONSTRAINT PK_TRUSTEDDOMAINS PRIMARY KEY (NETBIOSNAME,DOMAINID)
);
ALTER TABLE TRUSTEDDOMAINS ADD CONSTRAINT FK_MNGDDOMAINS_ID
FOREIGN KEY (DOMAINID) REFERENCES MNGDDOMAINS (ID) ON DELETE CASCADE;
CREATE UNIQUE INDEX IX_TRUSTEDDOMAINS_SID ON TRUSTEDDOMAINS (DOMAINSID);
Trace log:
Code: Select all
Statement 249:
-------------------------------------------------------------------------------
insert into trusteddomains (netbiosname, domainid, dnsdomainname, domainsid, dc, dsdomainkinds, trusttype)
values (?, ?, ?, ?, ?, ?, ?)
param0 = varchar(320), "SMB03"
param1 = bigint, "-7167"
param2 = varchar(480), "smb03.local"
param3 = varchar(800), "S-1-5-21-3188387342-845300696-3033364349"
param4 = varchar(320), "VMSMB03"
param5 = bigint, "34"
param6 = bigint, "2"