Ir ao conteúdo
  • Cadastre-se
FMattos

Vba - erro de SQL não encontrada.

Recommended Posts

Caros, boa tarde!

 

Estou com um problema para executar uma planilha (chat) em algumas máquinas.

Nestas máquinas que dão erro "Can't find library or project", sempre aponta para:

 

Private Sub listar()
ListBox1.Clear
Call Conecta
Set Rs = New ADODB.Recordset
Sql = "Select * FROM Salas"
Rs.Open Sql, miConexion, 3, 3, adCmdText
ListBox1.ColumnWidths = "50;50"

Do While Rs.EOF = False
ListBox1.AddItem
ListBox1.List(x, 0) = Rs.Fields(0)

If Not Rs.Fields(1) = "" Then _
ListBox1.List(x, 1) = "Sim" Else ListBox1.List(x, 1) = "Não"
x = x + 1
Rs.MoveNext
Loop
Rs.Close
End Sub

 

Outra edição da mesma planilha funciona normalmente nestas máquinas.

Editei algumas coisas de uma para outra, mas este trecho em especial é idêntico.

(marquei "sql" de amarelo porque é desta forma que aparece quando dá erro).

 

Alguma ideia de como resolver isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@FMattos eu sugiro fazer uma checagem geral eliminando as possibilidades. 

Por exemplo, verifique nas maquinas que estão apresentando este erro, se está instado no pacote office o Access. 

Caso não esteja será necessario a instalação de um patch.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole  eu pensei nisso e verifiquei, todas tem o access.

Pesquisando no google encontrei gente com este problema e pediram pra verificar "Microsoft Missing SOAP", mas aqui não tem isso.

adicionado 13 minutos depois

Pensei em mexer novamente no chat, mas parando pra pensar percebi que se funciona perfeito em algumas máquinas, o problema não é nele. preciso ajustar alguma coisa nas máquinas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra possibilidade a eliminar possiveis erros por falta de declaraçoes as variaveis: 

no userform que esta gerando erro. 

No topo do modulo coloque: 

Option Explicit
Public Sql As String

 

No evento: 

Private Sub CommandButton1_Click()
Dim x As String

 

No evento: 

Private Sub listar()
Dim x As Integer

 

 

 

Editado por Basole

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole  agora não ocorre mais erro no sql, mas apareceu em outro lugar.

Variavel não definida.

 

O erro SQL ocorria no userform, este novo ocorre no modulo.

 

Sub Conecta()
If miConexion.State = 1 Then miConexion.Close


ruta = ThisWorkbook.Path
'exemplo de Rede :
'ruta = "\\10.10.200.254\Users\Public\Documents"

'------------------------------------------------------------------------------------

    Set Cnn = New ADODB.Connection
        With miConexion
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & ruta & "\Chat.accdb"
            .Open
        End With
End Sub

 

Amarelo é onde fica selecionado dizendo que a variavel não foi definida, mas ao dar ok na janela de erro, é selecionado automaticamente a parte de azul.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, este é o problema de não declarar todas as variaveis, em algumas maquinas até roda, outras não. 

 

Bom mas enfim, no top deste modulo declare esta variavel:

 

Public Cnn As New ADODB.Connection.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole

Novamente erro no sql no modulo.

 

Sub Abrir()
Set Rs = New ADODB.Recordset
Sql = "Select * FROM Chat where Sala=" & sala
Rs.Open Sql, miConexion, 3, 3, adCmdText

On Error Resume Next
Do While Rs.EOF = False
If Rs.Fields(4) = True Then Call imagen_ap: GoTo siguiente
arrb = 0
If Chat.Frame1.Controls.Count = 0 Then
arrb = 0
Else

If Len(Application.UserName) > Len(Rs.Fields(1)) Then largo = Len(Application.UserName) Else _
largo = Len(Rs.Fields(1))

If largo >= 140 Then largo = 430 - largo Else: largo = 300 - largo

For Each burb In Chat.Frame1.Controls
arrb = arrb + burb.Height
If burb.Left = 168 Then arrb = arrb - burb.Height
Next

arrb = arrb + 2 * Chat.Frame1.Controls.Count
End If

Set fd = Chat.Frame1.Controls.Add("forms.Label.1")
fd.Top = arrb
fd.SpecialEffect = 3
If Rs.Fields(2) = UCase(Application.UserName) Then fd.BackColor = &HC0FFC0 Else _
fd.BackColor = vbWhite
fd.Caption = UCase(Rs.Fields(2)) & ":" & vbCrLf & Rs.Fields(1) & vbCrLf & Format(Rs.Fields(3), "hh:mm")
fd.Width = fd.Width + largo
fd.AutoSize = True

If arrb > 210 Then
 With Chat.Frame1

        .ScrollHeight = fd.Top + fd.Height
        .ScrollTop = fd.Top
    
        'Check If Minimize was pressed and if so, Hide the form instead
        If Chat.Width <> 334.5 And Chat.Height <> 350.25 Then
         If VBA.Minute(Rs.Fields(3)) = VBA.Minute(VBA.Now) Then Call Msg(Rs.Fields(2) & " :  " & Rs.Fields(1))
         End If
                 
 
 End With
End If
siguiente:
    Rs.MoveNext
    Loop
    
End Sub

 

 

A Janela do chat chega a abrir, mas fecha em menos de 2 segundos e apresenta erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole  deu um erro no "Arrb" igual ao "Cnn" , então fiz da mesma forma que você passou para corrigir cnn.

agora ele não consegue executar "salas.show" , sendo salas meu userform.

 

Acha que seria melhor refazer todo o modulo?

tambem tenho a opção de pegar o modelo antigo da planilha, que funciona nestas máquinas e tentar fazer as mesmas alterações nas funções dela como fiz na atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@FMattos Como não fui eu quem desenvolveu esta planilha, fica difícil responder com exatidão sobre este problema. 

 

Mas tente então no userform chat "desfazer" isso:

Citação

No topo do modulo coloque: 

Option Explicit
Public Sql As String

 E em seguida declare cada variavel em seu proprio evento.

Exemplo Dim sql as string

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×