DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 15/12/2010 03:27:47 PM
 
Oi, boa tarde alguém conhece alguma maneira de pegar as informações que coloco em cada Description de uma tabela e colocar no título da coluna de um Dbgrid e também povoar um combobox?
 
Vi isso em um sistema onde trabalho e gostei da maneira como foi feita, mas não consegui obter informações de como se fazer isso. Tentei fazer aqui, mas só consegui pegar as infomações  do Display Label do ClientDataSet.
 
Se alguém puder me ajudar agredeço.
AMERICA SOFT INFORMATICA
 


País: Brasil
Estado: SP
Cidade: Sao Paulo
Mensagens: 4
 Postado em: 17/12/2010 01:25:32 PM
 


Citação:
Oi, boa tarde alguém conhece alguma maneira de pegar as informações que coloco em cada Description de uma tabela e colocar no título da coluna de um Dbgrid e também povoar um combobox?
 

Vi isso em um sistema onde trabalho e gostei da maneira como foi feita, mas não consegui obter informações de como se fazer isso. Tentei fazer aqui, mas só consegui pegar as infomações  do Display Label do ClientDataSet.

 

Se alguém puder me ajudar agredeço.
 
LEONARDO XAVIER
 

 


País: Brasil
Estado: RS
Cidade: São Gabriel
Mensagens: 745
 Postado em: 17/12/2010 02:13:07 PM
 
achei alguma coisa mas nao testei.Testa ai e posta aqui. Abraços


[CODE]
var
a:WideString;
begin
a:=dados.ADODataSet1.Sort;
showmessage(a);

[/CODE]
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 17/12/2010 03:21:56 PM
 
Não sei se seria só isso, mas fiz assim:
 
#Código
procedure TfrmTeste.Button1Click(Sender: TObject);
var
aLista: WideString;
begin
  aLista:= sdsClientes.SortFieldNames;
  ShowMessage(aLista);
end;
 
Eu uso assim:
SqlDataSet - DataSetProvider - ClientDataSet
 
Neste caso em específico não achei do jeito que você me passou ent~eo estou testando no SqlDataSet mesmo.
Mesmo assim apesar de não reportar erro, não mostra nada.
 
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 23/12/2010 12:56:16 PM
 

Olá galera, alguém para dar uma luz?

Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 27/12/2010 02:47:45 PM
 

Citação:

Olá galera, alguém para dar uma luz?

Ae galera, um bom Natal atrasado a todos.
 
Alguém para dar uma dica?
PAULO HENRIQUE DOS SANTOS ANDRADE
 


País: Brasil
Estado: PE
Cidade: Petrolina
Mensagens: 179
 Postado em: 28/12/2010 05:15:39 PM
 

Citação:

Citação:

Olá galera, alguém para dar uma luz?

Ae galera, um bom Natal atrasado a todos.
 
Alguém para dar uma dica?
 
tha dando esse erro:
[Error] Unit1.pas(54): Undeclared identifier: 'SortFieldNames'
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 6/1/2011 05:56:56 PM
 
Olá Paulo, acredito que a mensagem que você me  mandou está com erro.
Deivison
 
 

 


País: Brasil
Estado: PE
Cidade: x
Mensagens: 484
 Postado em: 6/1/2011 06:16:25 PM
 
Já experimentou utilizar o banco de dados para buscar essas informações? ou sua aplicação é multi-banco? coisa que você queria amarrar as informações via telas (sistema) sem amarrar ao banco (usando funções do próprio banco para buscar tais informações, variando de banco para banco).
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 7/1/2011 02:54:36 PM
 
Então eu uso o Firebird e não vou trabalhar múlti-banco.
Estou querendo fazer como na imagem a baixo. O que tem no descriptiom de cada tabela povoar no combobox.
 
Queria fazer assim, prq aí já finha tudo no mesmo padrão. Vi isso em um sistema e gostei por isso estou tentando fazer igual.
Valewu pelas dicas.
Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 12/7/2011 02:47:42 PM
 
E aí galera blz? Voltei para tentar resolver esta questão.
Então no meu banco de dados sempre coloco os Descritions. Como abaixo.


Gostaria de aproveitar estas informações em um Combobox: Para ficar assim:


O Combobox que uso hoje funciona normalmente, mas pegos as informações do DisplayLabel, mas tenho que ficar alterando todos eles no CDS de cada tabela.
Como já faço isso ao criar as tabelas queria reaproveitar estas informações, mas não estou conseguindo.

Tentei fazer algum usando: RDB$DESCRIPTION mas, não estou conseguinfo filtrar as informações.

Se alguém pider ajudar, agradeço.


rafmattos
 

 


País: BRASIL
Estado: MS
Cidade: Campo Grande - MS
Mensagens: 440
 Postado em: 12/7/2011 06:21:56 PM
 
Select R.Rdb$Field_Name, R.Rdb$DESCRIPTION from rdb$Relation_Fields R, RDB$FIELDS F where R.Rdb$Relation_Name = :NAME and F.rdb$field_name=R.Rdb$field_source order by R.rdb$field_position, R.rdb$field_name http://mundodoprogramador.wordpress.com/2011/05/16/sqls-interessantes-que-voce-pode-precisar-um-dia-firebird/ -------------------------------------------------------------------------------- Blog: http://mundodoprogramador.wordpress.com/ MSN: rafmattos@hotmail.com Twitter: _rafmattos
rafmattos
 

 


País: BRASIL
Estado: MS
Cidade: Campo Grande - MS
Mensagens: 440
 Postado em: 12/7/2011 06:23:37 PM
 
Select R.Rdb$Field_Name,
R.Rdb$DESCRIPTION

from rdb$Relation_Fields R, RDB$FIELDS F
where R.Rdb$Relation_Name = :NAME and F.rdb$field_name=R.Rdb$field_source
order by R.rdb$field_position, R.rdb$field_name




http://mundodoprogramador.wordpress.com/2011/05/16/sqls-interessantes-que-voce-pode-precisar-um-dia-firebird/

--------------------------------------------------------------------------------
Blog: http://mundodoprogramador.wordpress.com/
MSN: rafmattos@hotmail.com
Twitter: _rafmattos

Emerson
 

 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 12/7/2011 06:45:17 PM
 
a instrução deve ser como esta abaixo:

select rf.rdb$field_name nome, rf.rdb$field_id id, rf.rdb$field_position posicao, rf.rdb$description descricao from rdb$relations r
inner join rdb$relation_fields rf on rf.rdb$relation_name = r.rdb$relation_name
where r.rdb$relation_name = 'NOME_DA_SUA_TABELA'

ocorre que o campo description é um memo, então você precisa fazer o tratamento necessário para obter o valor dele.

Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 13/7/2011 05:45:58 PM
 
Olá galera estive queimando a cachola aqui, mas ainda não consegui fazer funcionar.
A instrução que me passaram, roda de boa no IBExpert.

Estou tentando povoar o Combobox, mas ainda nada. Alguém pode dar uma olhada na minha Unit de teste?
Fiz a instrução abaixo, mas não estou entendendo como jogar ela para peencher ele.

#Código

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WideStrings, DBXFirebird, FMTBcd, DB, SqlExpr, Provider,
  DBClient;

type
  TForm2 = class(TForm)
    cbxField: TComboBox;
    Conn: TSQLConnection;
    sdsEstados: TSQLDataSet;
    dspEstados: TDataSetProvider;
    cdsEstados: TClientDataSet;
    cdsEstadosCODIGO: TIntegerField;
    cdsEstadosMARCA: TStringField;
    cdsEstadosATIVO: TStringField;
    cdsEstadosNOME: TStringField;
    cdsEstadosSIGLA: TStringField;
    cdsEstadosICMS: TIntegerField;
    cdsEstadosIBGE: TIntegerField;
    cdsEstadosDATAINC: TSQLTimeStampField;
    cdsEstadosDATAALT: TSQLTimeStampField;
    cdsEstadosRESPONSAVEL: TIntegerField;
    DS: TDataSource;
  private
  function GetCampos(tablename: string): integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

function TForm2.GetCampos(tablename: string): integer;
var
  Qry : TSQLQuery;
begin
  Qry := TSQLQuery.Create(self);
  Qry.SQLConnection := Conn;
  Qry.SQL.Add('select rf.rdb$description descricao from rdb$relations r inner join rdb$relation_fields rf on rf.rdb$relation_name = r.rdb$relation_name where r.rdb$relation_name = '+tablename+'');
  Qry.Open;
  Result := Qry.Fields[0].AsInteger;
end;

end.

Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 13/7/2011 05:46:04 PM
 
Olá galera estive queimando a cachola aqui, mas ainda não consegui fazer funcionar.
A instrução que me passaram, roda de boa no IBExpert.

Estou tentando povoar o Combobox, mas ainda nada. Alguém pode dar uma olhada na minha Unit de teste?
Fiz a instrução abaixo, mas não estou entendendo como jogar ela para peencher ele.

#Código

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WideStrings, DBXFirebird, FMTBcd, DB, SqlExpr, Provider,
  DBClient;

type
  TForm2 = class(TForm)
    cbxField: TComboBox;
    Conn: TSQLConnection;
    sdsEstados: TSQLDataSet;
    dspEstados: TDataSetProvider;
    cdsEstados: TClientDataSet;
    cdsEstadosCODIGO: TIntegerField;
    cdsEstadosMARCA: TStringField;
    cdsEstadosATIVO: TStringField;
    cdsEstadosNOME: TStringField;
    cdsEstadosSIGLA: TStringField;
    cdsEstadosICMS: TIntegerField;
    cdsEstadosIBGE: TIntegerField;
    cdsEstadosDATAINC: TSQLTimeStampField;
    cdsEstadosDATAALT: TSQLTimeStampField;
    cdsEstadosRESPONSAVEL: TIntegerField;
    DS: TDataSource;
  private
  function GetCampos(tablename: string): integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

function TForm2.GetCampos(tablename: string): integer;
var
  Qry : TSQLQuery;
begin
  Qry := TSQLQuery.Create(self);
  Qry.SQLConnection := Conn;
  Qry.SQL.Add('select rf.rdb$description descricao from rdb$relations r inner join rdb$relation_fields rf on rf.rdb$relation_name = r.rdb$relation_name where r.rdb$relation_name = '+tablename+'');
  Qry.Open;
  Result := Qry.Fields[0].AsInteger;
end;

end.

Emerson
 

 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 14/7/2011 12:57:46 AM
 
para não ter problema quanto ao envolvimento da string entre as aspas, use QuotedStr().

outra coisa: porque você está retornando um inteiro? você não quer uma string com a descrição? não entendi essa parte....

de qualquer forma vai aí a minha sugestão:

// procedimento para extrair a descrição de todos os campos da tabela.
// o retorno será uma StringList no formato CAMPO=DESCRICAO.
// se a descricao estiver vazia, será considerado o próprio nome do campo.
// a descrição pode ter mais de uma linha. se quiser retornar todas as linhas basta
//
desconsiderar o uso da função Linha1(), que pode ser observada na linha
//      Descricao := Trim(Linha1(Qry.FieldByName('descricao').AsString));
procedure TForm1.GetCampos(tablename: string; var Listagem: TStringList);
var
  Qry : TSQLQuery;
  Campo, Descricao: string;

  function Linha1(Texto: string): string;
  var
    i: integer;
  begin
    Result := '';
    if Length(Texto)>0 then
      for i := 1 to Length(Texto) do
      begin
        if Texto[i] in [#13, #10] then break;
        Result := Result + Texto[i];
      end;
  end;
begin
  Listagem.Clear;

  Qry := TSQLQuery.Create(self);
  Qry.SQLConnection := SQLConnection1;
  Qry.SQL.Add('select rdb$field_name campo, rdb$description descricao');
  Qry.SQL.Add('from rdb$relation_fields where rdb$relation_name = '+QuotedStr(tablename));
  Qry.Open;

  while not Qry.Eof do
  begin
    Campo := Trim(Qry.FieldByName('campo').AsString);
    if Trim(Qry.FieldByName('descricao').AsString)='' then
      Descricao := Campo
    else
      Descricao := Trim(Linha1(Qry.FieldByName('descricao').AsString));

    Listagem.Add(Campo+'='+Descricao);
    Qry.Next;
  end;
end;

// para usar a rotina acima será necessário declarar uma variável de tipo TStringList
// e depois usar seu conteúdo como desejar:
procedure TForm1.Button1Click(Sender: TObject);
var
  Lista: TStringList;
begin
  Lista := TStringList.Create;
  GetCampos('ICMS', Lista);
  Memo1.Lines.Assign(Lista);
end;


//pode também ser ausada assim:
procedure TForm1.Button2Click(Sender: TObject);
var
  Lista: TStringList;
begin
  Lista := TStringList.Create;
  GetCampos('ICMS', Lista);
  ShowMessage('Conteúdo do campo '+EditNomeCampo.Text+#13+Lista.Values[EditNomeCampo.Text]);
end;


note que está sendo usado o recurso da própria StringList para obter a descricao do campo. No caso, Values[].

Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 14/7/2011 03:36:10 PM
 
Mano não to entendendo este negócio..kkk
Não está listando nada no Combobox.

#Código

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WideStrings, DBXFirebird, FMTBcd, StdCtrls, DB, DBClient, Provider,
  SqlExpr;

type
  TForm4 = class(TForm)
    Conn: TSQLConnection;
    sdsEstados: TSQLDataSet;
    dspEstados: TDataSetProvider;
    cdsEstados: TClientDataSet;
    cdsEstadosCODIGO: TIntegerField;
    cdsEstadosMARCA: TStringField;
    cdsEstadosATIVO: TStringField;
    cdsEstadosNOME: TStringField;
    cdsEstadosSIGLA: TStringField;
    cdsEstadosICMS: TIntegerField;
    cdsEstadosIBGE: TIntegerField;
    cdsEstadosDATAINC: TSQLTimeStampField;
    cdsEstadosDATAALT: TSQLTimeStampField;
    cdsEstadosRESPONSAVEL: TIntegerField;
    DS: TDataSource;
    cbxCampo: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
  procedure GetCampos(tablename: string; var Listagem: TStringList);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

{ TForm4 }

procedure TForm4.GetCampos(tablename: string; var Listagem: TStringList);
var
  Qry : TSQLQuery;
  Campo, Descricao: string;

  function Linha1(Texto: string): string;
  var
    i: integer;
  begin
    Result := '';
    if Length(Texto)>0 then
      for i := 1 to Length(Texto) do
      begin
        if Texto[i] in [#13, #10] then break;
        Result := Result + Texto[i];
      end;
  end;
begin
  Listagem.Clear;

  Qry := TSQLQuery.Create(self);
  Qry.SQLConnection := Conn;
  Qry.SQL.Add('select rdb$field_name campo, rdb$description descricao');
  Qry.SQL.Add('from rdb$relation_fields where rdb$relation_name = '+QuotedStr(tablename));
  Qry.Open;

  while not Qry.Eof do
  begin
    Campo := Trim(Qry.FieldByName('campo').AsString);
    if Trim(Qry.FieldByName('descricao').AsString)='' then
      Descricao := Campo
    else
      Descricao := Trim(Linha1(Qry.FieldByName('descricao').AsString));

    Listagem.Add(Campo+'='+Descricao);
    Qry.Next;
  end;
end;

procedure TForm4.FormCreate(Sender: TObject);
var
  Lista: TStringList;
begin
  Lista.Create;
  GetCampos('Descricao', Lista);
  //cbxCampo.Items.Add(Qry.FieldByName('description').AsString);
  cbxCampo.Items.Add(Lista.ToString);
end;
end.

Rumao
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 88
 Postado em: 14/7/2011 03:39:14 PM
 
No final também tentei assim:

#Código

procedure TForm4.FormCreate(Sender: TObject);
var
  Lista: TStringList;
begin
  Lista.Create;
  //cbxCampo.Items.Add(Qry.FieldByName('description').AsString);
  GetCampos('Descricao', Lista);
  cbxCampo.Items.Add(Lista.Values['Descricao']);
end;


Mas dá Access violation
Emerson
 

 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 14/7/2011 06:07:31 PM
 
o nome da sua tabela é Descricao ?

procedure TForm4.FormCreate(Sender: TObject);
var
  Lista: TStringList;
begin
  Lista.Create;
  GetCampos('Descricao', Lista);
  //cbxCampo.Items.Add(Qry.FieldByName('description').AsString);
  cbxCampo.Items.Add(Lista.ToString);
end;


o correto seria:

procedure TForm4.FormCreate(Sender: TObject);
var
  i: integer;
begin
  Lista := TStringList.Create; // Lista está declarada na cláusula private do form
  GetCampos('TABELA', Lista);

  // preenche o combo com as descrições encontradas
  cbxCampo.Clear;
  for i := 0 to Lista.Count - 1 do
    cbxCampo.Items.Add(Lista.Values[Lista.Names[i]]);

  // posiciona o combo no primeiro item
  try
    cbxCampo.ItemIndex := 0;
  except
  end;
end;

// procedimento para mostrar como obter o nome real do campo a partir do item selecionado no combo.
procedure TForm15.cbxCampoClick(Sender: TObject);
begin
  ShowMessage('Nome do campo no banco: '+Lista.Names[cbxCampo.ItemIndex]);
end;

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03