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

01/09/2010

Fabio Sanches

blz.. eu fiz isso.. ele ate tem a funcionalidade de botao ok e tal.. mais como q eu faço para q o valor selecionado na crid va para a outra tela.. qual propriedade ou nome de variavel q ee joga?
Responder

01/09/2010

Fabio Sanches

  desculpe pelo post repetido..deixei o codigo assim


procedure TFLocUsu.BOkClick(Sender: TObject);

begin

if FLocUsu.ShowModal = mrOK then

begin

   if not(DataModule1.ADOQCadUsu.Active) then

     DataModule1.ADOQCadUsu.Open;

  if not(DataModule1.ADOQCadUsu.IsEmpty) then

  begin

   FCadUsu.ENomUsu.Text := DataModule1.ADOTCadUsu.FieldByName('NomUsu').Value;

   FCadUsu.EPassUsu.Text := DataModule1.ADOTCadUsu.FieldByName('PasUsu').Value;

   FCadUsu.ComboNivUsu.ItemIndex := DataModule1.ADOTCadUsu.FieldByName('NivUsu').Value;

   FCadUsu.EIdUsu.Text := DataModule1.ADOTCadUsu.FieldByName('CodUsu').AsString;

   FLocUsu.Close;

 end;

end;



e ta dando a seguinte mensagem de erro
"Cannot make a visible window modal"
Responder

01/09/2010

Eriley Barbosa

Você não seguiu a lógica que te passei: Se você tem um botão no seu formulário de consulta, configure a propriedade ModalResult = mrOK do botão. No seu formulário de cadastro no botão de procura, coloque o seguinte código: if seuformulariodeconsulta.ShowModal = mrOK then begin   //Para funcionar essa linha o sql da query tem que estar select * from tabela   if SuaQuerydecadastro.Locate('ID', Seuformulariodeconsulta.FieldByName('ID').Value, []) then   begin   //joga nos edits, como fizemos no dbnavigator   end;   SeuFormulariodeConsulta.Close; end;   Ai você colocou o código no botão ok do formulário de consulta, neste botão não vai código, somente você tem que configurar a propriedade ModalResult = mrOK do botão.   O código acima que você tem que adaptar para os nomes dos seus componentes e campos, vai no onclick do botão procurar do formulário de cadastro.   Faça as alterações e retorne se tiver alguma duvida. 
Responder

01/09/2010

Fabio Sanches


  eu vou colocar esse codigo no onclick do botao q eu clico para ir para tela de pesquisa?
Responder

01/09/2010

Eriley Barbosa

Isso mesmo, escrevi um artigo que deva interessar a você: https://www.devmedia.com.br/post-17935-Criando-uma-barra-de-ferramentas-para-aplicacoes-MDI-com-as-operacoes-de.html   Por favor divulgue.   Atenciosamente   Eriley
Responder

01/09/2010

Fabio Sanches

vou ler o seu artigo sim e indicar pode ter certeza nao so esse como todos os outros que vc tem la.. continuando aki fiz o seguinte
procedure TFCadUsu.BProcuraClick(Sender: TObject);begin    FPrincipal.limpacampos(FCadUsu);    EIdUsu.SetFocus;    DataModule1.ADOQCadUsu.Close;    DataModule1.ADOQCadUsu.SQL.Clear;    DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');    DataModule1.ADOQCadUsu.Open;    FLocUsu.ShowModal;  if FLocUsu.ShowModal = mrOK thenbegin   //Para funcionar essa linha o sql da query tem que estar select * from tabela    DataModule1.ADOQCadUsu.Close;    DataModule1.ADOQCadUsu.SQL.Clear;    DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');    DataModule1.ADOQCadUsu.Open;  if  DataModule1.ADOQCadUsu.Locate('IdUsu', FLocUsu.FieldByName('IdUSu').Value, []) then  begin  ENomUsu.Text := DataModule1.ADOTCadUsu.FieldByName('NomUsu').Value;  EPassUsu.Text := DataModule1.ADOTCadUsu.FieldByName('PasUsu').Value;  ComboNivUsu.ItemIndex := DataModule1.ADOTCadUsu.FieldByName('NivUsu').Value;  EIdUsu.Text := DataModule1.ADOTCadUsu.FieldByName('CodUsu').AsString;  end;  FLocUsu.Close;end;end;

ta dando erro a linha if  DataModule1.ADOQCadUsu.Locate('IdUsu', FLocUsu.FieldByName('IdUSu').Value, []) then
erro[Error] UCadUsu.pas(286): Undeclared identifier: 'FieldByName'
Responder

01/09/2010

Eriley Barbosa


procedure TFCadUsu.BProcuraClick(Sender: TObject);
begin
    FPrincipal.limpacampos(FCadUsu);    
    if FLocUsu.ShowModal = mrOK then
    begin
        DataModule1.ADOQCadUsu.Close;
        DataModule1.ADOQCadUsu.SQL.Clear;
        DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');
        DataModule1.ADOQCadUsu.SQL.Add('Where CodUsu = ' + DataModule1.ADOTCadUsu.FieldByName('CodUsu').AsString);
        DataModule1.ADOQCadUsu.Open;
        ENomUsu.Text := DataModule1.ADOQCadUsu.FieldByName('NomUsu').Value;
        EPassUsu.Text := DataModule1.ADOQCadUsu.FieldByName('PasUsu').Value;
        ComboNivUsu.ItemIndex := DataModule1.ADOQCadUsu.FieldByName('NivUsu').Value;
        EIdUsu.Text := DataModule1.ADOQCadUsu.FieldByName('CodUsu').AsString;
        EIdUsu.SetFocus;
    end;
  FLocUsu.Close;
end;
end;
Responder

02/09/2010

Fabio Sanches

funcionou.. mais por exemplo eu entrei la .. e escolhi um campo.. depois disso.. se eu clicar na pesquisa denovo e escolher outro.. ele usa sempre o mesmo.. e digamos q no meu grid apareça 5 ele esta pegando o primeiro registro e sempre q eu volto na tela de pesquisa ele vai no meu combobox e lista as informações dos campos e vai duplicando todas as informações
Responder

02/09/2010

Eriley Barbosa

Pela tela que você montou a operação dela é assim:
Escolher um campo, uma operação e digitar o dado a pesquisar no edit e clicar no botão.
Se você após fazer isso, clicar no botão novamente a pesquisa será repetida.
Mas se você escolher outro campo e digitar outro dado no Edit, será feita uma nova pesquisa. Alias quando montei a pesquisa, você estava estava usando:
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear; Mas quando montei o retorno da pesquisa estavamos usando:
DataModule1.ADOTCadUsu Para funcionar sua tela de pesquisa tem que estar usando:
DataModule1.ADOTCadUsu, somente na tela de pesquisa, na tela de cadastro, continua como está.
Para não repetir itens no combobox, basta limpa-lo antes de inserir os itens:   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
  //Limpando o combobox para não repetir itens
  cbCampos.Clear;
  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

02/09/2010

Fabio Sanches

mais eu so estavausando o TCadUsu na tela de cadastro na de pesquisa eu nem cheguei a usar ele nao.. pq estava usando ele pra linkar no dbnavigator
Responder

02/09/2010

Fabio Sanches

tirei o TCadUsu e parou de funcionar o dbnavigator. e na minha tela de pesquisa sequer tem o AdoTCadUsu
Responder

02/09/2010

Eriley Barbosa

Vamos clarear as coisas, na tela de consulta você usa AdoQCadUsu ou ADoTCadUsu? Lembrando que esse ADOTCadUsu, foi você que colocou no seu código eu nem sei para que você está usando ele. No meu entender estamos usando o AdoQCadUsu tanto na tela de cadastro, como na de pesquisa, no meu ver o ADoTCadUsu, é desnecessário. Por favor seja o mais claro possivel, para podermos fechar este tópico. Na tela de Cadastro, você está usando AdoQCadUsu ou ADoTCadUsu?  
Responder

02/09/2010

Eriley Barbosa

Veja que aqui você usa DataModule1.ADOQCadUsu
 
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

02/09/2010

Eriley Barbosa

Veja que aqui você também utiliza DataModule1.ADOQCadUsu
Case CbCampos.ItemIndex of
  0 : begin          // codigo
        if cbpesquisa.ItemIndex = 0 then
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu = ' + ELocUsu.Text);
            DataModule1.ADOQCadUsu.Open;
          end
            else
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu = ' + ELocUsu.Text);
            DataModule1.ADOQCadUsu.Open;
          end;
      end;
  1 : begin            //nome
         if cbpesquisa.ItemIndex = 1 then
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where NomUsu like ' + QuotedStr(Trim(ELocUsu.Text)+'%'));
            DataModule1.ADOQCadUsu.Open;
          end
            else
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where NomUsu like ' + QuotedStr('%'+Trim(ELocUsu.Text)+'%'));
            DataModule1.ADOQCadUsu.Open;
          end;
      end;
  2 : begin            //nivel
        if cbpesquisa.ItemIndex = 2 then
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where nivusu = ' + ELocUsu.Text);
            DataModule1.ADOQCadUsu.Open;
          end
            else
          begin
            DataModule1.ADOQCadUsu.Close;
            DataModule1.ADOQCadUsu.SQL.Clear;
            DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where nivusu = ' + ELocUsu.Text);
            DataModule1.ADOQCadUsu.Open;
          end;
      end;
end;
Testei este código aqui e funcionou, você deve estar fazendo algo de errado na hora de testar.
Responder

02/09/2010

Eriley Barbosa

Então no meu ver não existe ADOTCadUsu em lugar nenhum, não sei da onde você tirou isso.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar