Fórum Exibe String em DBCombobox Salvando Integer no Banco #364694
07/10/2008
0
estou a 1 mes +- com uma duvida Cruel.
ai vai minha Query..
if DmPrincipal.tb_Movimento.State in [dsEdit, DsInsert] then
DbComboBox4.Clear;
begin
with DmPrincipal.Q_Carrega_Pessoa do
begin
Close;
SQL.Clear;
SQL.Add(´SELECT nome_cliente ´);
SQL.Add(´FROM tb_clientes C´);
SQL.Add(´INNER JOIN tb_tipo_pessoa TP´);
SQL.Add(´ON C.cod_tipo_pessoa = TP.cod_tipo_pessoa´);
SQL.Add(´AND (C.cod_tipo_pessoa = :p_Cod_tipo_pessoa)´);
ParamByName(´p_Cod_tipo_pessoa´).AsInteger := DmPrincipal.tb_MovimentoCod_tipomovimento.Value;
Prepare;
Open;
DmPrincipal.Q_Carrega_Pessoa.First;
while not DmPrincipal.Q_Carrega_Pessoa.EOF do
begin
DbComboBox4.Items.Add(DmPrincipal.Q_Carrega_Pessoa.fieldbyname(´nome_cliente´).AsString);
DmPrincipal.Q_Carrega_Pessoa.Next;
end;
end;
end;
end;
Meu DbComboBox4 esta listando os nomes corretamente porém quando tento sair ele gera o seguinte erro:
is not a valid integer for field ´Cod_Cliente´ ou seja, campo string nao pode ser salvo na tabela pois ela somente armazena inteiros.
Minha duvida é:
Como quero somente alguns clientes e nao todos nao posso usar o LoockupComboBox, por isso uso o DbCombobox. Como devo proceder::??
Obrigado!!
Souzaaguiar
Curtir tópico
+ 0Posts
08/10/2008
Eniorm
abraços
Gostei + 0
16/10/2008
Souzaaguiar
Gostei + 0
17/10/2008
Emarcolongo
Vc continua trazendo os dados filtrados, so que alem do nome traz o
codigo. Ai faz as ligações padrões, não tem erro. O usuário verá o nome
e o Delphi salva o codigo.
Vc elimina o trabalho de ficar carregando o DBCombobox. Seu sistema
fica mais rapido e seu codigo mais enxuto.
Caso não tenha expêriencia com o componente dê um alô que pego um exemplo, pois não me recordo bem agora.
- Caso não queria utilizar o componente, antes de salvar vc vai precisar
consultar novamente o banco de dados, e selecionar na sua tabela o
campo codigo referente ao nome. e antes do post colocar assim:
datasource.dataset.fieldbyname(´codigo´).value := codigo localizado;
Porque da forma que esta fazendo não tem como o projeto saber qual
o codigo referente aquele nome. o retorno do dbcombobox é string,
neste seu codigo.
Espero ter ajudado.
Gostei + 0
17/10/2008
Leonardo_age
with DmPrincipal.Q_Carrega_Pessoa do begin Close; SQL.Clear; SQL.Add(´SELECT CODIGO, nome_cliente ´); SQL.Add(´FROM tb_clientes C´); SQL.Add(´INNER JOIN tb_tipo_pessoa TP´); SQL.Add(´ON C.cod_tipo_pessoa = TP.cod_tipo_pessoa´); SQL.Add(´AND (C.cod_tipo_pessoa = ´ + DmPrincipal.tb_MovimentoCod_tipomovimento.Value + ´); Prepare; Open; end;
Todo o trabalho de carregar os itens da lista é do componente. Nele eu uso as seguintes propriedades:
ListSource := Data Source ligada a Q_Carrega_Pessoa
ListField := o campo que você quer exibir
KeyField := o campo usado como chave
Quando você for salvar e quiser atribuir o valor da chave basta passar como parametro dblookupComboBox.KeyValue.
Eu acho mais simples!
Gostei + 0
21/10/2008
Souzaaguiar
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)