Visual Basic for Applications (MS Access)

Entre ayer y hoy he aprendido a utilizar VBA en Access para realizar unas modificaciones en unas bases de datos, lo pongo aqui como referencia por si vuelvo a necesitar hacer algo del estilo:

' ExecuteQuery: Realitza una modificació a la BD
' Provar amb:
'  ExecuteQuery "INSERT INTO CamaraEnvasadoPreenvasado VALUES ('test', 'borrar')"
Sub ExecuteQuery(strSQL As String)
   Dim cnn          As ADODB.Connection
   Dim lngAffected  As Long
   
   ' Open the connection.
   Set cnn = CurrentProject.Connection

   ' Execute the query.
   cnn.Execute CommandText:=strSQL, _
               RecordsAffected:=lngAffected, _
               Options:=adExecuteNoRecords

   'Debug.Print "Records Affected = " & lngAffected
   
   ' Close connection and destroy object variables.
   cnn.Close
   Set cnn = Nothing
End Sub

' TransformDB: Agafa els registres de Frustas_Hortalizas amb el
' camp "checkField" a true i guarda el num. suscriptor junt amb
' "idEnvase" a la taula RelacionEnvase
' Provar amb: TransformDB "Pre_codigo_PLU", 25
Sub TransformDB(checkField As String, idEnvase As Integer)
    Dim cnnDB As ADODB.Connection
    Dim recordSt As New ADODB.Recordset
    Dim strSQL As String
    Dim idSuscriptor As String
    Dim i As Integer
   
    ' Connectar a la BD actual:
    Set cnnDB = CurrentProject.Connection

    ' Obtenim els registres que tenen el camp indicat a true
    strSQL = "SELECT * FROM Frustas_Hortalizas WHERE " & checkField & " = -1"
    With recordSt
        Set .ActiveConnection = cnnDB
        .CursorType = adOpenKeyset
        .CursorLocation = adUseClient
        .LockType = adLockOptimistic
        .Open strSQL
    End With
    
    ' Insertar a la taula RelacionEnvases una relacio entre
    ' l'idSusbcriptor dels registres trobats i el idEnvas corresponent
    ' al camp que hem comprovat
    i = 0
    If Not recordSt.EOF Then
        recordSt.MoveFirst
    End If
    Do While Not recordSt.EOF
        idSuscriptor = recordSt.Fields("Numero de suscriptor").Value
        ' Insertar amb ID de "envasado" 26
        ExecuteQuery "INSERT INTO RelacionEnvases VALUES ('" & idSuscriptor & "','" & idEnvase & "')"
        i = i + 1
        recordSt.MoveNext
    Loop
    'Debug.Print "Fields " & recordSt.Fields.Count
    Debug.Print "Found " & i & " registers with field " & checkField & " = true. idEnvase = " & idEnvase
   ' Close Connection object and destroy object variable.
   cnnDB.Close
   Set cnnDB = Nothing
End Sub

Mientras editamos el modulo en MS Access podemos pulsar CTRL+G para mostrar la ventana “Inmediato” y ahi se pueden ejecutar las funciones.

3 thoughts on “Visual Basic for Applications (MS Access)

  1. Necesito si tenes un ejemplo de en Visual 6.0 como hacer para crea una base de datos de Access 2003 , crear tablas , llenar datos , no correria en Visual sino en un HMI Wincc Flex de Siemens , pero utiliza Scrips en Visual para la programacion

  2. tengo un problema en visual basic y es que al ejecutar una base de datos de access a visual con conectividad hecha el cn.Execute(strsql) me aparece un error y no me llama la base de datos, es decir necesito que me digan como puedo conectar la base de datos de mi proyecto al visual, ya que mi proyecto es de “palitos de queso buen gusto” y tiene clientes, proveedores, cartera, materia prima y prductos pero no me conecta por favor ayuda!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *