Fórum Dados de 2 campos em apenas 1 numa Grid #340069
09/04/2007
0
Não sei se esta muito claro o título, mas vou explicar o q tenho tentado fazer.
Tenho dois tipos de dados diferentes em um bd, CODINOME e NOME. São campos separados, mas gostaria de colocar numa grid, em apenas um campo da grid, as duas informações, ficando mais ou menos assim:
CODINOME (NOME).
Como eu tenho que fazer o SQL no ClientDataSet pra ele me retornar isso?
Grato pela ajuda.
Aersoftware
Curtir tópico
+ 0Posts
09/04/2007
Cabelo
Mas independente, você deve achar o caracter de concatenação e usá-lo
Ex..
No Firebird ficaria assim
select (CODINOME || ´ ( ´ || NOME || ´)´) as D_CAMPO from Tabela order by NOME
só um exemplo..
iria retornar a lista de
CODINOME (NOME)
Exatamente como está acima.. se quiser pode trocar os parênteses por um hífem
select (CODINOME || ´ - ´ || NOME) as D_CAMPO from Tabela order by NOME
irá retonar uma lista com este formato :
CODINOME - NOME
No DBGrid, você indica o nome do campo sendo D_CAMPO
Isso fará com o que os dados que você concatenou no sql, apareça no grid como você quer..
um abraço
Gostei + 0
09/04/2007
Robsonselzelin
dataset.fieldbyname(´campo_calculado´).asstring := dataset.fieldbyname(´campo1´).asstring + ´ - ´ + dataset.fieldbyname(´campo2´).asstring;
Gostei + 0
09/04/2007
Cabelo
Sua idéia é boa..
mas ao que me consta.. campo calculado demora mais que um simples sql, já que o delphi é que irá fazer o processamento, depois mesmo de ter dado um sql no BD..
Acho inviável..
Gostei + 0
10/04/2007
Aersoftware
Estou usando o Firebird.
Eu já usei esse comando pra colocar os dois campos num TEdit. Isso até que foi fácil, pensei q seria parecido numa Grid, mas aí percebi que não tem nada a ver, é pelo Sql mesmo.
Acho que o que faltou foi o caractere de concatenação, vou tentar assim.
Cabelo, só não entendi no exemplo o ´as D_CAMPO´.. o que seria?
Pois num sql normalzinho eu faria ´Select * From Tabela´..
Gostei + 0
11/04/2007
Cabelo
Algumas dicas..
Sempre que você der um select, não use ´*´, é melhor você indicar todos os nomes dos campos, pois ganha em performance, pois quando você dá um select * from Tabela, o firebird, vai primeiro nas tabelas relacionais, e olha os fields da tabela em questão, quando se usa um caracter coringa, depois, reformula o sql com os dields selecionados, e aplica na tabela em questão, se você perder o mínimo de tempo digitando os nomes dos campos é muito melhor..
O firebird mantém um padrão de nomeação de campos, que fica armazenado em uma tabela relaciona relation$fields, quando ele não acha um field selecionado, ele usa um nome padrão, mas nós podemos alterar este nome, que é o caso, quando dou um ´as´, estou nomeando o campo que irá retornar o selecionado..
faça seu select assim
select campo1, campo2, campo3, campo4, (campo1 | ´ - ´ | campo2) as D_CONCATENA from tabela
você vai ver que se pegar este sql e executar em um editor de sql, perceba que o nome do campo concatenado será D_CONCATENA como você havia avisado ao firebird..
qualquer dúvida posta aí..
um abraço.
Gostei + 0
11/04/2007
Aersoftware
Bom, eu fiz um teste no Select aqui, colocando pra ele procurar somente os campos que eu precisava, e cada vez dava um erro dizendo que ele nao tava achando um dos campos da tabela. Acabou que eu tive que botar todos os campos pra ele funcionar, ficou grande, assim:
´Select PKCOD_PERSONAGEM_COMICS, FKCOD_EDITORA_ORIGINAL, FKCOD_NUCLEO, CODINOME_PERSONAGEM_COMICS,´ + ´NOME_PERSONAGEM_COMICS, NOME_COMPLETO_COMICS, CODINOME_ORIGINAL_COMICS, TIPO_PERSONAGEM_COMICS,´ + ´IMAGEM_PERSONAGEM_COMICS, NOME_IMAGEM_PERSONAGEM_COMICS, ANO_CRIACAO_PERSONAGEM_COMICS,´ + ´ALTURA_PERSONAGEM_COMICS, PESO_PERSONAGEM_COMICS, COR_OLHOS_PERSONAGEM_COMICS,´ + ´COR_CABELOS_PERSONAGEM_COMICS, BASE_OPERACOES_COMICS, PRIMEIRA_APARICAO_EUA_COMICS,´ + ´PRIMEIRA_APARICAO_BRA_COMICS, OUTROS_CODINOMES_COMICS, PODERES_HABILIDADES_COMICS,´ + ´DESCRICAO_PERSONAGEM_COMICS,´ + ´(CODINOME_PERSONAGEM_COMICS | ´-´ | NOME_PERSONAGEM_COMICS) as D_CONCATENA From TB_PERSONAGENS_COMICS Order by CODINOME_PERSONAGEM_COMICS´;
Se eu deixar o código assim:
(CODINOME_PERSONAGEM_COMICS | ´-´ | NOME_PERSONAGEM_COMICS) as D_CONCATENA
Ele da erro, acho que por causa do operador ´-´. Se eu tiro ele, funciona perfeitamente, mas mesmo assim, continua me listando só o ´Codinome´.
Não sei se tem algo errado com a Grid, pq ela ta ligada num ClientDataSet de consulta de Personagem. Eu tenho dois Clients pra Personagens, um pras operações normais (inclusão, exclusão, etc) e outro só pra consultas. A Grid ta ligada nele.
Pq assim, pra explicar o que estou tentando fazer: Tenho duas Grids e dois botoes, (inserir e apagar). Uma delas, só vai me consultar o nome do Personagem pra eu incluir na outra, mas o que vou pegar é o código desse personagem.
O que surgiu de dúvida pra fazer isso é que pode ter mais de um Personagem com o mesmo ´Codinome´, o que vai fazer a diferença é o ´Nome´, por isso queria colocar do lado, pra diferenciar eles.
Gostei + 0
12/04/2007
Cabelo
´Select PKCOD_PERSONAGEM_COMICS, FKCOD_EDITORA_ORIGINAL, FKCOD_NUCLEO, CODINOME_PERSONAGEM_COMICS, NOME_PERSONAGEM_COMICS, NOME_COMPLETO_COMICS, CODINOME_ORIGINAL_COMICS, TIPO_PERSONAGEM_COMICS, IMAGEM_PERSONAGEM_COMICS, NOME_IMAGEM_PERSONAGEM_COMICS, ANO_CRIACAO_PERSONAGEM_COMICS, ALTURA_PERSONAGEM_COMICS, PESO_PERSONAGEM_COMICS, COR_OLHOS_PERSONAGEM_COMICS, COR_CABELOS_PERSONAGEM_COMICS, BASE_OPERACOES_COMICS, PRIMEIRA_APARICAO_EUA_COMICS, PRIMEIRA_APARICAO_BRA_COMICS, OUTROS_CODINOMES_COMICS, PODERES_HABILIDADES_COMICS, DESCRICAO_PERSONAGEM_COMICS, (CODINOME_PERSONAGEM_COMICS ||´´ - ´´|| NOME_PERSONAGEM_COMICS) as D_CONCATENA From TB_PERSONAGENS_COMICS Order by CODINOME_PERSONAGEM_COMICS´;
Assim funciona..
Quando te passei o caracter de concatenação, achei que saberia usar.. no sql no delphi, você deve usar exatamente como está a cima..
um abraço..
Gostei + 0
12/04/2007
Aersoftware
Ficou assim:
DmDados.ClientPersonagensComicsCons.Close; With DmDados.SqlPersonagensComics do begin close; CommandText := ´Select PKCOD_PERSONAGEM_COMICS, FKCOD_EDITORA_ORIGINAL, FKCOD_NUCLEO, CODINOME_PERSONAGEM_COMICS, ´ + ´NOME_PERSONAGEM_COMICS, NOME_COMPLETO_COMICS, CODINOME_ORIGINAL_COMICS, TIPO_PERSONAGEM_COMICS,´ + ´IMAGEM_PERSONAGEM_COMICS, NOME_IMAGEM_PERSONAGEM_COMICS, ANO_CRIACAO_PERSONAGEM_COMICS,´ + ´ALTURA_PERSONAGEM_COMICS, PESO_PERSONAGEM_COMICS, COR_OLHOS_PERSONAGEM_COMICS,´ + ´COR_CABELOS_PERSONAGEM_COMICS, BASE_OPERACOES_COMICS, PRIMEIRA_APARICAO_EUA_COMICS,´ + ´PRIMEIRA_APARICAO_BRA_COMICS, OUTROS_CODINOMES_COMICS, PODERES_HABILIDADES_COMICS,´ + ´DESCRICAO_PERSONAGEM_COMICS,´ + ´(CODINOME_PERSONAGEM_COMICS ||´´ - ´´|| NOME_PERSONAGEM_COMICS) as D_CONCATENA From TB_PERSONAGENS_COMICS Order by CODINOME_PERSONAGEM_COMICS´; open; end; DmDados.ClientPersonagensComicsCons.Open;
Gostei + 0
13/04/2007
Cabelo
Tem que ser D_CONCATENA....
O Label do field, pode ser qualquer um mas o fieldname tem que ser D_CONCATENA, e se você tiver campos calculados no dataset, é necessário você inserir o D_CONCATENA lá tb, se for o caso.. certo??
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)