Fórum Salvando Tabela Filho e Perdendo dados do pai alguem ??? #37520
22/07/2003
0
Sremulador
Curtir tópico
+ 0Posts
22/07/2003
Afarias
Que componentes está usando??
Como estão configurados/´conectados´??
Como é seu código de inclusão??
T+
Gostei + 0
23/07/2003
Sremulador
para salvar estou dando um
post
commitretaling
conexao tcp/ip
Gostei + 0
23/07/2003
Afarias
Más, pelo menos atualize seu IBX. O q vem com o Delphi tem *bugs*
T+
Gostei + 0
23/07/2003
Sremulador
if (e0.Text <> ´´) and (e11.Text <> ´´) and (e3.Text <> ´´) and (e5.Text <> ´´) then begin
dmc.Ambulatorio.FieldByName(´AMPA´).Text:= dmc.PACIENTES.FieldByName(´PACD´).Text;
dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger := dmc.PACIENTES.FieldByName(´PAAM´).AsInteger + 1; dmc.Ambulatorio.FieldByName(´AMCV´).Text:= e0.Text; //
dmc.Ambulatorio.FieldByName(´AMPR´).Text:= e11.Text; //
dmc.Ambulatorio.FieldByName(´AMEP´).Text:= e3.Text; //
dmc.Ambulatorio.FieldByName(´AMTA´).Text:= e9.Text;
dmc.Ambulatorio.FieldByName(´AMFC´).AsInteger := principal.Tag; dmc.Ambulatorio.FieldByName(´AMST´).AsInteger := 1;
dmc.PACIENTES.Edit;
dmc.PACIENTES.FieldByName(´PAAM´).AsInteger:= dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger;
dmc.PACIENTES.Post;
principal.sb.Panels[2].Text:= ´Status: ´ + men (09);
dmc.Ambulatorio.Post;
dmc.Transacao.CommitRetaining;
FAA;
Close;
end else
messagedlg (men (2), mterror, [mbok], 0);
Gostei + 0
23/07/2003
Afarias
Qual é a chave primária da mestre e a chave estrangeira da detalhe??
o que seria isso::
--------------------------------------------------------------------------
dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger := dmc.PACIENTES.FieldByName(´PAAM´).AsInteger + 1;
{...}
dmc.PACIENTES.Edit;
dmc.PACIENTES.FieldByName(´PAAM´).AsInteger:= dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger;
dmc.PACIENTES.Post;
--------------------------------------------------------------------------
Se este código/campos acima mantêm sua relação mestre-detalhe, acredito q ai está seu problema.
No mais, vc não recebe nenuma exceção do sistema??
Vc tem definido no banco de dados suas ´constraints´??
T+
Gostei + 0
23/07/2003
Sremulador
Tabela pai - Pacientes
Tabela Filha Ambulatorio.
Os cods acima mantem relacionamento sim.
no caso deste abaixo ele vai abrir a tabela do pai e modificar um item.
dmc.PACIENTES.Edit;
dmc.PACIENTES.FieldByName(´PAAM´).AsInteger:= dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger;
dmc.PACIENTES.Post;
Gostei + 0
23/07/2003
Sremulador
AMPA -> PACIENTE
AMCD -> CHAVE PRIMARIA
Gostei + 0
23/07/2003
Afarias
Bom, acho q com o código abaixo:
dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger := dmc.PACIENTES.FieldByName(´PAAM´).AsInteger + 1;
vc está tentando gerar uma nova ´chave´ para AMBULATÓRIOS... isto não está correto, não funciona numa rede com +1 usuário. Vc devia usar generators ai!
Acho q aqui:
dmc.PACIENTES.Edit;
dmc.PACIENTES.FieldByName(´PAAM´).AsInteger:= dmc.Ambulatorio.FieldByName(´AMCD´).AsInteger;
dmc.PACIENTES.Post;
Vc quer informar na tabela PACIENTEs qual o último ambulatório, faça isso após o POST da tabela filho (ambulatório)
No mais, olha... eu acho q vc está meio confuso sobre relacionamentos Mester/Detalhe (ou Pai/Filho) ... se bem estou entendendo o q vc está tentando fazer *na minha opnião* eu diria q vc deveria avaliar melhor seu modelo de dados.
T+
Gostei + 0
24/07/2003
Sremulador
pac 1
amb1
2
3
pac 2
amb1
2
3
.......
??????
Gostei + 0
24/07/2003
Afarias
tabela: pacientes
--------------------
codigo (pk)
nome
{...}
--------------------
+ generator: gn_paciente_codigo
tabela: ambulatórios
------------------------
codigo (pk)
nome
{...}
-------------------------
+ generator: gn_ambulatorio_codigo
tabela: amb_pac (?? ou consultas, ou sei lá!!)
------------------------
paciente (fk) <-- recebe os códigos de pacientes
ambulatorio (fk) <-- recebe os códigos de ambulatórios
{...}
-------------------------
vc usa o generator ´gn_paciente_codigo´ no cadastro de pacientes (tabela Pacientes) e usa o ´gn_ambulatorio_codigo´ no cadastro de ambulatórios (tabela Ambulatorios)
Para associar os ambulatórios aos clientes (os ambulatórios já devem estar cadastrados) ... vc usa a 3ª tabela (amb_pac)
onde o campo ´paciente´ recebe o código do paciente que está sendo cadastrado (ou alterado), e o campo ´ambulatorio´ recebe o código do ambulatório selecionado pelo usuário.
Para cada novo ambulatório associado ao paciente, vc cria um novo registro nesta 3ª tabela.
Espero q isso ajude,
T+
Gostei + 0
25/07/2003
Sremulador
Gostei + 0
25/07/2003
Afarias
|com vários amb mas não vários amb para um paciente, por isso que eu
NÃO. seu relacionamento é de muitos-para-muitos (preste atenção no exemplo q vc colocou):
pac 1
amb1
2
3
pac 2
amb1
2
3
sendo assim, temos:
Pac1 - (Amb1, Amb2, Amb3)
Pac2 - (Amb1, Amb2, Amb3)
isto implica que:
Amb1 - (Pac1, Pac2)
Amb2 - (Pac1, Pac2)
Amb3 - (Pac1, Pac2)
Resumindo:
1 paciente pode estar relacionado a muitos ambulatórios, e 1 ambulatório pode ser relacionado a muitos pacientes.
Além de ser o exemplo q vc postou, pra mim é a mais pura lógica. Nunca vi um Ambulatório q atendesse a 1 só Paciente.
T+
Gostei + 0
28/07/2003
Sremulador
tipo
Paciente Ambulatorio
1
|________> 1
|________> 2
|________> 3
|________> 4 ......
............................................................................................
2
|________> 1
|________> 2
|________> 3
|________> 4 ......
mas o ambulatorio com o cdpa 2 não enchergará o cdpa 1 que e o cod do paciente, por isso que eu acho complicado fazer este tipo de generator, pos como o generator sabera que eu passei para o ambulatorio do próximo paciente ???
Gostei + 0
28/07/2003
Afarias
Leia atentamente e procure refletir um pouco q consiguirá implementar a solução corretamente.
T+
Gostei + 0
28/07/2003
Sremulador
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)