none
Conecção ADODB RRS feed

  • Pergunta

  • Boa noite pessoal,

    Estou tentando uma conexão entre duas planilhas de excel, usando as ferramentas ADODB, como mostrado no código abaixo:

    Private Sub btoProcurar_Click()
    
    Dim strDB As String
    Dim nLsItem As Integer
    
    
        If txtData <> Empty And txtNome <> Empty And txtMatricula <> Empty Then
        
            With lswConDiario
                
                With .ColumnHeaders
                    .Clear
                    .Add , , "Código do Produto", 80
                    .Add , , "Descrição do Produto", 250
                    .Add , , "Quantidade", 50
                    .Add , , "Valor Unitário"
                    .Add , , "Valor Total"
                    
                End With
                
                .View = lvwReport
                .FullRowSelect = True
                .Gridlines = True
                
            End With
            
            Call mdlGlobalConnection.Conection
    
            Set rs = New ADODB.Recordset
            
            strDB = "SELECT * FROM [Consumo$] WHERE Data = '" & txtData & "'" & " AND Matricula = '" & txtMatricula & "'"
            
            Set rst = cn.Execute(strDB)
            
            lswConDiario.ListItems.Clear
    
            With rs
            
                If Not .EOF Then
                
                    Do While Not .EOF
                        
                        lswConDiario.ListItems.Add , , !Codigo_do_Produto
                        lswConDiario.ListItems.Item(nLsItem).SubItems(1) = !Nome_do_Produto
                        lswConDiario.ListItems.Item(nLsItem).SubItems(2) = !Quantidade
                        lswConDiario.ListItems.Item(nLsItem).SubItems(3) = !Valor_Unitario
                        lswConDiario.ListItems.Item(nLsItem).SubItems(4) = !Valor_Total
                        
                        nLsItem = nLsItem + 1
                    Loop
                    
                
                
                Else
                
                    MsgBox "Não há consumo deste sócio para esta data!", vbInformation, "ATENÇÃO"
                
                End If
                
                    Set rs = Nothing
                    cn.Close
            
            End With
            
        Else
        
            MsgBox "Por favor preencha todos os dados para que a pesquisa seja executada!", vbCritical, "ERRO"
        
        End If
    
    
    
    
    End Sub
    

    A primeira planilha é um banco de dados, conforme o print abaixo:

    E a segunda planilha recebe os dados em uma listview, mas quando executo a conexão ocorre o seguinte erro:

    Este Erro ocorre na parte do código, quando irá executar o recordset:

            strDB = "SELECT * FROM [Consumo$] WHERE Data = '" & txtData & "'" & " AND Matricula = '" & txtMatricula & "'"
            
            Set rst = cn.Execute(strDB)


    Alguém pode me ajudar?

    Desde já agradeço

    sexta-feira, 20 de fevereiro de 2015 01:56

Respostas

  • O correto é conexão.

    ---

    Sobre sua dúvida, como data é um número, faça o seguinte:

    strDB = "SELECT * FROM [Consumo$] WHERE Data = " & CLng(CDate(txtData)) & " AND Matricula = '" & txtMatricula & "'"

    Verifique se na coluna de datas de sua planilha todas as datas estão, de fato, como datas (basta alinha-las em Geral e verificar se o alinhamento do texto da data em cada célula se posiciona à esquerda da célula).


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 20 de fevereiro de 2015 22:01
    Moderador
  • Credio que sua Cláusula WHERE está muito restritiva.

    Pelo que vi na sua tabela, as matrículas parecem únicas para cada funcionário.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 23 de fevereiro de 2015 23:54
    Moderador

Todas as Respostas

  • O correto é conexão.

    ---

    Sobre sua dúvida, como data é um número, faça o seguinte:

    strDB = "SELECT * FROM [Consumo$] WHERE Data = " & CLng(CDate(txtData)) & " AND Matricula = '" & txtMatricula & "'"

    Verifique se na coluna de datas de sua planilha todas as datas estão, de fato, como datas (basta alinha-las em Geral e verificar se o alinhamento do texto da data em cada célula se posiciona à esquerda da célula).


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 20 de fevereiro de 2015 22:01
    Moderador
  • Obrigado Felipe deu certo aqui, o erro estava nas aspas ( ' ) que coloquei no meu código, elas só devem ser colocadas se os campos forem de texto, agora mais uma pergunta, como faço para trazer valores repetidos, quando ele executa o recordset se ouver valores repetidos ele ignora e traz somente um valor de cada, ignorando o outro valor que é igual a ele.

    Muito obrigado
    sábado, 21 de fevereiro de 2015 23:44
  • Estranho estar falando isso, uma vez que a cláusual que você está usando é SELECT, e não SELECT DISTINCT (que traria apenas os registros únicos).

    Tem certeza que isso está acontecendo?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    domingo, 22 de fevereiro de 2015 17:50
    Moderador
  • Sim o comando está retornando apenas um dos valores, ex: se tenho tres valores iguais ele retorna apenas um deles.
    segunda-feira, 23 de fevereiro de 2015 17:14
  • Credio que sua Cláusula WHERE está muito restritiva.

    Pelo que vi na sua tabela, as matrículas parecem únicas para cada funcionário.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 23 de fevereiro de 2015 23:54
    Moderador
  • Percebi o problema, era realmente o WHERE que estava restringindo.

    Muito Obrigado

    terça-feira, 24 de fevereiro de 2015 23:02