Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Numerar Coluna Dbgrid


vms

Pergunta

ola pessoal

criei uma tabela com dois campos, o campo com (*)é chamado palavra

este vai ficar em ordem alfabetica(indexfildename)

é possivel numerar a coluna sem criar um novo indice

e se possivel apresentar essa numeraçao em um Edit ou label atualizando automaticamente?

Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

  • 0
Guest --HDELPHI --
ola pessoal

criei uma tabela com dois campos, o campo com (*)é chamado palavra

este vai ficar em ordem alfabetica(indexfildename)

é possivel numerar a coluna sem criar um novo indice

e se possivel apresentar essa numeraçao em um Edit ou label atualizando automaticamente?

Faça desta maneira:

var i : integer;

begin

CDS_Teste.First;

for i := 0 to CDS_Teste.recordcount -1 do

begin

CDS_Teste.Edit;

CDS_TesteNUM.Value := CDS_Teste.RecNo; // primeira coluna do dbgrid

CDS_Teste.next;

end;

CDS_Teste.ApplyUpdates(-1);

end;

Se estiver usando TTable basta trocar o CDS por Table, coloque o comando num botão ou no duplo click do DBgrid.

Link para o comentário
Compartilhar em outros sites

  • 0

vms, sinceramente...

Não entendi a pergunta e também a resposta - menos ainda a relação entre elas, já que RecordCount é utilizado para varrer todas as linhas no seu dataset - não colunas. :blink:

Mas com relação ao título do tópico, tenho a dizer que as colunas do DBGrid já são, de certo modo, numeradas. Basta que você utilize a propriedade Columns. Ela é uma lista de colunas (TColumn).

Assim, se você utilizar DBGrid.Columns[indice], você observa que indice já funciona como uma numeração, não?! :huh:

Link para o comentário
Compartilhar em outros sites

  • 0

Mas com relação ao título do tópico, tenho a dizer que as colunas do DBGrid já são, de certo modo, numeradas. Basta que você utilize a propriedade Columns. Ela é uma lista de colunas (TColumn).

Assim, se você utilizar DBGrid.Columns[indice], você observa que indice já funciona como uma numeração, não?!

pois é!

mas o problema é que as palavras vao ficando em ordem alfabetica e consequentemente a coluna onde esta a numeraçao vai ficando toda bagunçada.

eu queria uma numeraçao crescente independente da coluna palavra(um tipo de contador de palavras)

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --HDELPHI --
Mas com relação ao título do tópico, tenho a dizer que as colunas do DBGrid já são, de certo modo, numeradas. Basta que você utilize a propriedade Columns. Ela é uma lista de colunas (TColumn).

Assim, se você utilizar DBGrid.Columns[indice], você observa que indice já funciona como uma numeração, não?!

pois é!

mas o problema é que as palavras vao ficando em ordem alfabetica e consequentemente a coluna onde esta a numeraçao vai ficando toda bagunçada.

eu queria uma numeraçao crescente independente da coluna palavra(um tipo de contador de palavras)

Colega ... entendi o que você queria dizer desde o principio ... a resposta esta no meu post acima ... independente da ordem alfabetica ele vai renumerar novamente o campo da coluna ...ok ?

Link para o comentário
Compartilhar em outros sites

  • 0

Colega ... entendi o que você queria dizer desde o principio ... a resposta esta no meu post acima ... independente da ordem alfabetica ele vai renumerar novamente o campo da coluna ...ok ?

cara não ta dando certo

ve o que pode ta dando errado?

a tabela ta no datamodule

coloquei um pagecontrol no form e um panel no pagecontrol e o dbgrid no panel

pode ser que esse monte de componete pode ta atrapalhando?

obrigado pela atençao!

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta colocar um Campo para calcular "Numerar" na Tabela ou na query quer realiza a sua consulta, e no botão em OnClick adiciona este Código

Var
N:integer
begin
N:=1;
table.first;
while not table.eof do
begin
TableNumerar.value := N;
N:= N+1;
Table.next;
end;

Tenta isso.

Link para o comentário
Compartilhar em outros sites

  • 0
Tenta colocar um Campo para calcular "Numerar" na Tabela ou na query quer realiza a sua consulta, e no botão em OnClick adiciona este Código

Var
  N:integer
begin
  N:=1;
  table.first;
  while not table.eof do
  begin
    TableNumerar.value := N;
    N:= N+1;
    Table.next;
  end;

Tenta isso.

Pirambu!, isto é basicamente o que o colega HDelphi propôs inicialmente. Lembrando também, que aparentemente ele já possui um campo para isso. Porém, para seu código funcionar, está faltando colocar a tabela em modo edição (Table.Edit) antes da atribuição e postar os dados após a alteração (Table.Post).

Nisto tudo, cabe perguntar ao colega vms se este campo, o tal Numero, pode realmente ser alterado a "bel prazer". Observem, que se este campo for utilizado simplesmente para uma "ordenação visual" (no DBGrid), então não há qualquer problema com as abordagens propostas. Mas, se ao contrário, este campo tiver a finalidade de servir de referência, sendo utilizado por outras tabelas para se referir a respectiva Paravra, então a alteração deste campo é uma ação crítica e incorreta!

Só mais uma observação. O colega vms, não citou que componente utiliza para acessar os dados, então, eventualmente este pode ser um item a conhecer:

Sobre RecNo no help do Delphi => "This function returns -1 in all cases. Ordinarily an application will not access RecNo at the TDataSet level. Instead a redeclared and implemented RecNo property in a descendant object such as TTable is accessed. RecNo provides a fallback property for derived dataset objects that do not reimplement it."

Donde resulta que, em alguns componentes de acesso aos dados, eventualmente, a propriedade RecNo não retorna o número esperado, mas sim -1. Os componentes TTable e TQuery retornam corretamente.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

esse codigo ocorre os seguintes erros, o que pode ser?

var i : integer;

begin

CDS_Teste.First;

for i := 0 to CDS_Teste.recordcount -1 do

begin

CDS_Teste.Edit;

CDS_TesteNUM.Value := CDS_Teste.RecNo; // primeira coluna do dbgrid

CDS_Teste.next;

end;

CDS_Teste.ApplyUpdates(-1);

end;

[Error] Adicionar.pas(221): Incompatible types: 'String' and 'Integer'

[Error] Adicionar.pas(224): Too many actual parameters

[Fatal Error] Dicionario.dpr(9): Could not compile used unit 'Adicionar.pas'

Link para o comentário
Compartilhar em outros sites

  • 0
CDS_TesteNUM.Value := CDS_Teste.RecNo; // primeira coluna do dbgrid

[Error] Adicionar.pas(221): Incompatible types: 'String' and 'Integer'

este parece bem explicativo. Parece que seu campo NUM é do tipo string e não numérico (integer). Sugestão - utilize funções de conversão:

CDS_TesteNUM.Value := IntToStr(CDS_Teste.RecNo);

[Error] Adicionar.pas(224): Too many actual parameters
este não teria motivo aparente já que o parâmetro é requerido. Veja se após sanar o erro anterior, este ainda persistirá - eventualmente, coisas deste tipo ocorrem.

[Fatal Error]Dicionario.dpr(9): Could not compile used unit 'Adicionar.pas'
este sempre vai aparecer quando o compilador encontrar um erro na unit.

Link para o comentário
Compartilhar em outros sites

  • 0
QUOTE

[Error] Adicionar.pas(224): Too many actual parameters

este ainda continua

vms, vou dar um chutaço e tenho 99,99% de certeza que vou acertar no gol. :D

- Observando que a mensagem de erro continua;

- Conferindo os posts iníciais e entendendo que você deve estar utilizando Paradox e normalmente utiliza-se TTable ou TQuery;

- Observando que o código que você postou veio do exemplo do HDelphi que utilizou TClientDataSet (CDS_...);

Chego a conclusão que, seguindo a observação do HDelphi ("Se estiver usando TTable basta trocar o CDS por Table, (...)"), você fez a troca sim. Mas faltou ser mensionado/pesquisado um detalhe:

O método ApplyUpdates não é igual para todos os tipos de dataset.

Os componentes da paleta BDE, ou seja os que descendem de TBDEDataSet, não requerem parâmetros. Já os que descendem de TCustomClientDataSet, sim.

Então, retire o parâmetro:

CDS_Teste.ApplyUpdates;

É por isso que não me canso se insistir que, em dúvidas de banco de dados, sejam sempre informados:

- Banco utilizado;

- Componente de acesso;

pelo menos. Em alguns casos, outras informações podem ajudar (p.e, uso de transações)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

consigo compilar , mas quando clico no botao dar o seguinte erro

project raised exception class EDBEngineError with message 'Key violation'. process stopped.

o que pode ser?

michel você estava certo quanto a tabela, valeu!

Editado por vms
Link para o comentário
Compartilhar em outros sites

  • 0
consegui tirar esse erro, mas quando clico no botao faz uma rapida apresentaçao das palavras e nada de numero
vms, eu estou com a impressão que não gravou eles.

Leu o comentário que fiz referente a ApplayUpdates? Acho que pode ser o caso.

De qualquer forma, vou então colocar aqui a minha sugestão, adaptando do exemplo em uso:

begin
  CDS_Teste.First;  // posiciona no 1º registro
  while not CDS_Teste.EOF do  // varre todos os registros até o fim
  begin
    CDS_Teste.Edit;  // coloca tabela em modo edição do registro atual
    CDS_TesteNUM.Value := CDS_Teste.RecNo; // atribui o nº de ordem da linha/registro
    CDS_Teste.Post;  // grava alterações na tabela
    CDS_Teste.Next;  // avança para próximo registro
  end;
end;

Observar apenas que o índice selecionado para a tabela deve ser aquele que utiliza a palavra (acho que já é este que você utiliza, mas...)

Apenas um comentário:

- Este tipo de procedimento (numerar as linhas no DBGrid utilizando um campo na tabela - se é que é isto mesmo) só vai trazer um "probleminha": a cada item incluído, alterado ou excluído, você terá que executá-lo. Do contrário, sua numeração acabará ficando bagunçada.

Imagine quando sua tabela tiver alguns mil registros, você executar este procedimento a cada ação? :blink:

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

- Este tipo de procedimento (numerar as linhas no DBGrid utilizando um campo na tabela - se é que é isto mesmo) só vai trazer um "probleminha": a cada item incluído, alterado ou excluído, você terá que executá-lo. Do contrário, sua numeração acabará ficando bagunçada.

Imagine quando sua tabela tiver alguns mil registros, você executar este procedimento a cada ação?

michel, então diz ai

é possivel eu apresentar a quantidade de linha(palavra) de uma coluna do dbgrid em um edit ou label sem dar erro?

a ideia é saber a quantidade de palavras (sem usar um bdedit)

Link para o comentário
Compartilhar em outros sites

  • 0
micheUS, então diz ai

é possivel eu apresentar a quantidade de linha(palavra) de uma coluna do dbgrid em um edit ou label sem dar erro?

a ideia é saber a quantidade de palavras (sem usar um bdedit)

vms, desse jeito eu volto a não entender sobre o que estamos falando.

Uma coisa é querer mostrar no DBGrid linhas numeradas para cada item (SEQUENCIA):

+--------+-------------+
| Numero | Palavra     |
+--------+-------------+
|      1 | Abobr       |
+--------+-------------+
|      2 | Abobrinha   |
+--------+-------------+
|    .   |      .      |
|    .   |      .      |
|    .   |      .      |
+--------+-------------+
|     10 | Abobrona    |
+--------+-------------+

Outra coisa é querer mostrar quantos elementos existem nesta lista (QUANTIDADE)

Link para o comentário
Compartilhar em outros sites

  • 0
pois é

daquela forma você disse que dava problema então eu reformulei a pergunta

sim, eu disse que poderia ter problema, mas você tentou implementá-la mesmo assim. Mesmo que seja apenas para saber se é o que você quer?

Bom, minha questão ainda continua: o que realmente você quer fazer? Contar ou Enumerar?

Quem sabe você possa colocar um protótipo da tela (imagem) que você deseja ter.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

ok

tenho as seguites palavras

1 abacate

2 frutas

3 bala

4 zebra

5 abaju

quando insiridas no dbgrid nessa sequencia, ficara assim(porque usei o indexfildname)

1 abacate

5 abaju

3 bala

2 frutas

4 zebra

a coluna de numero toda bagunçada e a de palavras em ordem alfabetica

primeiramante eu queria que a coluna de numero ficasse crescente(sem estar bagunçada) e a coluna de palavras cotinuassem em ordem alfabetica.

e apresentando essa numeraçao em um edit ou label

assim ficaria facil de saber a quantidade de palavras

porque se eu tenho 1000 palavras por exemplo e acrescento mais 1 com letra A

então a palavra de numero 1001 vai la pro inicio

Link para o comentário
Compartilhar em outros sites

  • 0

vms, você poderia tentar utilizar um campo calculado, do tipo inteiro, e para este campo você moveria o RecNo.

Supondo o nome da coluna NumOrdem (vamos deixar o campo Numero do seu banco em off), você no evento OnCalcField você faria:

TabTesteNumOrdem.Value := TabTeste.RecNo;

Testa aí para ver se funcina (eu acho que sim, mas não tenho como conferir agora).

Se tiver dúvida de como criar o campo calculado dá uma olhada neste tutorial e pesquise pelo texto: "DataModule:" (sem as aspas), é o segundo item nesta sessão.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola a Todos,

eu estou utilizando db Firebird, Zeos Lib 6.0 e delphi7.

O meu problema é que tanto utilizando Query.RecNo para retornar as linhas numeradas ou de algum outro jeito

ate da certo, mas ao rolar as linhas do grid para cima ou para baixo elas acrescentam a numeração da linha numerada

ou acontece asssim

1

1

1

1

1

1

ate rolar sobre ele ai ele entra na sequencia

1

2

3

4

mas depois começa a incrementar

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Pessoal, já faz tempo que n venho ao forum!

Feliz ano novo hehehe!

quando parei meu projeto de cadastro de filmes no ano passado.

Estava enrrolado nesta parte de numerar os Itens Linha a linha!

Dai testei o exemplo do Micheus e funcionou perfeitamente - D2010/ADOQuery.

Mas como ele disse é Inviável e muito problemático.

Toda vez que eu for adicionar um Item novo ele vai ter que numerar tudo novamente. Abrir e fechar a tabela toda hora.

Realmente vou deixar o programa somente com o Numero de Cadastro fica meio bagunçado quando você exclui um item mais fica bem mais simples, leve e rápido!

já pensou com mais de 30mil cadastros "Seria uma eternidade" :wacko:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...