Bom, depois de apanhar um pouco para conseguir colocar para funcionar, aqui vai a dica de como fazer um plano de contas ser mostrado numa TreeView, no caso vamos usar a jvDbTreeView que é uma TreeView dbaware no Delphi.
Como vamos usar o componente na JVCL, aqui vai o link para baixar http://sourceforge.net/projects/jvcl/, é um excelente pacote de componentes, praticamente tudo que você precisar, acaba descobrindo que tem lá.
Criei a minha tabela no Firebird, a estrutura abaixo:
Campo | Tipo | Descrição |
Cta_ID | integer | Numero da conta |
Cta_Master | integer | Conta “pai” |
Cta_Descricao | Varchar(30) | Nome da conta |
Coloque um componente JvDbTreeView no formulário, conecte-o via a propriedade DataSource à tabela do banco de dados.
Ajuste as suas propriedades do JvDbTreeView como abaixo:
Obs.: No meu caso o dataSource chama-se dsPlanContas.
Propriedade | Valor |
DataSource | dsPlanContas |
DetailField | Cta_Master |
ItemField | Cta_Descricao |
MasterField | Cta_ID |
Pronto, já está OK e pronto para funcionar.
A explicação das propriedades é a seguinte:
DataSource: Obviamente é a conexão à base de dados;
DetailField: É o campo que contém o valor que aponta para a conta pai.
ItemField: é o texto que vai aparecer na TreeView.
MasterField: é a chave única da tabela.
Quem reescreveu o componente deve ter problemas sérios para atribuir nomes às propriedades, custei para conseguir entender, mas aí está o mapa da mina.
Abaixo um exemplo do que está no banco de dados:
Cta_Id | Cta_Master | Cta_Descricao |
1 | 0 | DESPESAS |
2 | 1 | DESPESAS FIXAS |
3 | 2 | PESSOAL |
4 | 11 | ALUGUEL |
5 | 11 | CONDOMINIO |
6 | 0 | RECEITAS |
7 | 6 | RECEITAS DIRETAS |
8 | 3 | CLT |
9 | 3 | FREES |
10 | 2 | CUSTOS DIRETOS |
11 | 10 | IMÓVEIS |
12 | 1 | DESPESAS VARIAVEIS |
13 | 12 | COMBUSTIVEIS |
14 | 12 | COMISSÕES |
15 | 12 | MATERIAL DE EXPEDIENTE |
16 | 12 | MANUTENÇÕES |
17 | 12 | EXAMES MÉDICOS |
16 comentários:
oi Amilton,
não sei pq, mas não tou conseguindo por a funcionar.
tou usando o access com ADO e a tabela tá assim:
- ID: autonumber (primary)
- tipo: number ( liga ao pai na propria tabela)
- descricao: text (texto da descrição)
- outros
depois no delphi tenho:
- tADOconnection
- tADOtable (com os campos configurados)
- TDataSource (ligada a tabela)
no TJvDBTreeView liguei assim:
- datasource: dsMaster
- detailfield: tipo
- itemfield: descricao
- masterfield: id
os componentes referidos estão dodos enabled e/ou active e tenho inclusive uma dbgrid ligada e com os dados a mostrar.
criei um projecto novo para testar, portanto não é conflito com mais nada.
não fiz nem mais nem menos do que escrevi.
lembra alguma coisa que esteja a faltar?
não tá aparecendo nada no treeview. nem a root.
esqueci do nome :)
Carlos
Cumprimentos
já descobri.
tava faltando preencher o campo StartMasterValue que no meu caso ficou a 0.
fica a dica para outros que possam usar :)
Cumprimentos,
Carlos
Tu estás rápido hein? Não deu nem tempo para eu responder, quando eu fui ler o comentário tu já tinha achado a solução.
Valeu a dica.
Orra Acid, isto ja tava aqui:
http://www.cosmoverbal.net/tag/dbtreeview
Desde maio/2007 :-)
Todo DBTreeview que ví até agora só funciona com índice integer.
Será que alguem teve coragem de criar um que se basei somente no campo conta ?
Integers se alterados em algum nó pode arrebentar com a estrutura. Por outro lado se a base for a string da conta separada por pontos não tem erro.
Gostaria de usar apenas 2 níveis, e uso duas imagens no image list.
No primeiro nivel ele aparece a imagen do nivel 1 (principal)
e a imagen 2 do sub nivel 1.
Exemplo.
Receitas (img 1)
|
|_Recebimentos (img 2)
Despesas(img 1)
|
|_Pagamentos(aqui nao aparece img2)
o que devo pra isso funcionar?
Não entendi muito bem, deveria funcionar na boa.
Tem como você me enviar o código para eu dar uma olhada e tentar te ajudar? Pode enviar para acidbytes@gmail.com.
Bza. conseguir usando o mysql.
Sei que o post é antigo, mas eu sou iniciante e o seu post realmente me salvou =) muito bom mesmo..
Obrigado Su_, é sempre bom saber que conseguimos ajudar alguém!
muito bom seu exemplo, mas eu queria fazer da seguintes forma: eu queria colocar os primeiros dados em uma tabela diferente, os dados que ficam com 0 e o restante colocar em outra tabela é possível? e depois mostrar tudo no dbtreeview normalmente.
Tutorial Instalar TJvDBTreeView
Fazer o download: http://sourceforge.net/projects/jvcl/files/JVCL%203/JVCL%203.48/JVCL348CompleteJCL26-Build5178.zip/download
Extrair o arquivo: JVCL348CompleteJCL26-Build5178
Instalar JCL: jcl/Install.bat
Abrir o arquivo JvRichEdit.pas e na linha onde se lê
dwCookie :=DWORD_PTR(AConverter);
substitua por este código:
dwCookie := {$IFDEF COMPILER19_UP}DWORD_PTR{$ELSE}Longint{$ENDIF}(AConverter);
Na linha onde se lê:
dwCookie := DWORD_PTR(Cookie);
substitua por este código:
dwCookie := {$IFDEF COMPILER19_UP}DWORD_PTR{$ELSE}Longint{$ENDIF}(Cookie);
Instalar JVCL: jvcl/Install.bat
Acessar a Paleta: Jv Data Controls
Usar o: TJvDBTreeView
Muito bom este post... obrigado por compartilhar!
( COMPLEMENTANDO )
-- Montar a Tabela --
MasterField - Campo ID da Tabela (PK)
DetailField - Campo Integer
ItemField - Campo Varchar (Titulo do Nó)
-- Parametrizar no JvDBTreeView --
StartMasterValue = 0
Campos Master, Detail e Item obedecer acima
-- Detalhes dos Dados na Tabela --
MasterField:
ID Tabela (a PK mesmo).
DetailField:
Se Nó Pai, colocar 0;
Se Nó Filho, colocar o ID do seu Pai.
ItemField = Caption do Nó
Muito obrigado. Deu trabalho, mas consegui montar!
Postar um comentário