Fórum DBGRID - Dúvida para preencher nome das colunas #417670

29/05/2012

0

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

Responder

Posts

29/05/2012

Evandro Foster

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..
Responder

Gostei + 0

30/05/2012

Joel Rodrigues

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
Responder

Gostei + 0

30/05/2012

Evandro Foster

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
Responder

Gostei + 0

31/05/2012

Joel Rodrigues

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.
Responder

Gostei + 0

31/05/2012

Evandro Foster

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ç
Responder

Gostei + 0

01/06/2012

Joel Rodrigues

OPa, que bom que funcionou. Obrigado por compartilhar a solução.
Responder

Gostei + 0

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

Aceitar