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

Tabela no vb


tjose

Pergunta

Olá pessoal

Bom dia Pessoal. Preciso de um auxílio.

Estou desenvolvendo um sistema de rendimento de técnicos, preciso criar tipo uma tabela pasra cada técnico, com as informações de chegada do técnico no cliente, de saída, e do nome do cliente. Logo seria uma tabela com 3 colounas. As informações seriam preenchidas com um banco de dados.

Acontece que eu não achei nenhum recurso que eu possa criar essa tabela com 3 colunas.

Pensei em criar listbox. Só que eu preciso que essa tabela entenda cada linha como uma linha, e não como um todo. Exemplo: criei o listbox, e precisei alterar a cor de uma linha: apenas uma linha, no entanto ele não tem essa opção. Quando alterava, ele alterava todo o listBox.

Alguém pode me ajudar???

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

aqui o cara desenvolveu uma implementacao da listbox q faz isso: http://www.xtremevbtalk.com/showthread.php?t=23505

faca o download do projeto e ai pra adaptar no seu, é so adicionar o module q ele fez. e adicionar, no form q tenha a lista box, o codigo:

oldWindowProc = SetWindowLong(GetParent(lstColors.hwnd), GWL_WNDPROC, AddressOf NewWindowProc)

só lembre de trocar lstColors pelo nome de sua ListBox

e note tb q seu projeto deve abrir pela Sub Main q esta no Module.

Link para o comentário
Compartilhar em outros sites

  • 0

beleza cara, valeu

Só q eu quero ir um pouco mais além;

Seria muito útil se eu pudesse adicionar a tabela do access diretamente do vb. O próprio grid para poder editá-lo no vb.

Tem como fazer isso, usando o padrão dao. Se tiver, por favor me explique como.

Ou então eu estava pensando que eu poderia criar a mesma inteface de uma tabela com um frame. e dentro dele várias labels (é claro que bem editadas para realmente parecer uma tabela), e aí conforme eu vou adicionando informações, eu vou adicionando labels dentro desse frame através do código.

Qual o código para adicionar label manualmente no vb, dentro de um frame?

Desculpa pelo número de perguntas que faço, e continuarei fazendo. Acontece que estou começando agora programação em vb, no entanto sou apaixonado por programação.

Agradeço desde já pela ajuda.

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

  • 0
Tem como fazer isso, usando o padrão dao. Se tiver, por favor me explique como.

com dao não sei, com ado se você abrir o recordset com o CursorType no adOpenDynamic ele abre como editavel, e ai você consegue escrever no proprio datagrid e já é alterado automaticamente no banco.

com dao talvez de com o dbgrid de alguma forma parecida, mas chega de dao, ele já ta ultrapassado demais. não tem como você mudar pra ado??

Ou então eu estava pensando que eu poderia criar a mesma inteface de uma tabela com um frame. e dentro dele várias labels (é claro que bem editadas para realmente parecer uma tabela), e aí conforme eu vou adicionando informações, eu vou adicionando labels dentro desse frame através do código.

heheheh você pode tentar, mas acho q você vai levar alguns anos fazendo pra conseguir dexar de uma forma agradavel de se usar. isso daria muito trabalho, e dificilmente teria a eficiencia de um grid de verdade.

Qual o código para adicionar label manualmente no vb, dentro de um frame?

é esse:

Dim x As Label
    
    Set x = Me.Controls.Add("VB.Label", "x")
    
    Set x.Container = Frame1
    x.Visible = True
    
    x.Caption = "texto"[/code] veja q nessa linha Set x = Me.Controls.Add("VB.Label", "x"), o segundo parametro (q eu passei como "x") é o nome da label no formulario e não necessariamente tem q ser o mesmo nome da variavel. ai nas demais subs, você pode acessa-la assim por exemplo:
[code]Me.Controls("x").Caption = "texto"

ai o nome vai variar de acordo com o segundo parametro q você passar no controls.add().

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

  • 0

Valeu Kuroi, muito obrigado

Valeu pela dica.

Vou migrar para o padrão ADO.

Ou melhor: já estou migrando.

Só que houve um pequeno problema, no padrão Dao (conheço mais), eu desenvolvi um esqueminha de autenticação.

Existe um banco de dados com uma tabela chamada "usuarios". Dentro dessa tabela existem os campos "user" e "pass", onde estão cadastrados os usuários que podem executar o software. Logo, antes de iniciar o software exite uma caixinha para digitar o usuário e a senha, para autenticação.

O meu código funcionava perfeitamente no padrão Dao. Depois que migrei para o Ado, ele não consegue mais.

Segue o código para análise:

Private Function Autenticacao() As Byte



'AUTENTICADOR***************************************************************
'Retorna 0 para não auteticado
'Retorna 1 para autenticado
'***************************************************************************


Dim x As Integer
Dim i As Integer





'Executando o objeto RecordSet_user
With comandoRecordSet_usuarios
                            .ActiveConnection = DataBase
                            .CommandType = adCmdTable
                            .CommandText = "usuarios"
                            Set RecordSet_user = .Execute
End With







x = RecordSet_user.RecordCount  'número de registros na tabela usuários
i = 1                           'índice auxiliar





RecordSet_user.MoveFirst        'Move para o primeiro registro




Do While (i <= x)
    If txtUserName.Text = RecordSet_user.Fields(0) And _
    txtPassword.Text = RecordSet_user.Fields(1) Then
        Autenticacao = 1
        Exit Do
    Else
        i = i + 1
        RecordSet_user.MoveNext
    End If
Loop



End Function

Agradeço muito se puder me ajudar, e quem sabe um livro bom sobre o padrão ADO.

Kuroi, quando essa autenticação funcionar, eu vou testar as dicas que você me deu referente o DataGrid, agradeço muito se puder contar contigo quando precisar. valeu

Abraços a todos os membros.

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0
Agradeço muito se puder me ajudar, e quem sabe um livro bom sobre o padrão ADO.

opa livro não conheco não, mas nesse site aqui http://www.macoratti.net tem praticamente tudo o q você precisa saber. entra na secao de visual basic e procure sobre ADO la.

quanto ao seu codigo, esta dando alguma mensagem de erro?? quando der erro sempre poste aqui a descricao e aponte a linha do erro q assim fica mais facil da gente identificar.

mas tipo, tem modos mais simples de se fazer isso. nem precisa declarar objeto command.

imagino q DataBase no seu codigo seja um objeto ADODB.Connection ativo não?? se for é so fazer assim:

Set RecordSet_user = DataBase.Execute("Select * From usuarios")

    If txtUserName.Text = RecordSet_user.Fields(0) And _
    txtPassword.Text = RecordSet_user.Fields(1) Then
        Autenticacao = 1
    End If[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Valeu Kuroi.

Consegui desenvolver o sistema ADO.

Só que agora voltei para aquela situação inicial.

Como o sistema que estou desenvolvendo é para rendimento de técnicos, preciso que cada linha seja entendida individualmente.

Como assim? Na tabela, por exemplo do técnico Paulo, estará todos os clientes daquele dia, só que os clientes atendidos (as linhas correspondentes) deverão estar com fundo verde, e os em atraso, com fundo vermelho.

Como eu posso fazer isso?

Tem como me ajudar.

Segue o código para análise,

Private Sub teste_Click()

DataBase.CursorLocation = adUseClient

RecordSet_user.Open "Select*FROM usuarios", DataBase, adOpenDynamic, adLockOptimistic

Set DataGride.DataSource = RecordSet_user

DataGride.Refresh

End Sub

Muito obridado, desde já

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe intrometer aki. Acho q tenho uma função aki pronta pra você usar pro list view

Se não for issi q estah procurando me desculpe:

'Esta funçao serve para conectar o recordset
Function GerarComando(Texto As String) As ADODB.Command
    Dim Cmd As New ADODB.Command
    
    Cmd.ActiveConnection = Conexao
    Cmd.CommandText = Texto
    Cmd.CommandType = adCmdText
        
    Set GerarComando = Cmd
    Set Cmd = Nothing
End Function
    
'Com esta funcao você pode listar com um sql qualquer objeto listview. Ele cria a tabela com seu respectivo tamanho calculado e depois conecta o recordset e envia as informações.


Sub ListarSQL(Obj As ListView, Texto As String, Tela As Form)
    Dim Rs As New ADODB.Recordset
    Dim clmx As ColumnHeader
    Dim Itmx As ListItem
    Dim I As Long
    Tela.MousePointer = vbHourglass
    Rs.Open GerarComando(Texto), , adOpenStatic
    Obj.ListItems.Clear
    Obj.ColumnHeaders.Clear
    
    For I = 0 To Rs.Fields.Count - 1 Step 1
        If Rs.Fields(I).Type = adBigInt Or Rs.Fields(I).Type = adInteger Then
            Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, 800)
        ElseIf Rs.Fields(I).Type = adVarWChar Or Rs.Fields(I).Type = adChar Then
            If Rs.Fields(I).DefinedSize >= 100 Then
                Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 30)
            ElseIf Rs.Fields(I).DefinedSize >= 50 Then
                Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 50)
            ElseIf Rs.Fields(I).DefinedSize >= 5 Then
                Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 120)
            Else
                Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 600)
            End If
        ElseIf Rs.Fields(I).Type = adDate Then
            Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 250)
        ElseIf Rs.Fields(I).Type = adBoolean Then
            Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 300)
        ElseIf Rs.Fields(I).Type = 203 Then
            Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, 1000)
        Else
            MsgBox "O Campo " & Rs(I).Name & " é de um tipo desconhecido"
        End If
    Next I
    If Rs.RecordCount > 0 Then
        Rs.MoveFirst
        Do While Not Rs.EOF
            Set Itmx = Obj.ListItems.Add(, , Rs(0))
            For I = 1 To Rs.Fields.Count - 1
                If Rs(I).Type = adBoolean Then
                    If Rs(I) = True Then Itmx.SubItems(I) = "SIM" Else Itmx.SubItems(I) = "NÃO"
                Else
                    If Not IsNull(Rs(I)) Then
                        Itmx.SubItems(I) = Rs(I)
                    End If
                End If
            Next I
            Rs.MoveNext
        Loop
    End If
    Set Rs = Nothing
    Tela.MousePointer = vbDefault
End Sub


'Agora se você quer colocar uma cor eu tenho outra função aki:

Sub CorGridNovo(Obj as Listview,cor As ColorConstants, Chave As Long)
    Dim A As Integer
    
    Obj.ListItems.Item(Chave).ForeColor = cor
    For A = 1 To Obj.ColumnHeaders.Count -1 Step 1
            Obj.ListItems(Chave).ListSubItems.Item(A).ForeColor = cor
    Next A
End Sub

Realmente para backcolor não funciona mas para forecolor sim

Se tiver algum erro me avisa.

Mais uma vez desculpe se não for isso e pela intromissao.

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0
Eu gostaria apenas de mudar a cor de uma linha do datagrid...

acho melhor você usar o MsFlexGrid ou o MsHFlexGrid. veja esses topicos q ensina como usar:

http://scriptbrasil.com.br/forum/index.php?showtopic=108265

http://scriptbrasil.com.br/forum/index.php...mp;#entry451035

pra mudar a cor da linha, veja esse post:

http://scriptbrasil.com.br/forum/index.php...st&p=501526

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...