kaakaa, реализовал пока следующим образом:
создал хранимку такого вот вида:
Код:
DELIMITER $$
USE `pawnshop`$$
DROP PROCEDURE IF EXISTS `ItemAdd`$$
CREATE PROCEDURE `ItemAdd` (
IN aTicketID INT,
IN aInfo VARCHAR(32),
IN aStandard INT,
IN aFullWeight DECIMAL(10,2),
IN aInsWeight DECIMAL(10,2),
IN aPriceP1g DECIMAL(10,2),
OUT aNewID INT
)
BEGIN
INSERT INTO `items` (
TicketID,
iInfo,
iStandard,
iFullWeight,
iInsWeight,
iPriceP1g
)
VALUES
(
aTicketID,
aInfo,
iStandard,
aFullWeight,
aInsWeight,
aPriceP1g
) ;
SET aNewID = @@Identity ;
END $$
DELIMITER ;
Внутри программы с главной формы зову модальную форму, и перед этим открываю транзакцию: (внутрь отдаю Connection, чтоб там уже с ним связать AddTicketCom: TADOStoredProc)
Код:
procedure TFormMain.btnAddTicketClick(Sender: TObject);
begin
TicketsView.BeginUpdate;
with TFormTicketNew.Create(Application) do
try
Connection.BeginTrans;
if AddTicket(Connection) then
Connection.CommitTrans
else
Connection.RollbackTrans;
finally
Free;
end;
TicketsView.EndUpdate;
end;
Внутрь самой процедуры AddTicket:
Код:
function TFormTicketNew.Execute(iConnection: TADOConnection): boolean;
begin
AddTicketCom.Connection := iConnection;
while not Result do
begin
Result := ShowModal = mrOk;
if VarIsNull(edParamPerson.EditValue) then
begin
MessageBox(Handle, pChar('Вы не указали информацию о Клиенте.'),
pChar('Неверные сведения'), MB_ICONERROR or MB_OK);
edParamPerson.SetFocus;
Result := false;
Continue;
end;
if VarIsNull(edParamLoan.EditValue) then
begin
MessageBox(Handle, pChar('Вы не указали информацию о Ссуде.'),
pChar('Неверные сведения'), MB_ICONERROR or MB_OK);
edParamLoan.SetFocus;
Result := false;
Continue;
end;
end;
AddTicket.Parameters.ParamByName('PawnshopID').Value := 1;
AddTicket.Parameters.ParamByName('StatusID').Value := 1;
AddTicket.Parameters.ParamByName('iNo').Value := 10000;
AddTicket.Parameters.ParamByName('iStartDate').Value := Date;
AddTicket.Parameters.ParamByName('iEndDate').Value := IncDay(Date, 29);
AddTicket.Execute;
// использую вот это AddTicket.Parameters.ParamByName('NewID').Value; для дальнейшего добавления в подчинённую таблицу
end;
Не могу никак организовать логику: у меня есть проверки на заполненные поля. Если поле не заполнено, форма не должна уничтожаться (т.е. нужен While цикл) и при этом ещё нужно как-то обрабатывать когда модальную форму просто закрывают)
Конструкция пока видится ... не видится