I have a mySQL with the following two tables:
person keyed on ID
staff keyed on ID and StaffID (used to link managers and their staff)
The following stored procedure should insert a row into the staff table provided both ID and StaffID exist in the person table
IF EXISTS (SELECT * FROM person WHERE ID = pStaffID) THEN
INSERT INTO staff VALUES(pID, pStaffID, pDateOfEffect, pRemarks);
END IF
The following code in Delphi should do the insert
procedure TfrmStaff.btnOKClick(Sender: TObject);
begin
if (txtStaffID.Text <> '') then with DataModule1.ADOStoredProc1 do begin
NullStrictConvert := false;
ProcedureName:='Insert_Staff';
Parameters.Clear;
Parameters.CreateParameter('pID', ftInteger, pdInput, 50, ID);
Parameters.CreateParameter('pStaffID', ftInteger, pdInput, 50, txtStaffID.Text);
Parameters.CreateParameter('pDateOfEffect', ftDate, pdInput, 50, txtDateOfEffect.Text);
Parameters.CreateParameter('pRemarks', ftString, pdInput, 100, txtRemarks.Text);
ExecProc;
end;
end;
I am using 43 and 45 as the two IDS, which both exist in the person table. For test purposes I am leaving both txtDateOfEffect and txtRemarks empty.
This fails with the following error message:
check the manual for the right syntax to use near ‘{ call
Insert_Staff(?, ?, ?, ?)} at line 1;
2
Answers
In the end I've decided to go with an ADOQuery instead of ADOStoredProc, using ExecSQL rather than ExecProc. The following code works as expected (qAdd is an ADOQuery). This allows me to continue using the stored proc on the server.
Try to put TAdoStoredProc on form or on data module, setup connection and proc name and call ExecProc method. If you get success, use parameters’ settings from this component