Problema Chaves Extranjeiras
Boa tarde pessoal, tenho uma tabela Cidades e outra Clientes;
Cidades
CodigoCidade int
NomeCidade varchar
Clientes
CodigoCliente int
CodigoCidade int
tenho tambem um formulario para cadastrar clientes com componentes dbEdit, na hora de cadastrar a cidade do cliente, eu gostaria inserir o nome da cidade, mas que na verdade na tabela ele insira o codigo da cidade depois de testar se a cidade existe.
Ja tentei com os campos lookup, e nada. Ou sera que nao e posivel so com controles dbEdit.
Obs.: estou trabalhando com dbexpress + clientDataSet + Firebird. Obrigado antecipadamente pela ajuda.
Cidades
CodigoCidade int
NomeCidade varchar
Clientes
CodigoCliente int
CodigoCidade int
tenho tambem um formulario para cadastrar clientes com componentes dbEdit, na hora de cadastrar a cidade do cliente, eu gostaria inserir o nome da cidade, mas que na verdade na tabela ele insira o codigo da cidade depois de testar se a cidade existe.
Ja tentei com os campos lookup, e nada. Ou sera que nao e posivel so com controles dbEdit.
Obs.: estou trabalhando com dbexpress + clientDataSet + Firebird. Obrigado antecipadamente pela ajuda.
Eduardocar83
Curtidas 0
Respostas
Brunodsr
17/07/2008
Sinceramente nao entendi. O campo lookup so exibe o nome das cidades que existem cara. Ele relaciona as duas tabelas pelo codigo.
Coloca aí um print da tela configurada veio. Dos campos no fields editor. Pq acho q tem alguma coisa errada no teu lookup.
Espero ter ajudado.
Coloca aí um print da tela configurada veio. Dos campos no fields editor. Pq acho q tem alguma coisa errada no teu lookup.
Espero ter ajudado.
GOSTEI 0
Eduardocar83
17/07/2008
Bruno obrigado por tua atençao, e o seguinte, o que eu quero fazer e na hora do cadastro do cliente, inserir o nome da cidade e nao o codigo, que ele teste se existe esse nome de cidade na tabela Cidades, devolva o codigo, e seja esse codigo o que se armacene na tabela cliente.
E tipo assim o processo inverso do que faz o lookup me parece. Porque ele pega o codigo da cidade , e mostra o nome da cidade. Desculpa a complicaçao. Muito grato por tua atencao.
E tipo assim o processo inverso do que faz o lookup me parece. Porque ele pega o codigo da cidade , e mostra o nome da cidade. Desculpa a complicaçao. Muito grato por tua atencao.
GOSTEI 0
Eduardocar83
17/07/2008
quando falo de inserir o nome da cidade, e no formulario de cadastro de cliente...
GOSTEI 0
Webjoel
17/07/2008
Olá amigo!
É possível fazer isso sim e não é muito complicado, o problema é que você vai encontrar alguns problemas, tipo, se tiver duas cidades com o mesmo nome cadastrado, ou mesmo existir mas ser de outro estado, você tem q pensar bem nessa estrutura, mas se mesmo assim você deseja continuar faça o seguinte:
1ª Opção (a correta):
Coloque no Form, o DBEdit do codigo da cidade, ao lado um botão pra pesquisar as cidades e logo depois o dbedit no nome da cidade.
No botão de pesquisar você vai chamar o formulário de consulta de cidades, assim o usuário escolhendo a cidade retorna para o formulario anterior, com o código da cidade, e no validade do campo do CodigoCidade você chama o nome daquela cidade escolhida, isso para você poder visualizar estas informações em tempo de edição também.
2ª Opção:
Você pode ter uma Edit normal e a DBEditCodigoCidade, neste caso, você pode inserir um código ao dar enter nessa edit para trazer o código da cidade no qual esse campo se refere, ex:
Neste último Caso você também tem que criar um validade no campo CodigoCidade para trazer o nome da cidade e mostrar na tela em tempo de edição.
Boas compilações!
É possível fazer isso sim e não é muito complicado, o problema é que você vai encontrar alguns problemas, tipo, se tiver duas cidades com o mesmo nome cadastrado, ou mesmo existir mas ser de outro estado, você tem q pensar bem nessa estrutura, mas se mesmo assim você deseja continuar faça o seguinte:
1ª Opção (a correta):
Coloque no Form, o DBEdit do codigo da cidade, ao lado um botão pra pesquisar as cidades e logo depois o dbedit no nome da cidade.
No botão de pesquisar você vai chamar o formulário de consulta de cidades, assim o usuário escolhendo a cidade retorna para o formulario anterior, com o código da cidade, e no validade do campo do CodigoCidade você chama o nome daquela cidade escolhida, isso para você poder visualizar estas informações em tempo de edição também.
2ª Opção:
Você pode ter uma Edit normal e a DBEditCodigoCidade, neste caso, você pode inserir um código ao dar enter nessa edit para trazer o código da cidade no qual esse campo se refere, ex:
... var nome_cidade : string; begin nome_cidade := UpperCase(EditNomeCidade.Text); SQL_AUX.Close; SQL_AUX.CommandTex := ´select CodigoCidade from Cidades where Upper(NomeCidade) = ´ + nome_cidade; SQL_AUX.Open; ClientDataSetCodigoCidade.AsInteger := SQL_AUX.FieldByName(´CodigoCidade´).AsInteger; end;
Neste último Caso você também tem que criar um validade no campo CodigoCidade para trazer o nome da cidade e mostrar na tela em tempo de edição.
Boas compilações!
GOSTEI 0
Eduardocar83
17/07/2008
E isso ali webjoel, muito obrigado, e a segunda opcao que eu precisso implementar. E porque nao quero trabalhar com codigos no form de preenchimento, pelo fato de serem dificeis de lembrar.
So o edit para digitar o nome da cidade e do lado um botao de pesquisar en caso que o usuario nao lembre. Valeu, obrigado.
So o edit para digitar o nome da cidade e do lado um botao de pesquisar en caso que o usuario nao lembre. Valeu, obrigado.
GOSTEI 0