• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kahoz

relações entre tabelas paradox

18 mensagens neste tópico

boas,

utilizei o forum wizard do delphi5 para criar uma listagem de dados.

o que acontece é que a tabela basicamente é constituida por chaves o que gera algo do tipo

ID (c.principal)

IDCliente (c.secundária)

IDPreco (c.secundária)

o que eu queria fazer era que o programa fosse ás tabelas relativas a clientes e preços, buscar a informação relativa a' chave e escrevesse tb os detalhes dessa chave na tabela (DBGrid).

já tentei utilizar o componente TQuery, mas como não sou muito expriente em SQL é normal que a query não funcione.. :thumbsup:

não se me fiz etender, espero que sim.. obrigado desde já :D

ps: sou novo por cá :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sou Admin nem Moderador, mas bem vindo ao Forum.

Eu não percebi a 100% o teu problema, mas vou tentar explicar-te da maneira k eu conheço.

Primeiro terás que criar as BDs e as Alias no DataBase Desktop (as alias poderam ser evitadas, mas como vejo que estas a começar, é melhor usares)

- sabes trabalhar com o DB Desktop?

Depois no form no delphi, tens k inserir dois componente:

- Componente Table(DBTables) no separador BDE

-- Escolhes a ALIAS na opção Database Name

-- Escolhas a tabela em TableName

Inseri o Segundo componente

- Escolhe o DataSource(DB) no separador Data Access

-- Vais a opção DataSet ( tens a combo que detecta logo a Table para ligar)

*** Se não estiveres a ver as opções carrego no F11, aparece o Object Inspector

Por fim, no Separador Data Control

- Adicionar o componente DBGrid (DBGrids)

-- Na dbgrid, tens k seleccionar na opção DataSource, onde vais identificar o DataSource associado.

*** Aconselho que definas nomes nos componente, pois ajuda-te a ligares as informações.

Se precisares de mais alguma coisa, avisa. o pelo MSN

Fica bem, espero ter ajudado  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

os componentes Table, DBGrid, Datasource etc.. já os criei todos.

só que na Grid só mostra os detalhes da tabela principal e eu queria que em vez de mostrar o nº do cliente mostrasse o nome, por exemplo.. que está noutra tabela.

de qualquer modo obrigado! ve a imagem! :thumbsup:

untitled55ej.th.jpg]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva.

Ok, assim sendo já percebi o que precisas.

Então tentando explicar.

Neste caso não vais precisar do componente Table, mas sim do Query(DBTables), onde vais indicar tb o ALIAS, e vais ligar a DataSource, e a DBGrid a DataSource.

Na Query vais nas propriedades a opção SQL, e carregas no botão pequeno [...] que te vai abrir uma janela para escreveres o Codigo, neste caso SQL

Vou tentar fazer um código SQL associado ao que tu queres.

Não conheço o teu esquema de tabelas, por isso vou aqui esquematizar um, possa ser que te orientes assim. Duas tabelas

tbl_cliente

- id_cliente [ + ] *

- nome        [A]

- morada    [A]

tbl_preco_cliente

- id_p_cliente [ + ] *

- id_cliente      [N] - ** (chave secundária que vai guardar o id_cliente da tbl_cliente)

- valor            [$]

SELECT  tbl_cliente.nome , tbl_preco_cliente.valor 
FROM tbl_cliente, tbl_preco_cliente
WHERE id_p_cliente.tbl_preco_cliente = id_cliente.tbl_cliente;

Explicação:

1 linha - SELECT para começar uma pequisa, e meto os campos que quero que aparecam a seguir separados pela (,) costumo meter nome_campo.nome_tabela para o caso de existirem campos iguais na tabela.

2 linha - FROM define quais são as tabelas envolventes na pesquisa

3 linha - WHERE faz a comparação. Neste caso, só mostra os dados quando a condição se verificar.

A seguir basta activares a query, se tudo estiver bem, vai logo preencher a Grid.

Espero ter-me explicado, e que tenhas entendido.

Um Abraço  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado! amanha vou exprimentar...

só uma coisa.. no FROM é o nome do componente 'TTable' ou o caminho completo para a db ?

edit: esquece! :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok, testa amanha e diz-me como correu o teste

sim, no from, é o nome da TTabel, eu como por habito de organização quando faço as Tabelas no paradox defino sempre os nomes tlb_nome_da_tabela, e depois no DELPHI com o Componente TTable dou o mesmo Nome tbl_nome_da_tabela.

Isto é a minha maneira, acho k é mais facil apra organizar as ideias, e a informação. Mas agora é tudo um gosto pessoal. Fica bem

---- Não reparei no

edit: esquece! :thumbsup:

Bem, o post ñ faz mal :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como ainda tenho tempo para testar hoje.. fiz assim:

Select
  aluguer.db.IDAluguer,
  aluguer.db.IDAutomovel,
  aluguer.db.IDCliente,
  aluguer.db.IDPreco,
  aluguer.db.DataEntrada,
  aluguer.db.DataSaida,
  aluguer.db.Observacoes,
  automoveis.db.IDAutomovel,
  automoveis.db.Matricula
From aluguer.db, automoveis.db
Where automoveis.db.IDAutomovel = aluguer.db.IDAutomovel

ele diz-me: "invalid field: matricula"

a prova que o campo existe tá no anexo.. lol

inteh e obrigado! :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva, ontem acabei por não ver mais o topico.

É verdade que o campo Matricula existe, mas primeiro um conselho que sempre me deram em bases de dados, usa sempre letra minuscula, e separa os nomes com ( _ ) Underscore.

Bem, então vendo o teu problema.

o teu SELECT aluguer.db.IDAluguer altera para  aluguer.IDAluguer penso k assim já resolve. ñ precisas de colocar o .DB

Se tiveres duvidas avisa ... fica bem  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já tá. obg! :D

mas tenho outra duvida. mudei um campo int para date numa tabela.

agora a query de insereção diz "type mismatch in expression".

ora eu tenho de passar a data para string se não o complilador que que os tipos TDate e TString são incompativeis.

os campos Date da db são os dataEntrada e dataSaida. alguma maneira de dar a volta a este problema ? .. em anexo vai a showmessage com a query.

espero que me tenha feito etender :thumbsup:

untitled11nu.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva

Ainda bem que te consegui ajudar.

Bem em relação ao teu problema. Primeiro para inserires dados na base de dados, há maneiras mais faceis de fazer do que com SQL, tipo usas BDEdit, que associas a TTable, e ao campo dentro da TTable. Depois ou metes um navigator, (só aconselhor para avançar nos registos), ou fazes botõs de acção, deixo aki os comandos de acção:

Inserir: tbl_cliente.append;

Alterar: tbl_cliente.edit;

Eliminar: tbl_cliente.delete;

Guardar: tbl_cliente.post;

Com estas instruções já podes trabalhar a informação na base de dados.

Agora se queres inserir atraves de SQL, o problema é o esquema da data. tu estas a meter a data no formato DD-MM-AAAA, e o SQL aceita as datas no formato AAAA-MM-DD, ou seja se quiseres inserir por SQL, tens k inverter as datas.

boa continuação, e parabens por estares a explorar DELPHI  :cheesygrin:

Diz-me estas a dar delphi na escola? ou por vontade propria?

Um Abraço  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e se os campo da data for um datetimepicker ? como é que o associo a' tabela ? :cheesygrin:

btw fiz o que disseste para o sql e continua na mesma.

e em resposta a' tua pergunta, tou a aprender na escola

abraço! (;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas.

No teu condigo do SQL faz

INSERT INTO aluguer(....,....,,,...) VALUES (1,1,1,2006-05-20)

não metas aluger.db, porque tu estas a chamar a tabela aluguer.db atravez do componente TTable, o que tens k referir, é o nome do componente.

Quanto ao componente datetimepicker, o que eu costumo fazer, é meter uma dbedit, mas meto oculto, e no evento do datetimepicker (onChange) digo, que a dbedit_data.text := datetostr(datetimepicker.date);

Assim já resolve o teu problema.

Já agora estudas onde? conheço muito poucas escolas que dão delphi.

Um Abraço  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olás.

tendo em conta a tua dica abandonei o SQL e usei os outros comandos q referiste.. só que agora o novo registo vai para o ID 1 e os outros passam para baixo.. como resolvo isso ? :s

estudo na gustave eiffel, www.cooptecnica.pt (passo a publicidade :cheesygrin:)

abraço! (;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas.

Bem primeiro que tudo, o teu professor de programação é o Prof. Carlos Sousa ou o Prof. Michael Salvado???  :cheesygrin: são os dois muito bons professores e programadores :thumbsup: e eu vi quando falas-te em escola, pensei ou na FERNAVE antigos alunos de Gestão de Sistemas Informaticos (que foi o meu curso) ou pessoal da Gustave Eiffel, e pronto confirmas-te B) Eu tb estudei na Gustave mas a noite no CET de Informática.

bem, eu não percebi bem a tua questão. Esse ID vem de que tabela?

Tipo, chaves primárias defines como numeração Automatica o simbolo de + no paradox, e dp no Delphi não afectas esse valor, apenas fazes o Append, esse campo não preeenches, assim que fazes o post, ele mete o numero a seguir. Faz o incremento automático.

Se poderes explica-te melhor nesse teu problema.

S ñ aconselho-te os profs k falei, são excelentes.

Um Abraço  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olas de novo..

o campo q refiro é autoincrement.. só que em vez de ir para baixo (autoincrment+1) vai para cima (1ª posição).. :s

bem deixa lá.

btw, o meu prof nao é nenhum dos 2.

abraço e obrigado ! (;

ps: gsi powa! :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Bem sinseramente não estou a perceber esse teu problema.

o campo é auto incremento, ou seja, vai criando o valor + 1 isto é k eu chamo para cima, pois esta a avançar nos registos.

Agora ele está a fazer auto incremento do valor - 1?

Pronto, falhei nos profs. se o teu ñ é nenhum desses. Vou tentando ajudar-te, no que poder.

Andas em GSI (Gestão de Sistemas Informaticos)? Não conhecia esse curso na Gustave.

Um Abraço  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Inserir: tbl_cliente.append;

Alterar: tbl_cliente.edit;

Eliminar: tbl_cliente.delete;

Guardar: tbl_cliente.post;

hum.. tenho uma dbgrid com os dados da tabela.

agora tenho um botao "modificar" e queria programar esse botao.

ora como é que recolho a chave da tabela e como é faço o dataset apresentar esse registo ? :s

abraço e obrigado (;

edit: ja' nao e' preciso ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

viva, bem só vi o teu post agora,

Se já ñ é preciso, melhor, é sinal k já te arranjas-t :P

Mais alguma coisa, não hesites em perguntar.

Um abraço  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora