Questão:
Duvida em desenvolvimento de aplicativo?
Silvia Helena
2010-01-07 12:08:15 UTC
Estou desenvolvendo um sistema para controle de frotas. Nesse sistema tenho a tela de cadastro de motorista e custos de abastecimento. tenho duas tabelas com para essas telas, uma tabela onde ficam gravados todos os dados dos motoristas e outra com os dados dos abastecimentos realizados. minha duvida é a seguinte: quando vou cadastrar um abastecimento seleciono o nome do motorista numa combo box, so que eu quero que esses nomes sejam puxados da tabela de motoristas (ate aqui tudo bem ) e que não seja possívell cadastrar um motorista que não esteja cadastrado na tabela de motoristas( ISSO NÃO ESTOU CONSEGUINDO). Alguém pode me ajudar?. Outra coisa, tem como eu escolher o nome na combobox mas no meu banco ficar gravado não o nome mas um código único do motorista selecionado. Por exemplo na minha tela de cadastro tem uma combobox que lista todos os nomes dos motoristas, eu escolho um nome mas na hora que grava no banco não grava o nome mas um código único associado a ele. Tem como fazer isso? Obrigada.
Trzy respostas:
anonymous
2010-01-07 12:26:59 UTC
Faz assim, exemplo:



TBL_MOTORISTAS

---------------------------------------------------

codigo_motorista (chave primária)

nome

sobrenome

n_cnh

tipo_habilitacao

rg

endereco

data_cadastro

tempo_experiencia





TBL_ABASTECIMENTO

---------------------------------------------------

codigo_motorista (chave estrangeira) - relacionada com a PK da TBL_MOTORISTAS

codigo(chave primaria)

data_abastecimento

local

valor





Depois vc puxa no seu select pelo código e pelo nome e preenche o combo com o nome, mas no 'value' do combo, coloca o código.



Pra puxar os dados de um motorista e seus abastecimentos(sem filtrar pela data, e exibindo somente motoristas que já fizeram algum abastecimento), pode fazer assim:



SELECT TBL_MOTORISTAS.* from TBL_MOTORISTAS

Inner Join TBL_ABASTECIMENTO On TBL_MOTORISTAS.codigo_motorista = TBL_ABASTECIMENTO.codigo_motorista

WHERE TBL_MOTORISTAS.codigo_motorista = '123456'



Agora, mesma coisa, filtrando pela data:



SELECT TBL_MOTORISTAS.* from TBL_MOTORISTAS

Inner Join TBL_ABASTECIMENTO On TBL_MOTORISTAS.codigo_motorista = TBL_ABASTECIMENTO.codigo_motorista

WHERE TBL_MOTORISTAS.codigo_motorista = '123456' and TBL_ABASTECIMENTO.data-abastecimento BETWEEN #'01/01/2009'# AND #'01/01/2010'#





Você cria um relacionamento de um para muitos entre TBL_MOTORISTAS e TBL_ABASTECIMENTO(Pra cada registro de TBL_MOTORISTAS poderão haver mais de um relacionado na tabela TBL_ABASTECIMENTO, creio que seja isso...) pra controlar a integridade.



Acho que é isso, bem simples.

Mas veja que se precisa definir o tipo de habilitação do motorista("D","E",etc.) é recomendado que tenha outra tabela somente com os tipos(TBL_TIPO_HABILITACAO), aí relaciona pela código do tipo na tabela do cadastro do motorista... A mesma regra vale para qualquer informação que pode ser reutilizada e com várias ou nenhuma ocorrência. Procure sobre normalização de tabelas no banco de dados pra se informar melhor.





[]
Itamar R
2010-01-08 16:36:58 UTC
Qual a ferramenta/linguagem que vc está utilizando?
Engenheiro JoeM
2010-01-07 20:20:25 UTC
Vamos por partes:



Cadastro de motorista => na tabela você tem um lugar para gerar Código???



Na combobox não será possível adicionar nenhum motorista que não esteja cadastrado.



Você está fazendo isso em Visual Basic ou Delphi???



Access ninguém merece.


Este conteúdo foi postado originalmente no Y! Answers, um site de perguntas e respostas que foi encerrado em 2021.
Loading...