DBGRID - Dúvida para preencher nome das colunas
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
conhecaObj (que preenche a grid)
estou utilizando o ZEUS p/ fazer a consulta no banco, desta forma
Obrigado
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
Curtidas 0
Respostas
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..
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
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:
2) NA instrução SQL de consulta, dar aliases a todos os campos. Exemplo:
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
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:
2) NA instrução SQL de consulta, dar aliases a todos os campos. Exemplo:
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
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.
É só adaptar à sua necessidade.
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
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.
É só adaptar à sua necessidade.
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
29/05/2012
OPa, que bom que funcionou. Obrigado por compartilhar a solução.
GOSTEI 0