DBGRID - Dúvida para preencher nome das colunas

Delphi

29/05/2012

Boa noite galera, sou novo aqui no fórum, e pra variar estou com uma dúvida em relação ao preenchimento dos nomes
na minha DBGRID. Vou colocar um trecho de meu código para que possam entender de que forma estou trazendo os dados para a grid, facilitando assim a resolução do meu problema.

botão de consulta

var
    consCidade : Cidade;
begin
  inherited;
    consCidade := Cidade.CrieObjeto;
    consCidade.setDescricao(edt_Descricao.Text);
    if edt_Id.Text <>  then
        consCidade.setId(strtoint(edt_Id.Text));
    if not umaCtrlCidade.Buscar(consCidade) then
        MessageDlg(Nenhum registro encontrado!,  mtInformation, [mbOK], 0);
    consCidade.Destrua_Se;
    edt_Id.Clear;
    edt_Descricao.Clear;
end;


conhecaObj (que preenche a grid)

procedure TFrmConCidade.ConhecaObj(vCidade: Cidade);
begin
    umaCidade := vCidade;
    umaCtrlCidade := CtrlCidade.CrieObjeto;
    umFrmCadCidade := TFrmCadCidade.Create(nil);
    Self.gridConsulta.DataSource := umaCtrlCidade.GetDS;
end;



estou utilizando o ZEUS p/ fazer a consulta no banco, desta forma

begin
    e :=  and ;
    onde :=  where;
    prim := true;
    umaCidade := Cidade(obj);
    sql := select * from cidade;
    if umaCidade.getId <> 0 then
    begin
        if prim then  //SE FOR O PRIMEIRO, SETA COMO FLAG COMO FALSO PQ É O PRIMEIRO
        begin
            prim := false;
            sql := sql+onde;
        end
        else //SE NAO, COLOCA CLAUSULA AND PARA JUNTAR CONDIÇOES
            sql := sql+e;
        sql := sql+ idcidade = +inttostr(umaCidade.getId); //COLOCA CONDIÇAO NO SQL
    end;
    if umaCidade.getDescricao <>  then
    begin
        if prim then
         begin
            prim := false;
            sql := sql+onde;
        end
        else
            sql := sql+e;
        sql := sql+ descricao like +quotedstr(%+umaCidade.getDescricao+%);
    end;
    with umDM do
    begin
        QCidade.Close;
        QCidade.sql.Text := sql;
        QCidade.Open;
        if QCidade.RecordCount > 0 then
          result := True
        else
          result := false;
    end;
end;



Obrigado
Evandro Foster

Evandro Foster

Curtidas 0

Respostas

Evandro Foster

Evandro Foster

29/05/2012

Esqueci de citar... estou com dúvida em relação a qual forma eu poderia preencher os nomes das colunas na grid (nome e tamanho de preferencia), pois do jeito que está o nome da coluna é perenchido com o nome que está na tabela..

já tentei setar o nome das colunas na hora de criar o formulario, mas da erro na hora da consulta e nao preenche nada dai..
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/05/2012

Eu indicaria uma das duas formas:
1) Após abrir a tabela, alterar o DisplayLabel de cada campo da Query. Por exemplo:
query.FieldByName(´CliNOME_CLIENTE´).DisplayLabel = ´Nome do Cliente´;
query.FieldByName(´VenDATA_HORA´).displayLabel = ´Data/Hora da Venda´;


2) NA instrução SQL de consulta, dar aliases a todos os campos. Exemplo:
SELECT CliNOME_CLIENTE ´Cliente´, CliENDERECO ´Endereço´, CliCODIGO_VENDEDOR ´Vendedor´ FROM TbCLIENTES
GOSTEI 0
Evandro Foster

Evandro Foster

29/05/2012

Eu indicaria uma das duas formas:
1) Após abrir a tabela, alterar o DisplayLabel de cada campo da Query. Por exemplo:
query.FieldByName(´CliNOME_CLIENTE´).DisplayLabel = ´Nome do Cliente´;
query.FieldByName(´VenDATA_HORA´).displayLabel = ´Data/Hora da Venda´;


2) NA instrução SQL de consulta, dar aliases a todos os campos. Exemplo:
SELECT CliNOME_CLIENTE ´Cliente´, CliENDERECO ´Endereço´, CliCODIGO_VENDEDOR ´Vendedor´ FROM TbCLIENTES




query.FieldByName(´CliNOME_CLIENTE´).DisplayLabel = ´Nome do Cliente´;
query.FieldByName(´VenDATA_HORA´).displayLabel = ´Data/Hora da Venda´;


deu certo desta forma, obrigado :)


No caso, na hora da consulta existe alguma forma de eu jogar o Nome do EStado na grid ao invez do ID????


obrigado
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/05/2012

O Estado do cliente? Para isso você pode usar um join na consulta. Seria algo mais ou menos assim: considerando as tabelas TbCLIENTES, TbESTADOS e TbCIDADE.
SELECT Cli.CliNOME, Cli.CliENDERECO, Est.EstDESCRICAO, Cid.CidDESCRICAO
FROM TbCLIENTES Cli
LEFT JOIN TbESTADOS Est ON Cli.CliID_ESTADO = Est.EstID_ESTADO
LEFT JOIN TbCIDADES Cid ON Cli.CliID_CIDADE = Cid.EstID_CIDADE


É só adaptar à sua necessidade.
GOSTEI 0
Evandro Foster

Evandro Foster

29/05/2012

O Estado do cliente? Para isso você pode usar um join na consulta. Seria algo mais ou menos assim: considerando as tabelas TbCLIENTES, TbESTADOS e TbCIDADE.
SELECT Cli.CliNOME, Cli.CliENDERECO, Est.EstDESCRICAO, Cid.CidDESCRICAO
FROM TbCLIENTES Cli
LEFT JOIN TbESTADOS Est ON Cli.CliID_ESTADO = Est.EstID_ESTADO
LEFT JOIN TbCIDADES Cid ON Cli.CliID_CIDADE = Cid.EstID_CIDADE


É só adaptar à sua necessidade.



Opa beleza cara deu certo :) Tive que fazer algumas adaptacoes no código e na TZQuery pra funcionar mas ta 100% agora.. Já serviu de exemplo p/ os proximos caso de uso!

Vou deixar o code aqui.. se alguem um dia precisar
function DaoCidade.Buscar(obj: TObject): Boolean;
var
    prim: Boolean;
    sql, e, onde: string;
    umaCidade: Cidade;
begin
    e :=  and ;
    onde :=  where;
    prim := true;
    umaCidade := Cidade(obj);
    sql := select c.idcidade,c.descricao,c.cep,c.ddd,c.estado_idestado,e.descricao,c.datacadastro,c.dataultalteracao from cidade c inner join estado as e on c.estado_idestado = e.idestado;
    if umaCidade.getId <> 0 then
    begin
        if prim then  //SE FOR O PRIMEIRO, SETA COMO FLAG COMO FALSO PQ É O PRIMEIRO
        begin
            prim := false;
            sql := sql+onde;
        end
        else //SE NAO, COLOCA CLAUSULA AND PARA JUNTAR CONDIÇOES
            sql := sql+e;
        sql := sql+ idcidade = +inttostr(umaCidade.getId); //COLOCA CONDIÇAO NO SQL
    end;
    if umaCidade.getDescricao <>  then
    begin
        if prim then
         begin
            prim := false;
            sql := sql+onde;
        end
        else
            sql := sql+e;
        sql := sql+ c.descricao like +quotedstr(%+umaCidade.getDescricao+%);
    end;
    with umDM do
    begin

        QCidade.Close;
        QCidade.sql.Text := sql;
        QCidade.Open;
        // Altera os dados na DBGRID
        QCidade.FieldByName(idcidade).DisplayLabel := ID;
        QCidade.FieldByName(descricao).DisplayLabel := Descrição;
        QCidade.FieldByName(estado_idestado).DisplayLabel := IDEst;
        QCidade.FieldByName(descricao_1).DisplayLabel := Estado;
        QCidade.FieldByName(cep).DisplayLabel := CEP;
        QCidade.FieldByName(ddd).DisplayLabel := DDD;
        QCidade.FieldByName(datacadastro).DisplayLabel := Data de Cadastro;
        QCidade.FieldByName(dataultalteracao).DisplayLabel := Última Alteração;

        QCidade.FieldByName(idcidade).DisplayWidth:= 5;
        QCidade.FieldByName(descricao).DisplayWidth := 30;
        QCidade.FieldByName(estado_idestado).DisplayWidth := 5;
        QCidade.FieldByName(descricao_1).DisplayWidth := 15;
        QCidade.FieldByName(cep).DisplayWidth := 9;
        QCidade.FieldByName(ddd).DisplayWidth := 5;
        QCidade.FieldByName(datacadastro).DisplayWidth := 10;
        QCidade.FieldByName(dataultalteracao).DisplayWidth := 10;
        //--------------------------------------------------------



        if QCidade.RecordCount > 0 then
          result := True
        else
          result := false;
    end;
end;




Valeu
abç
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/05/2012

OPa, que bom que funcionou. Obrigado por compartilhar a solução.
GOSTEI 0
POSTAR