Notifications
Clear all

inserir controle em tempo de execução

47 Posts
1 Usuários
0 Reactions
10.7 K Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá a todos !!!
seguinte galera tentei buscar outros recursos mas assim meu sistema fica mais profissa...
Preciso de um codigo que conte os equipamentos dentro da frota selecionada no combo box e insira um label com o caption com o nome do equipamento e um textbox para receber as informações para cada equipamento...
Isso sera mais um salto no meu aprendizado...
Conto com vcs...

Anexo Atualizado em 06/09/2014

 
Postado : 23/11/2011 1:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Valeu Reinaldo, simples e direto.

Caio, estava lendo seu post e me atentei na questão :
>-Ocultei a listbox para ficar mais visual,porém la continua lá fazendo a mesma função de compilar as informações para o insert.

Posso estar errado, e você como é mais experiente nesta implementação poderá julgar, é o seguinte, se o ListBox irá ficar oculto, sómente para poder armazenar os dados e compilar, para que precisamos dele ?

Se é só parra Lançar os valores no BD, neste caso poderiámos usar a própria checagem dos CheckBox e lança-los, sem precisar passar pelo ListBox, o que acha ?

Pensando nisto, eliminei o ListBox e fiz uma implamentação da forma que citei, sem o ListBox, a única parte que não consegui, foi a de lançar o TOTAL do Label, mas isto você tira de letra.

De uma olhada, analise e veja se procede meu raciocionio, no anexo está somente o .xls pois não foi alterado o BD(mdb).

Anexo Atualizado em 06/09/2014

[]s

 
Postado : 30/01/2012 9:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Cara ficou muito melhor, esqueci do potencial do vba..rsrs ( Ficou mais limpo o código ).

Em relação a Nota, como existe um campo de observação, acho que ficaria até melhor essa nota ficar registrado nesse campo.

Fiz algumas alterações:
Ao selecionar o tipo do questionário ele está carregando automático os itens e fazendo o calculo dos pesos.

Criei um novo form que a idéia é poder manipular todos os dados do banco via esse formulário.
# Criei uma combo com os nomes das tabelas do access. ( obs: Fiz via add item, porém criei um método "carregaNomeTabelas"para listar todos os bancos disponíveis no access, porém ele me retorna esse erro: 'NÃO É POSSÍVEL LER OS REGISTROS SEM PERMISSÃO DE LEITURA EM MSYSOBJECTS'), acredito que seja alguma permissão dentro do access mesmo, vou procurar mais sobre isso.)

# Em paralelo a isso criei uma listview com as colunas dinâmicas, ou seja, para cada tabela que for selecionada na combobox ele carrega os titulos dessa tabela.
porém ao usar um comando para popular essa listview com dados do banco, ele está me retornando um bendito de um erro: Invalid Key.

....
 ConectarBD_CI
    
     rsTabela.Open SqlMaster, cnnCI, adOpenKeyset
    

    Dim i As Integer
    Dim j
    
    For i = 0 To rsTabela.RecordCount - 1
    Set j = Me.ListView5.ListItems.Add(, rsTabela(0), rsTabela(0)) ' < Erro bem aqui.
        If Not IsNull(rsTabela(0)) Then
            j.SubItems(1) = rsTabela(1)
            j.SubItems(2) = rsTabela(2)
            j.SubItems(3) = rsTabela(3)
            j.SubItems(4) = rsTabela(4)
  
        End If
        rsTabela.MoveNext
     Next i
     
     Set rsTabela = Nothing
     cnnCI.Close

#RumoaPerfeição

 
Postado : 31/01/2012 8:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caio, experimente utilizar a sintaxe abaixo; porem como as tabelas variam a quatidade de colunas
é necessário "tratar" a quantide de subitens tambem

ConectarBD_CI
    
rsTabela.Open SqlMaster, cnnCI, adOpenKeyset
Dim j
    
    Do While Not rsTabela.EOF

    Set j = Me.ListView5.ListItems.Add()
            j.Text = rsTabela(0)
            j.SubItems(1) = rsTabela(1)
            j.SubItems(2) = rsTabela(2)
            j.SubItems(3) = rsTabela(3)
  
        rsTabela.MoveNext
     Loop
     Set rsTabela = Nothing
     cnnCI.Close

End Sub
 
Postado : 31/01/2012 12:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Grande Mestre!
Funcionou Reinaldo valew!!

Estou vendo agora uma forma de tratar os subitens, se conseguir, volto para avisar!

 
Postado : 31/01/2012 1:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caio, segue uma opção para a qtde de subitens

Private Sub cboxTabelas_Change()

tabela = cboxTabelas.Value
Ajusta_ListView
ListView5.ListItems.Clear
ConectarBD_CI

rsTabela.Open SqlMaster, cnnCI, adOpenKeyset
Dim j, i As Integer

Do While Not rsTabela.EOF
Set j = Me.ListView5.ListItems.Add()
j.Text = rsTabela(0)
For i = 1 To rsTabela.Fields.Count - 1
If IsNull(rsTabela(i)) Then
j.SubItems(i) = ""
Else
j.SubItems(i) = rsTabela(i)
End If
Next
rsTabela.MoveNext
Loop
Set rsTabela = Nothing
cnnCI.Close

End Sub

 
Postado : 31/01/2012 2:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Puts, muito bom, tinha feito aqui mas de uma forma meio burra, mas ficou muitooo melhor!!!
Agora adicionei alguns Textbox em tempo de execução para a parte de edição dos itens selecionados da listview, não conheço muito das propriedades de listview, então se alguém já tiver feito isso, ao selecionar um item preencher as textbox criadas.

Anexo Atualizado em 06/09/2014

 
Postado : 31/01/2012 2:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caio, está ficando muito bom, parabens.

Neste seu anexo no UserForm2 faltou você inserir o ListView referente a linha :
Do While i <= ListView5.ColumnHeaders.Count

Aqui deu erro da falta do controle, mas é só adicionar e renomear.

Quanto a questão da linha selecionada jogar para os TextBoxs, não sei se vai dar tempo de eu implementar agora, estou em outra tarefa no momento, mas de uma olhada no tópico abaixo onde o colega JoséA que é fera em ListView postou algumas rotinas.

Retornar dados de um listview em textbox
viewtopic.php?f=10&t=3264&hilit=listview

[]s

 
Postado : 31/01/2012 6:17 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom já dai uma evoluida legall..
Fiz a parte de DELETE,UPDATE,INSERT de cada tabela, ficou bem dinâmico mesmo..show de bola..

Agora estou fazer um formulário apenas para visualizar a monitoria e os itens por agente, sou seja, carrega uma listview com todas as monitorias do agente selecionado ai ao clicar na monitoria, carregaria uma outra listview com os itens relacionados a ela.

porém está me retornando esse erro:
TIPO DE DADOS INCOMPATÍVEL NA EXPRESSÃO DE CRITÉRIO

Private Sub ListView5_Click()
    Dim sql As String
    Me.ListView6.FullRowSelect = True
    Me.ListView6.ColumnHeaders.Clear
    Me.ListView6.View = lvwReport
    Me.ListView6.ListItems.Clear
    Me.ListView6.ColumnHeaders.Add , , "Item Avaliado"
    Me.ListView6.ColumnHeaders(1).Width = 495
    
   ' On Error Resume Next
    sql = "SELECT Questionario FROM ItensAvaliados where idTlbMonitoria ='1'" ' < Aqui vai o index da listview5
    
    ConectarBD_CI
    rsTabela.Open sql, cnnCI
    
    Dim j 
    Do While Not rsTabela.EOF
    Set j = Me.ListView6.ListItems.Add()
            j.Text = rsTabela(0)
            j.SubItems(1) = rsTabela(1)
        rsTabela.MoveNext
     Loop
     Set rsTabela = Nothing
     cnnCI.Close
End Sub

Segue o arquivo já com algumas alterações:

Anexo Atualizado em 06/09/2014

 
Postado : 01/02/2012 9:22 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Caio,

Com relação à um post anterior, voce se referiu à uma rotina para "carregar" os nomes das tabelas (carregaNomeTabelas), porem está dando erro de acesso ao MSysObjects.
Como não conhecia, fui pesquisar, e o que achei foi: no bd access "settar" MSysObjects como visivel e leitura ok

Os passos:
Fonte: http://bytes.com/topic/access/answers/5 ... ess-2003-a
From the Pull Down menu select
1. Tools/Options
2. Select "View" tab and make System Objects checkbox selected
3. OK
4. Go Back to Pull Down Menu and Selectÿ
Tools/Security/User and Groups permissions
5. On Permissions TAB choose Table object type from the Combobox
6. Select MSysObjects table and give it permissions to read data and read design
Testei aqui e "passou" beleza.
No sql na clausula Where; acrescentei flags=0, para selecionar somente as tabelas de usuario
WHERE MSysObjects.Type = 1 and MSysObjects.Flags=0

 
Postado : 01/02/2012 10:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Caio,

Com relação à um post anterior, voce se referiu à uma rotina para "carregar" os nomes das tabelas (carregaNomeTabelas), porem está dando erro de acesso ao MSysObjects.
Como não conhecia, fui pesquisar, e o que achei foi: no bd access "settar" MSysObjects como visivel e leitura ok

Os passos:
Fonte: http://bytes.com/topic/access/answers/5 ... ess-2003-a
From the Pull Down menu select
1. Tools/Options
2. Select "View" tab and make System Objects checkbox selected
3. OK
4. Go Back to Pull Down Menu and Selectÿ
Tools/Security/User and Groups permissions
5. On Permissions TAB choose Table object type from the Combobox
6. Select MSysObjects table and give it permissions to read data and read design
Testei aqui e "passou" beleza.
No sql na clausula Where; acrescentei flags=0, para selecionar somente as tabelas de usuario
WHERE MSysObjects.Type = 1 and MSysObjects.Flags=0

Reinaldo,
Fiz o procedimento do meu banco e tentei usar a query do post porém sem sucesso, poderia corrigir conforme seu teste por favor!

     'Carrega os tipos de questionários cadastrados no banco
     '##########não é possível ler registro(s). sem permissão de leitura 'MSysObjects'
    Private Sub carregaNomeTabelas()
        
    Dim sql As String

    ConectarBD_CI
    
   ' sql = "SELECT MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Type = 1 and MSysObjects.Flags=0"
    sql = "SELECT Name FROM MSysObjects  WHERE (Left([Name],4) <> 'MSys') AND ([Type] In (1, 4, 6)) ORDER BY Name"

    Me.cboxTabelas.Clear
     rsTabela.Open sql, cnnCI
     
        'Loop para carregar o nome das tabelas na combobox
    Do While Not rsTabela.EOF
        Me.cboxTabelas.AddItem rsMyTables![Name]
        rsTabela.MoveNext
    Loop
         
       Set rsTabela = Nothing
         cnnCI.Close
    End Sub
 
Postado : 01/02/2012 10:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mesmo a alteração feita por Ti, no exemplo que tenho funciona. Estou anexando o modelo que vou "testando" e o bd

Anexo Atualizado em 06/09/2014

 
Postado : 01/02/2012 11:09 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Que Coisa louca, tinha feito exatamente isso e não estava funcionando.
Trazendo os nomes direto da base fica melhor, caso seja necessário criar uma nova tabela, não é precisa codificar.
Valeu

..acredito que agora falta apenas mas uma pendência do erro anterior que eu tinha citado.

 
Postado : 01/02/2012 12:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Veja na sua ultmia versão (V1.0.3), se e o que espera.

Anexo Atualizado em 06/09/2014

Qto a ter que codificar ao ser criada uma nova tabela, ainda não está "desobrigado" disso; pois as rotinas: "criaSQLUpdate";"CriaSqlInsert" e "Ajusta_ListView"
são "construidas na mão", ou seja se houver nova tabela ou novos campos, os "Cases" deverão ser alterados/incluidos

 
Postado : 01/02/2012 1:41 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caio, hoje foi mais um dia daqueles, fiquei sem Net no serviço o dia todo, estão alterando a rede e vira e mexe da pane.

Ainda bem que temos o Reinaldo para dar um apoio tambem.

Reinaldo neste seu exemplo, quando seleciono no Combo "itensAvaliados" da o seguinte erro : "Invalid Property Value" ?

Caio, para preencher os Labels de acordo com os Nomes das Colunas, faça a seguinte alteração na rotina :
Private Sub cboxTabelas_Change()

Dim sNomeCol

E na instrução que monta os label(s) :
Do While i <= ListView5.ColumnHeaders.Count
'Nomes das Colunas do LVW
sNomeCol = ListView5.ColumnHeaders(i).Text

Set lbl = UserForm2.Controls.Add("Forms.Label.1")
With lbl
.Caption = ActiveCell.Value
.Left = 12
.Top = t

.Caption = sNomeCol
End With
..........
................
........................
End Sub

Até qq hora.

[]s

 
Postado : 01/02/2012 10:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Veja na sua ultmia versão (V1.0.3), se e o que espera.

Qto a ter que codificar ao ser criada uma nova tabela, ainda não está "desobrigado" disso; pois as rotinas: "criaSQLUpdate";"CriaSqlInsert" e "Ajusta_ListView"
são "construidas na mão", ou seja se houver nova tabela ou novos campos, os "Cases" deverão ser alterados/incluidos

..è verdade Reinaldo, ainda teria que ser criado essas rotimas, mas mesmo assim, ainda economiza tempo Neh!?..rs

@Mauro

Reinaldo neste seu exemplo, quando seleciono no Combo "itensAvaliados" da o seguinte erro : "Invalid Property Value" ?

Isso é porque os metodos de criar as consultas e ajustar a listview não existiam ainda para essa tabela, por isso o erro. Versão abaixo corrigida, já com as Labels trazendo os nomes das colunas. (Show de bola)

Vou fazer alguns testes agora para ver se está funcional como o planejado e se tem alguns bugs.

Só fiquei com uma dúvida ai acho que o vocês vão poder me ajudar.

Ao Criar um objeto tipo o checkbox, consigo cria-lo dentro de uma multi página por exemplo? pensei nisso pois se eu tiver um questionário com muitas opções vai deformar todo o formulário, e para não colocar um ScrollBar no formulário, acho que se tivesse uma Multi página no centro com scrollBar resolveria o problema o que vocês acham?
Bom galera acho que chegamos em um ótimo resultado, acredito que esse tópico ficou bem interessante principalmente para os apaixonados em VBA, apreendi muito e fiz coisas aqui que nem imaginava que poderia ser feito com VBA

Valeuu @ Mauro e @Reinaldo!!!

 
Postado : 02/02/2012 5:35 am
Página 3 / 4