Fórum Exibe String em DBCombobox Salvando Integer no Banco #364694

07/10/2008

0

Senhores,

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

Souzaaguiar

Responder

Posts

08/10/2008

Eniorm

brother... na estrutura de sua tabela, este campo está definido como varchar ou integer?

abraços


Responder

Gostei + 0

16/10/2008

Souzaaguiar

Inteiro porem faco uma query que exibe string e quero salvar inteiro no banco usando o ongettext e onsettext


Responder

Gostei + 0

17/10/2008

Emarcolongo

Porque vc não usa um DBLookupComboBox ?

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.


Responder

Gostei + 0

17/10/2008

Leonardo_age

Utilizando o DBlookupComboBox o seu código fica assim:

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!


Responder

Gostei + 0

21/10/2008

Souzaaguiar

cara, vlw demais, era exatamente o que eu precisava...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar