Dividir coluna de tabela e duas no dbgrigd

Delphi

09/07/2011

Pessoal boa tarde!   Preciso muito da ajuda de vcs, tenho tabela que os dados estão da seguinte forma:   Campo1   Campo2 teste1       2 teste1       3 teste1       4 teste2       1 teste2       3 teste2       4   Preciso mostrar no dbgrid da seguinte forma:   Campo1   Campo2          Campo1    Campo2 teste1      2                     teste2      1      teste1      3                     teste2      3 teste1      4                     teste2      4   Ou seja, preciso dividir uma coluna da tabela em duas do dbgrid, não se como fazer. Uso D7 e FB1.5   Obrigado.   Marcelo
Marcelo Vieira

Marcelo Vieira

Curtidas 0

Respostas

Marcelo Vieira

Marcelo Vieira

09/07/2011

Será que nínguem sabe?
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Ninguem mesmo??????????
GOSTEI 0
Eduardo Marcolongo

Eduardo Marcolongo

09/07/2011

Boa tarde.
Acho que com DBGrid vc não consiga, não pode ser stringgrid ?
GOSTEI 0
Thiago Mury

Thiago Mury

09/07/2011

Realmente, em um DBGrid não irá conseguir fazer isso. Como o Eduardo disse você pode usar o StringGrid. Mas terá que carregar manualmente as informações.
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Estou tentando com o ListView, podem dar alguem exemplo, no caso do dbgrid, será que não tem nenhuma instrução em SQL que faça isto?  Obrigado.   Marcelo 
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

O DEvEXpress tem uma gird que faz exatamente isto.. Não sei se nos componentes da Jedi tem esta Grid.
acredito que vale a pena dar uma procurada
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

O DevExpress é pago e o JEDI segundo o que vi não funciona com o RXLIB e preciso dele, ainda acho que dá pra fazer com os componentes nativos ou com alguma instrução sql. Continuo atrás da solução. Obrigado. Marcelo
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Alguém tem mais alguma sugestão?   Marcelo
GOSTEI 0
Carlos Catanduva

Carlos Catanduva

09/07/2011

Será q não daria pra vc fazer usando duas Querys? Uma retornaria "x" consula e a outra "y" consulta.....seria bem na gambiarra mais se vc precisa fazer o q..... Bom se conseguir posta ai pra gente q pode ser util para alguem em algum momento Abraço
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Pois é amigo, é o que estou tentando mas até agora nenhuma instrução sql me retornou o resultado que preciso, tentei tb com o listview e quase me deu o resultado, mas até o momento nada.   Marcelo
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Pessoal, ainda procuro a solução!!!!!!   Marcelo 
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

Vc conhece o componente DBCtrlGrid ???

Formatando ele devidamente , vc consegue sem digitar praticamente nada este efeito que vc quer obter

Fiz aqui rapidinho sem nenhuma formatação Zero praticamente





GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Amigo, não consegui o resultado, me informe as configurações e se vc usou vários DBCtrlGrids com dbedits ligados a eles, outra coisa as colunas variam de quantidade, ou seja, em determinados momentos podem haver 10 ou 20. Na verdade é um sistema para auto escola onde na tabela de horários de aulas eu tenho todos os horários do dia com respectivo veículo então aparece assim na tabela: campo hora aula    campo veiculo 07:00                  corsa ... 21:00                  corsa 07:00                  pálio ... 21:00                  pálio   Então tenho que montar um grid onde os véiculo aparecam não verticalmente nos seus horário mas sim horizontalmente cada um, e só pego os veículos tem agendamentos os que não tem não aparecem, por isto as colunas podem aumentar ou diminuir de quantidade. Preciso assim:   campo hora aula    campo veiculo  campo hora aula    campo veiculo 07:00                  corsa              07:00                  pálio ...                       ...                     ...                    ... 21:00                  corsa              21:00                  pálio   Obrigado.   Marcelo  
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

O DBCtrlGrid é um Container de Componentes DataWare ... Nas minhas configuraçoes eu adicioneu DOIS Dbedit ao DbCtrlGrid ... Os Demais que vc vê na figura é de responsabilidade do Contaiber de Instancia-los e destrui-los , tudo automaticamente sem nenhuma intervenção.. A dica foi colocar esses dois DbEdits com a propriedade Align para que ocupe toda a posição a direira e a esquerda de uma Coluna do DbCtrlGrid;; Inicialmente determinei duas colunas para  o DbCtrlGrid e cinco Linha para o mesmo e dimensionei a largura dessas colunas com o Padrão da Largura dos
DbEdits ... A cada inserção é criado dois novos DbEdits
Outra dica é Indexar de modo correto a sua GRID para que os dados apresentados fiquem na Ordem que vc quer
Imagine vir 07:00 Hrs na primeira coluna , depois 10:00 Hrs e volta 07:00 enfim apresentação dos dados de forma desordenada

Se vc observar o meu exemplo verá por se tratar de dois campos Strings eles não estão defidamente ordenados ... Isto é 10 e menor do que 2 ( por de tratar de String)

Baseado neste passos simples acredito que vc consiga resolver seu proplema

GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Veja bem, no dbgrid eu consigo este efeito:   Só que no lugar onde consta a segunda coluna do palio preciso que apareça outro veículo entendeu, quando ao dbctrlgrid, tentei mas deu o mesmo resultado, estou tentando com outros componentes, como listview ou stringgrid. Acho que como o dbgrid está ligado à consulta ele para no último registro e repete o mesmo várias vezes, que é o número de veículos que consta na tabela. Veja o código.       ibqVeiculos.Close;
     ibqVeiculos.Params[0].Value := Date;
    ibqVeiculos.Open;
    ibqVeiculos.First;         while not ibqVeiculos.Eof do
       begin
        ibqBuscaAgenda.Close;
         ibqBuscaAgenda.Params[0].Value := Date;
         ibqBuscaAgenda.Params[1].Value := ibqVeiculosPLACA.Value;
        ibqBuscaAgenda.Open;           DBGrid1.Columns.Add.Field := ibqBuscaAgendaDT_AULA;
        DBGrid1.Columns.Add.Field := ibqBuscaAgendaHORA_INICIAL;
        DBGrid1.Columns.Add.Field := ibqBuscaAgendaVEICULO;
        DBGrid1.Columns.Add.Field := ibqBuscaAgendaNOME_ALUNO;
        ibqVeiculos.Next;
       end;   Marcelo
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

eu acho que com o listview ou stringgrid vc consegue.. MAs com o dbctrlgrid vc também consegue

È porque vc não esta Indexando corretamante
A idéia é indexar de modo que fique

campo hora aula    campo veiculo  campo hora aula    campo veiculo 07:00                  corsa              07:00                  pálio ...                       ...                     ...                    ... 21:00                  corsa              21:00                  pálio  

Olha a indexação .... Vc indexa por dois campos .. O Data e o Hora

Assim na mesma linha do dbctrlgrid vai aparecer os REgsitros que tenha a mesma Data e também a mesma Hora



GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Está indexado pela hora pois não busco várias datas, e sim apenas a selecinada.   Marcelo
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

Está indexado pela hora pois não busco várias datas, e sim apenas a selecinada.   Marcelo


Então pelo DbCntrlGrid vc consegue.. Porque se vc o Divide em duas colunas , a primeira e a segunda coluna a ser prenchida sera

07:00  ... Um Carro    .... Outro Carro
GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Ele para no último registro, não aparece os outros carros, veja: Os dbedits só é possivel colocar na primeira coluna, não é isto mesmo ou tem alguma outra configuração?
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

A imagem sua não esta com boa resolução ... Não da para enxergar e consequentemente entender o que vc esta querendo dizer

Mas deixa claro que so tem DbEdits na primeira coluna ... Isto é estranho ...Ele deve preencher a primeira e a segunda coluna respectivamente como eu mostrei com a minha imagem

Coloque o Wiew as Text do DFM para ver coom vc esta configurando este DbCtrlGrid


GOSTEI 0
Marcelo Vieira

Marcelo Vieira

09/07/2011

Marco, primeiramente obrigado pela ajuda, mas consegui resolver com o stringgrid, veja o resultado como ficou, agora só falta algumas formatações, segue tb o código:   var
  I, J : Integer;
begin
   ibqHorarios.Close;
   ibqHorarios.Open;    ibqHorarios.First;      I := 1;
       while not ibqHorarios.eof do
        begin
         StringGrid2.Cells[0,0] := 'H. INICIAL';
         StringGrid2.Cells[1,0] := 'H. FINAL';
         StringGrid2.Cells[0,I] := TimeToStr(ibqHorariosHORA_INICIAL.Value);
         StringGrid2.Cells[1,I] := TimeToStr(ibqHorariosHORA_FINAL.Value);
         I := I + 1;
         StringGrid2.RowCount := I + 0;
         ibqHorarios.Next;
        end;     ibqVeiculos.Close;
     ibqVeiculos.Params[0].Value := Date;
    ibqVeiculos.Open;     ibqVeiculos.First;       while not ibqVeiculos.Eof do
       begin         ibqBuscaAgenda.Close;
         ibqBuscaAgenda.Params[0].Value := Date;
         ibqBuscaAgenda.Params[1].Value := ibqVeiculosPLACA.Value;
        ibqBuscaAgenda.Open;         ibqBuscaAgenda.First;
        I := 1;
        J := StringGrid1.ColCount;
          While not ibqBuscaAgenda.eof do
           Begin
            StringGrid1.Cells[J,0] := 'VEÍCULO';
            StringGrid1.Cells[j,I] := ibqBuscaAgendaVEICULO.Value;
            I := I + 1;
            StringGrid1.RowCount := I + 0;
            StringGrid1.ColCount := J + 1;
            ibqBuscaAgenda.Next;
           End;
        ibqBuscaAgenda.First;
        I := 1;
        J := StringGrid1.ColCount;
          While not ibqBuscaAgenda.eof do
           Begin
            StringGrid1.Cells[J,0] := 'ALUNO';
            StringGrid1.Cells[j,I] := ibqBuscaAgendaNOME_ALUNO.Value;
            I := I + 1;
            StringGrid1.RowCount := I + 0;
            StringGrid1.ColCount := J + 1;
            ibqBuscaAgenda.Next;
           End;         ibqBuscaAgenda.First;
        I := 1;
        J := StringGrid1.ColCount;
          while not ibqBuscaAgenda.eof do
           begin
            StringGrid1.Cells[J,0] := 'INSTRUTOR';
            StringGrid1.Cells[j,I] := ibqBuscaAgendaNOME_INSTRUTOR.Value;
            I := I + 1;
            StringGrid1.RowCount := I + 0;
            StringGrid1.ColCount := J + 1;
            ibqBuscaAgenda.Next;
           end;           ibqVeiculos.Next;
     end;
GOSTEI 0
Marco Salles

Marco Salles

09/07/2011

Com o StringGrid dá para fazer , o inconveniente é o Nest que vc tem que fazer

Com o DbCntrGrid do jeito que esta sua Grade também dá para fazer

Enfim que bom que vc resolveu
GOSTEI 0
POSTAR