Fórum salvar dados de um combobox #45426

11/07/2004

0

Boa tarde galera,

É o seguinte: eu coloquei um combobox aqui pra selecionar, durante o cadastro de empresas, pessoa física ou jurídica. Na tabela criei o campo pessoa como SmallInt e pensei em atribuir os valores 0 para Jurídica e 1 para Física. Alguem tem alguma sugestão de como faço isso? Como q eu faço depois para o combobox ler os valores (0 ou 1) e durante a consulta mostrar como selecionada a opção que estiver salva no servidor?

Obrigado pela atenção
Té mais...


Wart

Wart

Responder

Posts

11/07/2004

Bon Jovi

Se tiver usando Delphi basta usar um TDBLookupComboBox. E no VS tive q criar propriedades novas usando Combo normal.

Qto a base, nao existe uma tabela TIPO_PESSOA? Caso nao tenha seria melhor ter, por questoes de integridade e modelagem mais legível.

Se nao tiver esses valores via tabela, terá q preencher o dataset na mao:

//Tendo os TFields CODIGO (Integer) e NOME (String) criados em tempo de design

procedure TForm1.Adiciona(Codigo: integer; Nome: string);
begin
  ClientDataSet.Insert;
  ClientDataSet.FieldByName(´CODIGO´).AsInteger := Codigo;
  ClientDataSet.FieldByName(´NOME´).AsString := Nome;
  ClientDataSet.Post;
end;

procedure TForm1.PreencheCombo;
begin 
  ClientDataSet.CreateDataSet;

  DBLookupComboBox1.DataSource := DataSource1; //DataSource do DataSet-Query q grava
  DBLookupComboBox1.DataField := ´PESSOA´; //Campo do DataSet-Query q grava
  
  DBLookupComboBox1.KeyField := ´CODIGO´;
  DBLookupComboBox1.ListField := ´NOME´;
  DBLookupComboBox1.ListSource := DataSource2; // DataSource de um DataSet em memória (ClientDataSet no exemplo)

  //Se tivesse tabela no banco guardando isso bastaria fazer query e nao na mão:
  Adiciona(0, ´Jurídica´);
  Adiciona(1, ´Física´);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PreencheCombo;
end;



Responder

Gostei + 0

12/07/2004

Wart

soh,
mas e se eu criasse essa tabela com os campos
CODIGO
PESSOA
como que eu faria para que, o final, eu tenha o DBLookupComboBox mostrando que o registro tal da tabela empresas tem pessoa física ou jurídica? eu teria que adicionar um campo ID_EMPRESA na tabela TIP_PESSOA e relacioná-lo com o mesmo da tabela empresas?

Plz Help a Noob!!
:wink:


Responder

Gostei + 0

12/07/2004

Wart

up!


Responder

Gostei + 0

12/07/2004

Bon Jovi

eu teria que adicionar um campo ID_EMPRESA na tabela TIP_PESSOA e relacioná-lo com o mesmo da tabela empresas?

Sim..

CREATE TABLE TIPO_PESSOA
(
ID_TIPO_PESSOA INTEGER NOT NULL PRIMARY KEY,
NOME VARCHAR(8)
);

INSERT INTO TIPO_PESSOA VALUES (1, ´Física´);
INSERT INTO TIPO_PESSOA VALUES (2, ´Jurídica´);

CREATE TABLE PESSOA
(
ID_PESSOA INTEGER NOT NULL PRIMARY KEY,
ID_TIPO_PESSOA INTEGER,
NOME VARCHAR(50)
);

ALTER TABLE PESSOA ADD CONSTRAINT FK_PESSOA_TIPO FOREIGN KEY (ID_TIPO_PESSOA) REFERENCES TIPO_PESSOA (ID_TIPO_PESSOA);

No DBLookupComboBox basta usar as propriedades q já mostrei no exemplo.

ListSource = DataSource2 //DataSource pra query SELECT ID_TIPO_PESSOA, NOME FROM TIPO_PESSOA
KeyField = ID_TIPO_PESSOA
ListField = NOME

Caso esteja gravando via .Edit/.Post:

DataSource = DataSource1 //DataSource da query SELECT ID_PESSOA, ID_TIPO_PESSOA, NOME FROM PESSOA
DataField = ID_TIPO_PESSOA

Caso esteja gravando na mão, basta usar a propriedade KeyValue da combo.


Responder

Gostei + 0

13/07/2004

Wart

soh, intendi cara...
so q agora ta acontecendo um negócio aki: quando eu vo defini a chave estrangeira ali da um erro falando que o objeto TIPO_PESSOA ja esta sendo usado:
---------- STATEMENT ----------

alter table EMPRESAS
add constraint FK_EMPRESAS
foreign key (ID_TIPO_PESSOA)
references TIPO_PESSOA(ID_TIPO_PESSOA)


---------- ERROR MESSAGE ----------

This operation is not defined for system tables.
unsuccessful metadata update.
object TIPO_PESSOA is in use .


Responder

Gostei + 0

13/07/2004

Bon Jovi

Isso é um defeito do Interbase/Firebird. Terá que dar shutdown na base pra poder realizar esta operação.


Responder

Gostei + 0

14/07/2004

Wart

[b:0815010605]Bon Jovi[/b:0815010605]
soh...
Ae cara, brigadão pela ajuda ae....


Responder

Gostei + 0

15/07/2004

Lucianols

Mto simples amigo...

Passe par dentro do campo o index da combo box...

veja


Qry.ParamByName(´Pessoa´).AsInteger := EdtPessoa.ItemIndex;

e pra ler.

EdtPessoa.ItemIndex := Qry.FieldByName(´Pessoa´).AsInteger;


se vc quiser mostrar o resultado em outro local pode usar a seguinte função....

[b:fb9e1373c4]procedure iif(Condicao: Boolean, Verdadeiro, Falso: Variant): Variant;
begin
if Condicao then
Result := Verdadeiro
else
Result := False;
end;[/b:fb9e1373c4]

e pra chama-la e assim.

iif( Qry.FieldByName(´Pessoa´).AsInteger = 0, ´Juridica´, ´Física´);

Espero ter pudido ajudar.


Responder

Gostei + 0

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

Aceitar