** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Combobox que lista nombre de tablas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCombobox que lista nombre de tablas

 Responder Responder
Autor
Mensaje
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Tema: Combobox que lista nombre de tablas
    Enviado: 30/Marzo/2019 a las 09:53
Buenos días a todos y gracias por vuestro tiempo y colaboración:
Mi problema es el siguiente:
En mi BD tengo creado un formulario al cual he añadido un combobox que me refleja, al abrir el formulario, el nombre de las tablas que tengo en mi  BD, mediante el siguiente código:
 Private Sub Form_Load()
Dim Tbl As AccessObject
Dim miDB As DAO.Database
Set miDB = CurrentDb
For Each Tbl In CurrentData.AllTables
    If Not Tbl.Name Like "MSys*" Then Me.cboCombinado1.AddItem Tbl.Name
Next Tbl
 miDB.Close
 Set miDB = Nothing
End Sub

Esto me funciona bien.

Donde tengo el problema es como consigo  que al hacer clic sobre cualquiera de las tablas que me han salido en el Combobox, me refleje los datos de esa tabla en los cuadros de texto que tengo añadidos al formulario.

Resumiendo: Las tablas reflejan asientos contables y en forma sencilla podían ser así:
Autonúmero       Concepto  Debe/Haber   Importe    Cuenta contable     Comentarios 
    1                      Fact/27                  D          25.000      4000B70GF45          Vivienda ppal.
    2                      Fact/27                  H          10.000      4008B70SS11  
    3                      Fact/27                  H          15.000      4009B45DC01
    4                      Fact/A1                  D            5.500      4000A14DS76           Local comercial
    5                      Fact/A1                  H            5.500      4060V12MM01  

En mi formulario la disposición que tengo establecida es en vertical.
Autonúmero. . . 1                    Autonúmero. . . 2                 Autonúmero. . 3       etc.etc            
Concepto . . . .Fact/27             Concepto . . . .Fact/27          Concepto . . . .Fact/27          
Debe/Haber. .    D                     Debe/Haber. .    H                Debe/Haber. .    H                
Importe. . . .  25.000                 Importe. . . .  10.000              Importe. . . .  15.000
Cta. contable  4000B70GF45    Cta. contable  4000B70SS11  Cta. contable  4000B45DC01
Comentarios    Vivienda ppal.   Comentarios                          Comentarios

He buscado por el foro pero no encuentro nada parecido.

Espero haberme sabido explicar para que me podáis ayudar.
Un saludo.




Algo es algo
Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 30/Marzo/2019 a las 10:04
Perdón me he expresado mal:
Donde dijeEn mi formulario la disposición que tengo establecida es en vertical. 
Quise decir: En mi formulario la disposición que quiero que me salga es en vertical.

Un saludo.

Algo es algo
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2001
Enlace directo a este mensaje Enviado: 30/Marzo/2019 a las 11:36
Yo haria algo asi, cuando seleciones la tabla del cuadro, en el evento despues de actualizar de este asignaria el recorsource al formulario y lo actualizaria.

ejemplo
https://www.dropbox.com/s/gxb7jraijoffgb8/AsignarRecoreSouceTablaCuadroCobinado.rar?dl=0

Este es todo el codigo que lleva el ejemplo, logicamente todas la tablas llevan el mismo nombre de campo, para que el origen del registro sea el mismo.

Para sacar el recordsurce del formulario, hazlo con una consulta mira en vista SQL y en codigo le pones la variable con el nombre de la tabla


Private Sub ccTablas_AfterUpdate()

Dim varTabla As String
varTabla = Me.ccTablas  'Pillamos el nombre de la tabla del cuadro combinado

'Ponemos la variable a las tablas y le asignamos recordsource al formulario
Me.RecordSource = "SELECT " & varTabla & ".id, " & varTabla & ".a, " & varTabla & ".b, " & varTabla & ".c, " & varTabla & ".d FROM " & varTabla & ";"
'Actualizamos formulario
Me.Requery
End Sub

Private Sub Form_Open(Cancel As Integer)
'Asignamos recordsource al Cuadro combinado listando las tablas
Me.ccTablas.RowSource = "SELECT MSysObjects.Name, MSysObjects.Type FROM MSysObjects WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Name) Not Like 'MSys*'));"
End Sub




Editado por rokoko - 30/Marzo/2019 a las 11:38
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4927
Enlace directo a este mensaje Enviado: 30/Marzo/2019 a las 14:46
Recuerdo que hice un ejemplo a un forero parecido hace tiempo:

https://www.dropbox.com/s/aufzw90ml89yxx3/AColumna.accdb?dl=0

Saludos.

PD el hilo en cuestión es:




Editado por emiliove - 30/Marzo/2019 a las 17:11
Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 30/Marzo/2019 a las 19:30
Muchas  gracias rokoko y emiliove por vuestra solución. Voy a probar vuestras ideas y os contesto.

 Un saludo
Algo es algo
Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 01/Abril/2019 a las 17:24
Buenas tardes a todos y gracias por vuestra atención.
rokoko: La solución que propones me funciona a medias, me explico:
Si trato de aplicar el código que indicas, adaptándolo claro está, a  mi BD no me funciona.
Hay algo que se me escapa y que puede ser lo referido en tu parrafo: "Para sacar el recordsurce del formulario, hazlo con una consulta mira en vista SQL y en código le pones la variable con el nombre de la tabla".
No se a que te refieres en concreto. Mis conocimientos son pequeños, no veo que tu BD tenga ninguna consulta donde aplicar SQL. Y ahí es donde me pierdo.
Por otro lado, si en tu BD del ejemplo, importo mis tablas, si me funciona. Siempre que cambie el nombre de mis tablas, como pongo a continuación:
NOMBRE DE TABLA      NOMBRE DE TABLA CORREGIDO (para que funcione Tu BD)
FEB-19 E755(1)              FEB197551
DIC-18 E700(21)            DIC18E70021
DIC-18 E754(20)            DIC18E75420
ETC.
Osea, suprimo guiones, espacios en blanco y paréntesis del nombre de las tablas.
Se que los nombres de las tablas tienen algunas limitaciones, pero desconozco si existe algún forma que me pueda solucionar este problema. ¿Se te ocurre alguna?

Con los nombres de los campos de las tablas me ocurre algo parecido:
NOMBRE DEL CAMPO       NUEVO NOMBRE DEL CAMPO (para que funcione Tu BD)
Company code                 Companycode
Posting date                     Postingdate
Document date                 Documentdate
ETC.
Osea, suprimo espacios en blanco. ¿Se te ocurre alguna solución a este problema?
He tratado de solucionarlo con guion bajo _ en el código pero no me soluciona nada.
Te quedo muy agradecido por tu aportación y si me resuelves, o das alguna idea con los problemillas con la ortografía, ni te cuento.

Un abrazo.









Algo es algo
Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 01/Abril/2019 a las 17:30
emiliove: 
Gracias por tu respuesta, pero creo que no se ajusta a mis necesidades. Me explico:
En tu BD del ejemplo partes de una sola Tabla y en mi BD tengo muchas, por lo tanto ya de entrada y dado mis pocos conocimientos, creo que me va a resultar muy difícil llegar a una solución.
Te agradezco tu aportación y tu tiempo.
Un saludo.
Algo es algo
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2001
Enlace directo a este mensaje Enviado: 01/Abril/2019 a las 18:51
= "SELECT " & varTabla & ".id, " & varTabla & ".a, " & varTabla & ".b, " & varTabla & ".c, " & varTabla & ".d FROM " & varTabla & ";"

= "SELECT NombreTabla.id,NombreTabla.a, NombreTabla.b, NombreTabla.c, NombreTabla.d FROM NombreTabla;



Esto es una consulta SQL , a una consulta normal no puedes ponerle variables, y tienes que hacerlo asi.   varTabla es una variable a la que le asignamos el nombre de la tabla

Create una consulta normal con una de tus tablas y mirala en vista SQL, a esa consulta debes de ponerle la variable donde este el nombre de la tabla. Copiala y pegale en el codigo y hay le pones las variable varTabla


Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 01/Abril/2019 a las 20:40
Buenas noches:
rokoko,  gracias por tu explicación voy a probar y te cuento.
Un saludo.
Algo es algo
Arriba
Ernesto Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 16/Mayo/2011
Localización: España
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 02/Abril/2019 a las 18:44
Buenas tardes y gracias a todos por vuestra atención.
rokoko al final lo que he hecho ha sido exportar tu formulario a mi BD y me funciona perfectamente.
Los nombres de las tablas los he tenido que modificar, pues está claro, que los espacios en blanco y los signos no los tolera Access. La mejor idea, para solucionar este problema,  se la he leido a Mihura: Suprimir los espacios entre palabras y escribiendo la primera con mayusculas osea:
Tabla horas extraordinarias  Por TablaHorasExtraordinarias.

Gracias una vez mas a todos vosotros y especialmente a rokoko, mi problema de Combobox que lista nombre de tablas se ha solucionado, tengo otras dudas pero será mejor abrir otra consulta.
Un saludo.
SE PUEDE CERRAR.

 
Algo es algo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable