Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por GladstoneD
Posts
#30640
Boa tarde!!

Eu de novo. Então, estou tentando alterar minha planilha pra salvar os dados no BD do Access. Preciso de um código que verifique se um cadastro já foi cadastrado antes. Encontrei esse na internet. Não sei o que estou fazendo de errado. Todo valor retornar Nothing
Código: Selecionar todos
Sub NovoEndereco ()

Dim VerifEndereco As Recordset
Dim Endereco As String
   
Endereco = frmClientes.cmbEndereco.Text

ConectaDb

    strSQL = "SELECT " & Endereco & " FROM TBEndereços WHERE " & Endereco & " = " & frmClientes.cmbEndereco & """"""

    Set VerifEndereco = CurrentDB.OpenRecordset(strSQL)

     If VerifEndereco.RecordCount <> 0 Then
        MsgBox " Registro Existente.", vbInformation
     Fecha Db
      Exit Sub

    Else

      'ESCREVER CODIGO PARA GRAVAR NOVO ENDEREÇO NA TABELA

    End If
     
   FechaDb
     
 End Sub
O que pode estar errado?
Avatar do usuário
Por Reinaldo
Avatar
#30641
Difícil assim somente por uma rotina sem saber o que contem cada variável/tabela, mas verifique a composição da string <<strSQL>>.
e definido a variável <<endereço>> como sendo valor do cmbEndereco;
depois na montagem da sql que registros onde Endereco seja igual ao cmbendereco.
Normalmente depois da clausula Where deve ser determinado/informado qual o campo da tabela Access a ser considerado
Por GladstoneD
Posts
#30650
Reinaldo escreveu:Difícil assim somente por uma rotina sem saber o que contem cada variável/tabela, mas verifique a composição da string <<strSQL>>.
e definido a variável <<endereço>> como sendo valor do cmbEndereco;
depois na montagem da sql que registros onde Endereco seja igual ao cmbendereco.
Normalmente depois da clausula Where deve ser determinado/informado qual o campo da tabela Access a ser considerado
Reinaldo, boa noite. Obrigado por responder. Vou tentar situar as variáveis. Alterei a variável pra não confundir os nome

Localidade (Variavel que tras o valor do Combobox cmbEnderecos

TBEndereços ( Tabela no Access)

Endereços (Coluna na Tabela TBEndereços - Isso eu corrigi no código depois da sua ultima dica)

Então tenho

SELECT Localidade(Variavel)
FROM TBEndereços(Tabela)
WHERE Endereços(Coluna) = frmClientes.cmbEndereco
Código: Selecionar todos
strSQL = "SELECT " & Localidade & " FROM TBEndereços WHERE Endereço = " & frmClientes.cmbEndereco & ""
Depois da string composta, o resultado é esse
SELECT Sete de Setembro FROM TBEndereços WHERE Endereço = Sete de Setembro

Está correto?
Avatar do usuário
Por Reinaldo
Avatar
#30668
a clausula Select espera um (ou mais) campo/coluna de uma Tabela; pode-se utiliza o caracter * (asteristico) para selecionar todos os campos da tabela.
Assim me parece mais correto monta sua clausura sql:
Código: Selecionar todos
strSQL = "SELECT * FROM TBEndereços WHERE Endereço = " & localidade & ""
porem o nome na tabela é Endereço ou Endereços?
Por GladstoneD
Posts
#30679
Reinaldo escreveu:a clausula Select espera um (ou mais) campo/coluna de uma Tabela; pode-se utiliza o caracter * (asteristico) para selecionar todos os campos da tabela.
Assim me parece mais correto monta sua clausura sql:
Código: Selecionar todos
strSQL = "SELECT * FROM TBEndereços WHERE Endereço = " & localidade & ""
porem o nome na tabela é Endereço ou Endereços?
Boa tarde

Aqui os nomes dos objetos. Estou achando que esse código é pro ACCESS. Estou usando no VBA EXCEL. Seria esse o problema?

Imagem

Imagem

Vou testar esse codigo que vc mandou

Obrigado
Avatar do usuário
Por Reinaldo
Avatar
#30684
a sintaxe do sql é valida para os dois (access e Excel), tudo depende da conexão com o banco de dados
Por GladstoneD
Posts
#30713
Reinaldo escreveu:a sintaxe do sql é valida para os dois (access e Excel), tudo depende da conexão com o banco de dados
Esses são os códigos da conexão:

Variáveis
Código: Selecionar todos
Public db   As New ADODB.Connection
Public rs   As New ADODB.Recordset
Public Peth As String
Public FD   As ADODB.Field
Conectar
Código: Selecionar todos
Sub ConectDB()

  Peth = ThisWorkbook.Path & "\Dados.mdb"
  db.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Peth & ";Jet OLEDB:Database Password=MyDbPassword"

End Sub
Desconectar
Código: Selecionar todos
Sub FechaDb()

  db.Close: Set db = Nothing
  Set rs = Nothing
  Set FD = Nothing

End Sub
Algo de anormal? As rotinas de gravar dados na tabela estão funcionando normalmente
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord