Hi.
The attached database includes two tables, with a few test lines:
CREATE TABLE T_PERSONS (
PRS_ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL,
PRS_TYPE TINYINT NOT NULL,
PRS_LASTNAME VARCHAR (32) NOT NULL,
PRS_FIRSTNAME VARCHAR (32) NOT NULL,
CONSTRAINT PK_PRS_ID PRIMARY KEY (PRS_ID),
CONSTRAINT CC_PRS_TYPE CHECK (PRS_TYPE BETWEEN 1 AND 2)
);
CREATE TABLE T_RELATIONSHIPS (
MBR_ID INTEGER NOT NULL, -- Member
AST_ID INTEGER DEFAULT NULL, -- Assistant
CONSTRAINT PK_MBR_ID PRIMARY KEY (MBR_ID),
CONSTRAINT FK_MBR_ID FOREIGN KEY (MBR_ID) REFERENCES T_PERSONS (PRS_ID),
CONSTRAINT FK_AST_ID FOREIGN KEY (AST_ID) REFERENCES T_PERSONS (PRS_ID)
);
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (1, 1, 'Smith', 'Albert');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (2, 1, 'Walsh', 'Christopher');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (3, 1, 'Dutton', 'Carol-Ann');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (4, 1, 'Evans', 'Jenny');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (5, 2, 'Taylor', 'Peter');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (6, 1, 'Deckard', 'Will');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (7, 1, 'Anderson', 'Charlotte');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (8, 2, 'Williams', 'Tracy');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (9, 1, 'Harrigan', 'James');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (10, 1, 'Spencer', 'Oliver');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (11, 1, 'Fergusson', 'Alexander');
INSERT INTO T_PERSONS (PRS_ID, PRS_TYPE, PRS_LASTNAME, PRS_FIRSTNAME) VALUES (12, 2, 'Miller', 'Helena');
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (1, NULL);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (2, NULL);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (3, 8);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (4, NULL);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (6, 5);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (7, NULL);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (9, NULL);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (10, 5);
INSERT INTO T_RELATIONSHIPS (MBR_ID, AST_ID) VALUES (11, 12);
Members and assistants are in the same table, with a PRS_TYPE column to distinguish them (1 member, 2 assistant).
They are linked in the second table, where each member must be listed with its assistant, or marked as NULL if it has none.
Main rules
- 1 member can have 0 or 1 assistant.
- 1 assistant can assist 1 or more members (1 assistant only exists if he assists at least 1 member).
What I want to do is automatically copy PRS_ID to MBR_ID when a new member is created. To do this, I’ve cobbled together this code:
Sub InsertMbrId(objEvent)
Dim objMainForm As Object
Dim objSubForm As Object
Dim objControl As Object
Dim objConnection As Object
Dim objStatement As Object
Dim objResult As Object
Dim strSQL As String
Dim intField1 As Integer
Dim strField2 As String
objMainForm = ThisComponent.Drawpage.Forms.GetByName("MainForm")
objSubForm = ThisComponent.DrawPage.Forms.GetByName("MainForm").GetByName("SubForm")
intField1 = objMainForm.Columns.GetByName("PRS_ID").Value
objControl = ThisDatabaseDocument.CurrentController
If Not objControl.IsConnected Then objControl.Connect
objConnection = objControl.ActiveConnection
objStatement = objConnection.CreateStatement
strSQL = "SELECT PRS_ID FROM T_PERSONS WHERE PRS_ID = " & intField1 & ""
objResult = objStatement.ExecuteQuery(strSQL)
While objResult.Next
strField2 = objResult.GetString(1)
Wend
objSubForm.UpdateString(objSubForm.FindColumn("MBR_ID"), strField2)
End Sub
It works, but it’s incomplete.
- At the moment, I’m running it by clicking on a button and I’d like it to do this automatically when I enter a new record.
- I don’t know how to place a “commit” because once the value is copied into the table, it’s only remembered if I change the record.
Thanks for your help.
dbPrimus.odb (15,9 Ko)