Ir para conteúdo
Fórum Script Brasil
  • 0

Gravar em 3 tabelas firebird


Seingalt

Pergunta

Bom dia pessoal,td bem ?!

Procurei antes de postar aqui,como gravar em duas tabelas mas são situaçoes diferentes com estrutura diferente do banco.

Pessoal estou confuso aqui meio sem saber como fazer e o que esta dando errado.

Situação :

Windows XP

Delphi 7

Firebird

 

Estou usando SimpleDataSet,DataSource e um TSQLConnection.Também estou usando DBEdtis

As configuraçoes do SimpleDataSet esta assim:

CommandText = Select * from tbl_1,tbl_2,tbl_3

Active = True

Connection TSQLConnection

A tabela 1 esta assim:

id int not null,

nome varchar(60) not null,

endereco varchar(60),

tipo_pessoa char(2)

A tabela 2 esta assim

id int not null

rg varchar(13),

cpf varchar(13),

fk_tabela_1 int

A tabela 3 esta assim

id int not null

modelo varchar(60)

ano varchar(10)

fk_tabela_2 int

É mais ou menos isso pessoal,qualquer coisa jogo a tabela aqui blz.Bom então o ID de todas as tabelas sendo gerados automaticamente pelo um Generator.Estou usando o IBOConsole.

Ao gravar ele diz que campo ID não pode estar vazio,que precisa ser digitado,tirei ele do Field do SimpleDataSet,sabe quando você adiciona os campos então de lá.

Acredito que não to nem conseguindo explicar,vou colocar os codigos dos botões do Novo e Gravar,são os que estao dando erro e não sei como gravar nas tabelas.

Estou usando :

SimpleDataSet.post;  // para gravar

em vez de :

SimpleDataSet.Dataset.CommandText:='Insert into tal..tal...tal....'

Testei na tabela com insert into tbl_1 e tal so q fiz varios inserts mas deu certo.

Se eu usar com comando Sql talvez funcione assim como fiz direto na tabela,mas minha duvida também é na opção edit,com faria um edit usando Sql no Delphi ?

Ou poderia usar somente SimpleDataSet.Edit; ??

É melhor deixar a tabela sem auto incremento ?

Tira os Campos not null ?

Como copiar o valor de tabela_1_id para fk_tabela_2 ?

Tá complexo pessoal.

Espero que tenha conseguido explicar,qualquer coisa subo os codigos aqui.

 

Obrigado.

 

 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

primeiro ... campos em tabela que não vão se repetir, voce deve colocar em apenas uma tabela

exemplo :  Nome, Endereço, TipoPessoa, Rg, Cpf  fica em uma tabela

no seu caso se a tabela 3 é para : Veículo, Modelo, Ano ... esses dados podem ficar em outra tabela;  pois uma pessoa pode ter mais de um veículo

agora vamos as respostas as suas duvidas:

Se eu usar com comando Sql talvez funcione assim como fiz direto na tabela,mas minha duvida também é na opção edit,com faria um edit usando Sql no Delphi ?

uma instrução sql seria tipo :  Select * from Tabela

seria para voce selecionar todos os registros de uma tabela

o comando edit ficaria para o componente de acesso a tabela

exemplo:  Query1.Edit ou Table1.Edit ou ClientDataSet1.Edit ....etc 

Ou poderia usar somente SimpleDataSet.Edit; ??

se voce quiser usar esse componente, pode

É melhor deixar a tabela sem auto incremento ?

se voce não tem experiencia no delphi, é melhor não usar

Tira os Campos not null ?

sim, pois campos Not Null são campos que ficarão esperando valores 

Como copiar o valor de tabela_1_id para fk_tabela_2 ?

normalmente isso só é usado para gerar tabelas temporárias, pois não teria sentido duplicar valores em tabelas

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

E ai Jhonas, td bem ?

Obrigado por ter respondido,mudei o modo de inserção do ClientDataSet usei comandos Sql.

É mais trabalhoso não dificil,escrevi funçoes para inserção.

Questão da tabela fiz sim uma tabela só para veiculo enfim..

O problemas está agora quando coloco um dbnavigator ( e tentei tambem com botões ),quando clico em proximo ou anterior ele muda somente os dados de pessoa fisica e dados do veiculo.

O nome da pessoa não,tipo :

 

primeiro registro

Jhonas 
Rua Programador n33
Cpf 3330039393
Fusca 1980

Segundo Registro

Giacomo
Rua Paraiso n45
Cpf 908374933293
Corcel 2 1976

Proximo ele ficaria assim:

primeiro registro

Jhonas 
Rua Programador n33
Cpf 908374933293
Corcel 2 1976

Segundo Registro

Giacomo
Rua Paraiso n45
Cpf 908374933293
Corcel 2 1976

Notou ? Ele navegou somente na tabela de Cliente e de Veiculo mudando somente o seu Cpf e Veiculo.

Se tento de novo ai ele muda.

O porque disso ?

Tentei fazer navegação com botões,mas mesmo jeito,nunca tinha visto isso.

Procurei comando para navegar na tabela com sql mas não encontrei.

Dá um Help por favor .

Obrigado

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

voce precisa fazer o relacionamento entre as tabelas

exemplo

mod_relacional_p2_2.jpg

voce tem que ter um campo comum ( os mesmos nomes ou não, mas do mesmo tipo ) nas duas tabelas

quando voce navegar nos registros, o tipo do veiculo muda automaticamente ( desde que voce tenha registrado somente um veiculo - usando Edits)

se voce cadastrar mais de um veiculo para a pessoa, entao o modo de mostrar os dados vai ser diferente ( voce vai usar DBgrid )

se tiver dúvidas, veja o ultimo post desse link

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado por responder Jhonas.

Coincidência eu li este post antes de postar aqui,vou colocar aqui como esta a tabela.

tbl_dados,tbl_pf ( pessoa fisica),tbl_veiculo

tbl_dados tem um campo tipo_pessoa

tbl_pf tem um campo da tabela dados tipo pf_dados_codigo

tbl_veiculo tem um campo que referencia a pf tipo vei_pf_codigo

Estou usando DBEdits,mas esta da forma como te falei.

1-) O que você acha ?

2-) Você acha que deveria trabalhar com 3 ClientDataSet um para cada tabela ?

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

não , voce esta querendo fazer algo que não é necessario

use uma tabela para os dados da pessoa

e use uma tabela para dados do veiculo

use um campo comum para as duas tabelas ( Codigo ) tipo numerico

vou dar um exemplo bem simples :

Tabela Pessoa  -------   Tabela Veiculo

COD  -----  campo relacionado --- COD

NOME                                            MARCA 

RUA                                               MODELO

PESSOA                                        ANO

CPF                                               PLACA

para cada 1 (cod) de pessoa, voce pode ter n (cod) de veiculo

usando uma instrução sql ficaria assim

select * from tabelaPessoa where cod = 1

no dbgrid vai mostrar todos os registros das 2 tabelas.

se tiver mais de um veiculo cadastrado para o codigo 1 na tabela veiculo, então os registros da tabela Pessoa serão mostrados no dbgrid duplicados, mas isso é facil de contornar ....voce pode mostrar os dados da tabela pessoa em DBedits e os dados da tabela veiculo no dbgrid.

se voce for iniciante no delphi tem varios links na net que podem te ajudar

http://www.planetadelphi.com.br/download/4804/apostila/apostila-de-delphi-7-com-banco-de-dados-firebird

https://www.bing.com/search?FORM=INCOH2&PC=IC04&PTAG=ICO-d8805066&q=firebird+delphi+7

abraço

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...