none
Problema con VBA y Access RRS feed

  • Pregunta

  • Buenos días para todos:

    Estoy trabajando con Access 2016 y VBA. Tengo una pequeña base de datos (no web) de la cual destaco los siguientes elementos:

    -          Un formulario con un botón que llamo Compositores

    -          Una tabla llamada org_tit que contiene en cada registro la información correspondiente a una pista o track de un disco. Cada registro tiene varias columnas pero las que interesan en este momento son:

    • Identificación del disco (string (6))
    • Número de la pista (byte)
    • Nombre del compositor (Texto corto). Puede estar presente o no (o sea que esa información no está disponible para todas las pistas) y puede estar repetido el mismo compositor para varias pistas
    • IdCompositor (entero largo). Inicialmente no tiene información.

    Nota: las dos primeras columnas conforman la llave primaria de la tabla

    -          Una tabla llamada compositores inicialmente vacía que tiene dos columnas:

    • IdComp (autonumérico)
    • Compositor (texto corto) que contiene el nombre del compositor

    Deseo que al pulsar el botón del formulario, se ejecute una función en VBA que con un comando sql escoja un único valor de cada nombre de compositor que exista en la tabla org_tit y que, con cada uno de ellos cree un registro en la tabla compositores; ese número autonumérico que crea en cada registro, lo tiene que llevar de nuevo a la columna IdCompositor de la tabla org_tit. 

    He escrito la función Comando48_Click() que ejecuto en el evento Al hacer click del botón compositores, pero no funciona. En el evento, está indicada como [Procedimiento de evento]. Ni siquiera produce el mensaje de saludo que puse para saber si ingresaba a la función. Alguien me puede dar una manito?

    La función es la siguiente:

    Option Compare Database

    Option Explicit

    Private Sub Comando48_Click()

    Dim db As Database

    Dim w_compos As Recordset

    Dim strSql As String, salida As String

    Dim cantidad As Integer

    MsgBox ("Bienvenidos, compositores")

    Set db = CurrentDb

    Set cantidad = 0

    strSql = "SELECT UNIQUE compositor FROM org_tit WHERE compositor IS NOT NULL ORDER BY compositor"

    Set w_compos = db.OpenRecordset(strSql)

    w_compos.MoveFirst

    Do Until w_compos.EOF

       strSql = "INSERT INTO compositores (codNom) VALUES (w_compos.compositor);"

       DoCmd.RunSQL strSql

       Set cantidad = cantidad + 1

       w_compos.MoveNext

    Loop

    w_compos.Close

    salida = "Compositores creados " & cantidad & vbCrLf

    MsgBox salida

    End Sub

    NOTA: En la tabla org_tit hay otras varias columnas que tendrán el mismo tratamiento, con esto pretendo darle una mejor presentación a la BD haciendo una buena normalización.

    Las referencias que estoy utilizando del VBA son las siguientes:

    - Visual Basic for Applications

    - Microsoft Access 16.0 Object Library

    - OLE Automation

    - Microsoft Office 16.0 Access database engine Object Library

    - Microsoft ActiveX Data Objects 6.1 Library

    - Microsoft ADO Ext. 6.0 for DDL and Security

    Por otra parte, la función Comando48_Click() está situada en el archivo Form_Conversión (Código) que está situado bajo la pestaña Microsoft Access Objetos de clase. No sé si esta ubicación es muy importante, porque tengo en este momento un Módulo1 y un Módulo2 pero sin código. Aclaro que Conversión es el nombre del formulario que estoy usando en mi pequeña BD

    Mil gracias anticipadas

    gegar14

    miércoles, 12 de octubre de 2016 20:12