Показать сообщение отдельно
  #40  
Старый 08.09.2014, 13:02
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

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 цикл) и при этом ещё нужно как-то обрабатывать когда модальную форму просто закрывают)

Конструкция пока видится ... не видится
Ответить с цитированием