Erro ao gravar registro Mestre-detalhe com autoinc.

20/06/2008

0

Boa tarde pessoal..
não estou conseguindo atualizar um campo mestre detalhe no qual os dois campos são autoincremento :

[b]Atendimento[/b]
CodAtendimento (int(4)) - autoinc
Operador
data
hora


[b]Ocorrencia[/b]
CodOcorrencia (int(4)) - autoinc
Local
Descricao
CodAtendimento


estou tentando gravar mas não consigo gravar a o CodAtendimento da tabela Atendimento no campo CodAtendimento da tabela Ocorrencia..

tá aí meu código

procedure TfrmOcorrencias.btngravarClick(Sender: TObject);
  var codigo : integer;
      flag,tipoOcorrencia,msg,nivelUrgencia: string;
      erro : string;
begin
   Try
      tipoOcorrencia := ´´;

      If verificacampos > 0 then
         begin
            Application.MessageBox(´Não foram preenchidos todos os campos obrigatórios!´,´Campos obrigatórios´,MB_OK+MB_ICONERROR);
            frmOcorrencias.SetFocus;
            exit;
         end;

      If flagacompanhamento = ´N´ then
         begin
            If DM.dsOcorrencia.State in [dsInsert] then
               begin
                  try
                     //Atualiza o sequenciador
                     DM.QExecutaContratante.Close;
                     DM.QExecutaContratante.SQL.Clear;
                     DM.QExecutaContratante.SQL.Add(´UPDATE CONTRATANTE SET SEQUENCIA =(SELECT SEQUENCIA + 1 FROM CONTRATANTE WHERE CODCONTRATANTE = :PCODCONTRATANTE ) WHERE CODCONTRATANTE = :PCODCONTRATANTE´);
                     DM.QExecutaContratante.Parameters[0].DataType := ftInteger;
                     DM.QExecutaContratante.Parameters[1].DataType := ftInteger;
                     DM.QExecutaContratante.Parameters[0].Value    := dbContratante.KeyValue;
                     DM.QExecutaContratante.Parameters[1].Value    := dbContratante.KeyValue;
                     DM.QExecutaContratante.ExecSQL;
                     //Fim do Atualiza sequenciador

                     //Obtem os dados para exibição
                     DM.QExecutaContratante.Close;
                     DM.QExecutaContratante.SQL.Clear;
                     DM.QExecutaContratante.SQL.Add(´SELECT FLAG, SEQUENCIA FROM CONTRATANTE WHERE CODCONTRATANTE = :PCODCONTRATANTE´);
                     DM.QExecutaContratante.Parameters[0].DataType := ftInteger;
                     DM.QExecutaContratante.Parameters[0].Value    := dbContratante.KeyValue;
                     DM.QExecutaContratante.Open;

                     flag           := DM.QExecutaContratante.FieldbyName(´FLAG´).Value;
                     codigo         := DM.QExecutaContratante.FieldbyName(´SEQUENCIA´).Value;
                     //Fim do obtem os dados para exibição
                  except
                     on E: Exception do
                        begin
                           Application.MessageBox(´Erro ao atualizar Contratante´,´Gravação´,MB_OK+MB_ICONERROR);
                           close;
                           exit;
                        end;
                  end;
                  DM.OcorrenciaProtocolo.Value             := RetCodigo(codigo,flag);
                  DM.OcorrenciaDescricaoOcorrencia.Value   := Trim (edDescOcorrencia.Text);
                  DM.OcorrenciaFinalizada.Value            := ´0´;
                  DM.OcorrenciaAcompanhamento_valido.Value := ´0´;
                  DM.OcorrenciaResolvendo.Value            := ´0´;
                  DM.OcorrenciaCodAtendimento.Value        := CodAtendimento;
                  DM.Ocorrencia.Post;
                  nivelUrgencia  := InttoStr(DM.OcorrenciaCodNivelUrgencia.Value);
                  tipoOcorrencia := DM.OcorrenciaProtocolo.Value;
               end;

            DM.Atendimento.Post;
            If DM.dsOcorrencia.State in [dsEdit] then
               begin
                  DM.Ocorrencia.Post;
               end;

            DM.Conexao.CommitTrans;
            //Atualiza o sequenciador
            DM.QExecutaContratante.Close;
            DM.QExecutaContratante.SQL.Clear;
            DM.QExecutaContratante.SQL.Add(´UPDATE OCORRENCIA SET CODATENDIMENTO = :PCODATENDIMENTO WHERE CODOCORRENCIA = :PCODOCORRENCIA´);
            DM.QExecutaContratante.Parameters[0].DataType := ftInteger;
            DM.QExecutaContratante.Parameters[1].DataType := ftInteger;
            DM.QExecutaContratante.Parameters[0].Value    := DM.AtendimentoCodAtendimento.Value;
            DM.QExecutaContratante.Parameters[1].Value    := DM.OcorrenciaCodOcorrencia.Value;
            DM.QExecutaContratante.ExecSQL;
            //Fim do Atualiza sequenciador

            Habilita;
            Application.MessageBox(´Registro cadastrado com sucesso!´,´Inclusão - Ocorrências´,mb_ok+MB_ICONEXCLAMATION);

            If Trim(tipoOcorrencia) <> ´´ then
              begin
                 msg := ´Protocolo gerado número - ´ + tipoOcorrencia;
                 Application.MessageBox(Pchar(msg) ,´Protocolo´,MB_OK+MB_ICONINFORMATION);
                 msg := ´´;
                 EnviaMSG(nivelUrgencia); // Envia mensagem para os Resolvedores
              end;
            close;
         end

      Else If flagacompanhamento = ´S´ then
         begin
            PCOcorrencias.TabIndex := 1;
            DM.Conexao.CommitTrans;
            Habilita;
            close;
         end;

   except
      on E: Exception do
            begin
               erro := ´Erro ao gravar registro!´+#13+E.Message;
               Application.MessageBox(Pchar(erro),´Cadastro´,MB_OK+MB_ICONERROR);
               Habilita;
               If DM.Conexao.InTransaction then
                  DM.Conexao.RollbackTrans;
            end;
   end;
end;



valeu galera


Eric.miranda

Eric.miranda

Responder

Posts

20/06/2008

Paulo

Sempe aprendi que em um Master/Detail, deve-se primeiro validar o mestre e depois o cliente. Então grava primeiro o Master, comita e depois o Detail. Eu faço assim e não tenho problemas.


Responder

21/06/2008

Mazzi

e ai deu certo, validando e salvando primeiramente o cabeçalho (MASTER) // (parafraseando o PAULO)
?

qq coisa post ai..

Abracos++


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar