Fórum Como gravar em duas tabelas? #346971

03/10/2007

0

Estou trabalhando num projeto da faculdade que precisa gravar em duas tabelas criadas conforme abaixo:

CREATE TABLE tbPessoa (
CPF VARCHAR(11) NOT NULL,
RG VARCHAR(8) NOT NULL,
NOME VARCHAR(50) NOT NULL,
ENDERECO VARCHAR(100),
BAIRRO VARCHAR(50),
CIDADE VARCHAR(50),
ESTADO VARCHAR(2),
CEP VARCHAR(9),
SEXO VARCHAR(1),
PROFISSAO VARCHAR(50),
DT_NASC TIMESTAMP,
DT_CADASTRO TIMESTAMP,
usuCADASTRO VARCHAR(20),
DT_ALTERADO TIMESTAMP,
usuALTERADO VARCHAR(20),
CONSTRAINT pk_Pessoa PRIMARY KEY (CPF));

CREATE TABLE tbTelefone (
CPF VARCHAR(11) NOT NULL,
NUMERO VARCHAR(15) NOT NULL,
TIPO VARCHAR(20),
CONSTRAINT pk_Telefone PRIMARY KEY (CPF,NUMERO),
CONSTRAINT fk_Telefone_Pessoa FOREIGN KEY (CPF)
REFERENCES tbPessoa (CPF));

Eu consigo fazer o SELECT das tabelas numa boa através de um DataSet, mas quando tento gravar um novo cadastro no form ele dá um erro dizendo que os campos da tabela telefone não estão disponíveis pra gravação. Alguém poderia me dar uma ajuda?


Soueusei26

Soueusei26

Responder

Posts

03/10/2007

Mayron Cachina

como é que está seu código de gravação no banco?
eh direto com um dbcontrol?

ou usando insert?


Responder

Gostei + 0

03/10/2007

Soueusei26

Então, primeiro eu fiz com dbedit, mas me disseram que no momento em que ocorre o cdsMeu.dataset.post e ApplyUpdates(0) o servidor de banco de dados gera um erro e não aceita.
Agora estou tentando usar os controles padrões, mas estou apanhando pra caramba.


Responder

Gostei + 0

03/10/2007

Mayron Cachina

cara eu nunca usei o cliente dataset pra gravar... como vc está fazendo???


Responder

Gostei + 0

03/10/2007

Soueusei26

///// Estou usando este código no botão novo:

procedure TfrmPadrao.btnNovoClick(Sender: TObject);
begin
if not dstGenerico.DataSet.Active then
dstGenerico.DataSet.Open;
with dstGenerico.DataSet do
begin
Append;
FieldValues[´CPF´] := Trim(frmFuncionarios.txtCPF.Text);
FieldValues[´NOME´] := Trim(frmFuncionarios.txtNome.Text);
FieldValues[´ENDERECO´] := Trim(frmFuncionarios.txtEndereco.Text);
FieldValues[´BAIRRO´] := Trim(frmFuncionarios.txtBairro.Text);
FieldValues[´CIDADE´] := Trim(frmFuncionarios.txtCidade.Text);
FieldValues[´ESTADO´] := Trim(frmFuncionarios.txtUF.Text);
FieldValues[´CEP´] := Trim(frmFuncionarios.txtCEP.Text);
FieldValues[´RG´] := Trim(frmFuncionarios.txtRG.Text);
FieldValues[´DT_NASC´] := Trim(frmFuncionarios.mskDT_NASC.Text);
FieldValues[´SEXO´] := Trim(frmFuncionarios.cbxSexo.Text);
FieldValues[´PROFISSAO´] := Trim(frmFuncionarios.txtProfissao.Text);
end;
end;

///// Estou usando este código no botão salvar:

procedure TfrmPadrao.btnSalvarClick(Sender: TObject);
begin
dstGenerico.DataSet.Post;
end;

///// E este no afterpost:

procedure TdmdPrincipal.cdsPessoasAfterPost(DataSet: TDataSet);
begin
cdsPessoas.ApplyUpdates(0);
end;

//////// Funciona bem pra uma tabela, mas não sei como fazer para gravar em duas tabela...

///// E este é select que estou usando:

SELECT
p.CPF, p.RG, p.NOME, p.ENDERECO, p.BAIRRO, p.CIDADE, p.ESTADO,
p.CEP, p.SEXO, p.PROFISSAO, p.DT_NASC, p.DT_CADASTRO,
f.Numero, f.CPF as fCPF, f.TIPO
FROM
tbPessoa p,
tbTelefone f


Responder

Gostei + 0

04/10/2007

Mayron Cachina

Vc vai ter que fazer 2 inserts...
eu acho q n tem pra onde correr...


Responder

Gostei + 0

04/10/2007

Soueusei26

Legal Mayron, acho que encontrei um tópico que fala sobre isso.
http://forum.clubedelphi.net/viewtopic.php?t=75421&highlight=dbexpress+iniciante
Acho que é isso que estou precisando.


Responder

Gostei + 0

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

Aceitar