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 :
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
valeu galera
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
Curtir tópico
+ 0
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++
?
qq coisa post ai..
Abracos++
Responder
Clique aqui para fazer login e interagir na Comunidade :)