Array
(
)

listar nome de campos da tabela

Fabio Sanches
   - 24 ago 2010

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.

Eriley Barbosa
   - 24 ago 2010

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);

Fabio Sanches
   - 24 ago 2010

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

Eriley Barbosa
   - 24 ago 2010

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.

Emanoel Deivison
   - 24 ago 2010

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

Fabio Sanches
   - 24 ago 2010

mais eu adiciono os campos em qual componente adotable?

Fabio Sanches
   - 24 ago 2010

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

Eriley Barbosa
   - 24 ago 2010

Você digitou o SQL na propriedade CommandText?

Fabio Sanches
   - 24 ago 2010

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

Eriley Barbosa
   - 24 ago 2010

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.

Fabio Sanches
   - 25 ago 2010

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

#Código

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

Eriley Barbosa
   - 25 ago 2010

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);

Fabio Sanches
   - 25 ago 2010

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?

Eriley Barbosa
   - 25 ago 2010

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;

Fabio Sanches
   - 25 ago 2010

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. 

Eriley Barbosa
   - 25 ago 2010

#Código

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

Fabio Sanches
   - 30 ago 2010

funcionou.. esto montando uma tela de pesquisa agora.. e nela terei alguns tratamentos tipo um DBEDIT onde irei inserir os dados.. um combo de onde escolherei o campo a ser pesquisado.. e a forma de pesquisa em outro combo
se é incremental ou "contendo" a determinada palavra no texto.. ai primeira tarefa como q faço para habilitar o meu dbedit para inserção de dados? e em qual evento do dbedit q eu coloco para ele ir listando a pesquisa em um grid q eu ja inseri no form tbn

Eriley Barbosa
   - 30 ago 2010

Como é pesquisa não é dbedit e sim edit.

Fabio Sanches
   - 30 ago 2010

o dbedit é usado para inserir, excluir ou alterar valores do banco entao? so como mdo de alteração

Eriley Barbosa
   - 30 ago 2010

Sim somente para estas operações, toda vez que for uma tela de consulta utilize o edit.

Fabio Sanches
   - 30 ago 2010

ok.. nesse caso eu vou colocar o meu select em qual evento do edit?