listar nome de campos da tabela

24/08/2010

0

bom dia.. estou precisando saber o nome dos campos da tabela para jogar dentro de um combobox porem somente o nome dos campos tipo idusu, nomusu mais tbn podendo tirar alguns campos que eu nao queira listar tipo senha por exemplo.
Fabio Sanches

Fabio Sanches

Responder

Posts

24/08/2010

Eriley Barbosa

Vamos criar uma procedure para isso: procedure CarregarCampos(parDataSource: TDataSource; cbCampos: TComboBox);
Var
  C : Integer; // Irá auxiliar no laço para realizar a leitura de todos os fields da query pertencente ao formulário atual;
begin
  with(parDataSource)do
  begin
    for C := 0 To DataSet.FieldCount -1 do // A rotina ao lado irá realizar uma laço em todos os Fields
    begin // da query que esta ligado ao DataSource.
      if((DataSet.Fields[C].FieldKind = fkData)and // Apenas os Fields que são do tipo fkData serão adicionados ao
      (DataSet.Fields[C].Tag <> 5))then // ComboBox para que o usuário escolha qual será o campo de pesquisa;
        cbCampos.Items.Add(DataSet.Fields[C].FieldName);
    end;
    cbCampos.ItemIndex := 0; // Coloca o primeiro Field no ComboBox
  end;
end;   Coloque 5 na propriedade Tag do campo que não quer mostrar.   Use assim: CarregarCampos(DataSource1, ComboBox1);
Responder

24/08/2010

Fabio Sanches

so entendendo o codigo.. o q é um campo do tipo FkDATA?  e onde q eu coloco as tags ? eu achei o campo.. mais eu tenho um adoconection, adotable, datasource e um adoquery, sei q preciso adicionar os campos em algum componente qual seria e como seria? desculpe a ignorancia
Responder

24/08/2010

Eriley Barbosa

Você adiciona os campos no que estiver ligado ao datasource, a propriedade Tag pertence a cada campo adicionado. um campo FkDATA é um campo fisico do sua tabela e não calculado ou lookup.
Responder

24/08/2010

Deivison Melo

Envie o comando:   sp_help 'nome_tabela'    para o sql server e trate dentro do combobox.   Sem mais, abraço!   Emanoel Deivison Recife - PE 
Responder

24/08/2010

Fabio Sanches

mais eu adiciono os campos em qual componente adotable?
Responder

24/08/2010

Fabio Sanches

coloquei o dataset e adicionei o adoconnection nele.. mais na hora de conectar da erro sendo q esta tudo funcionando.. aparece ADODataSet1 : Missing CommandText property
Responder

24/08/2010

Eriley Barbosa

Você digitou o SQL na propriedade CommandText?
Responder

24/08/2010

Fabio Sanches

agora fiz.. mais onde q esta a propriedade tag de cada campo.. no fielddef tem precision e size so..
Responder

24/08/2010

Eriley Barbosa

No Fields Editor, basta dar um duplo-Clique no seu adodataset, será aberta a janela Fields Editor, clique com o botão direito nele e no menu de contexto clique em add all fields, serão adicionados todos os campos da sua consulta ao fields editor, clique sobre cada um dos campos e configure a propriedade Tag com o valor 5 para os campos que não devem aparecer ou outro qualquer para os campos que quer que apareça.
Responder

25/08/2010

Fabio Sanches

montei aki nao deu erro no codigo.. o problema esta na hora de chamar a função que esta dando erro..

procedure TFLocUsu.CarregarCampos(parDataSource: TDataSource; cbCampos: TComboBox);
Var
  C : Integer; // Irá auxiliar no laço para realizar a leitura de todos os fields da query pertencente ao formulário atual;
begin
  with(parDataSource)do
  begin
    for C := 0 To DataModule1.DataSetCadUsu.FieldCount -1 do // A rotina ao lado irá realizar uma laço em todos os Fields
    begin // da query que esta ligado ao DataSource.
      if((DataModule1.DataSetCadUsu.Fields[C].FieldKind = fkData)and // Apenas os Fields que são do tipo fkData serão adicionados ao
      (DataModule1.DataSetCadUsu.Fields[C].Tag <> 5))then // ComboBox para que o usuário escolha qual será o campo de pesquisa;
        cbCampos.Items.Add(DataModule1.DataSetCadUsu.Fields[C].FieldName);
    end;
    cbCampos.ItemIndex := 0; // Coloca o primeiro Field no ComboBox
  end;
end;

CarregarCampos(DataSource1, Combobox1);


[Error] ULocUsu.pas(49): Declaration expected but identifier 'CarregarCampos' found
Responder

25/08/2010

Eriley Barbosa

Na seção Private de seu formulário você declarou a função? procedure CarregarCampos(parDataSource: TDataSource; cbCampos: TComboBox); Você colocou este código no onshow do seu formulário ou em um botão? CarregarCampos(DataSource1, Combobox1);

Responder

25/08/2010

Fabio Sanches

coloquei agora no onshow do form e funcionou ai ele carregou o nome do campo.. blz.. mais se eu quiser mascarar isso tipo   case valor of
                 codusu:="Codigo"
por exemplo.. em qual evento q eu faço isso?? no onenter do combo?
Responder

25/08/2010

Eriley Barbosa

Lembra onde você configurou a propriedade Tag, também tem uma propriedade chamada DisplayLabel para cada campo, dai você vai ter de alterar a procedure para: procedure TFLocUsu.CarregarCampos(parDataSource: TDataSource; cbCampos: TComboBox);
Var
  C : Integer; // Irá auxiliar no laço para realizar a leitura de todos os fields da query pertencente ao formulário atual;
begin
  with(parDataSource)do
  begin
    for C := 0 To DataModule1.DataSetCadUsu.FieldCount -1 do // A rotina ao lado irá realizar uma laço em todos os Fields
    begin // da query que esta ligado ao DataSource.
      if((DataModule1.DataSetCadUsu.Fields[C].FieldKind = fkData)and // Apenas os Fields que são do tipo fkData serão adicionados ao
      (DataModule1.DataSetCadUsu.Fields[C].Tag <> 5))then // ComboBox para que o usuário escolha qual será o campo de pesquisa;
        cbCampos.Items.Add(DataModule1.DataSetCadUsu.Fields[C].DisplayLabel);
    end;
    cbCampos.ItemIndex := 0; // Coloca o primeiro Field no ComboBox
  end;
end;
Responder

25/08/2010

Fabio Sanches

show de bola.. tenho uma duvida camarada.. naquele outro form q foi feito.. aquela função q busca o valor do id esta no onexit o meu botao localizar é um botao porem quando eu dou um click na tela para clicar nesse botao localizar ele aparece um registro novo qual evento q preciso colocar para q ele nao faça isso mais continue com a função de buscar os campos. 
Responder

25/08/2010

Eriley Barbosa

procedure TFCadUsu.EIdUsuExit(Sender: TObject);
begin
  if Namedoseubotaoquefazaprocura.Focused = True then
    Exit
  else
  begin
    if (EIdUsu.Text<>'0') and (EIdUsu.Text<>'') then
    begin
      DataModule1.ADOQCadUsu.Close;
      DataModule1.ADOQCadUsu.SQL.Clear;
      DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu=' + EIdUsu.text);
      DataModule1.ADOQCadUsu.Open;
      if (DataModule1.ADOQCadUsu.IsEmpty) then
      begin
        TipOpr:=0;
        Fprincipal.limpaCampos(FCadUsu);
        EIdUsu.Text:='';
        BInserir.Enabled:=true;
        BAlterar.Enabled:=false;
        DataModule1.AdoQCadUsu.Close;
        DataModule1.ADOQCadUsu.SQL.Clear;
        DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
        DataModule1.ADOQCadUsu.Open;
        if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
           EIdUsu.Text := '1' {: então este será o 1º registro}
        else
        begin
           EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
           ENomUsu.SetFocus;
        end;
      end
      else
      begin
        TipOpr:=1;
        BInserir.Enabled:=False;
        BAlterar.Enabled:=True;
        ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;
        EPassUsu.Text := DataModule1.ADOQCadUsu.Fields[2].AsString;
        TipNiv := DataModule1.ADOQCadUsu.Fields[3].AsInteger;
        if (tipniv=1) then
          ComboNivUsu.ItemIndex:=1
        else
          ComboNivUsu.ItemIndex:=2;
      end;
    end
    else
      if (EIdUsu.Text='0') or (EIdUsu.Text='') then
      begin
        TipOpr:=0;
        BInserir.Enabled:=True;
        BAlterar.Enabled:=False;
        DataModule1.AdoQCadUsu.Close;
        DataModule1.ADOQCadUsu.SQL.Clear;
        DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
        DataModule1.ADOQCadUsu.Open;
        if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
           EIdUsu.Text := '1' {: então este será o 1º registro}
        else
        begin
          EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
          ENomUsu.SetFocus;
        end;
      end;
  end;
end; //end procedure
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar