salvar dados de um combobox
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...
É 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
Curtidas 0
Respostas
Bon Jovi
11/07/2004
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:
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;
GOSTEI 0
Wart
11/07/2004
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:
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:
GOSTEI 0
Wart
11/07/2004
up!
GOSTEI 0
Bon Jovi
11/07/2004
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.
GOSTEI 0
Wart
11/07/2004
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 .
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 .
GOSTEI 0
Bon Jovi
11/07/2004
Isso é um defeito do Interbase/Firebird. Terá que dar shutdown na base pra poder realizar esta operação.
GOSTEI 0
Wart
11/07/2004
[b:0815010605]Bon Jovi[/b:0815010605]
soh...
Ae cara, brigadão pela ajuda ae....
soh...
Ae cara, brigadão pela ajuda ae....
GOSTEI 0
Lucianols
11/07/2004
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.
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.
GOSTEI 0