Spanish Consultar el nombre de las tablas en una base de datos

Luis_FY

Member
Licensed User
Longtime User
Saludos amigos, estoy tratando de hacer una app usando SQL, hasta ahorita no hay problema para crear desde mi app una base de datos interna y crear n cantidad de tablas para manejar una por día por poner un ejemplo. El problema principal que tengo es que si nombro a una Tabla A1 y vuelvo a poner A1 el programa falla por que esta tabla ya existe en esa base de datos. Quisiera saber si hay forma de consultar las tablas que existen en una base de datos sin conocer el nombre de ella. Alguna forma de pedir a la base de datos "consumo.db" la cantidad y nombre de tablas que existen dentro de ella. Les dejo el programa con el que he estado experimentado para hacer las pruebas.
 

Attachments

  • Gastos_02.rar
    136.1 KB · Views: 162

drgottjr

Expert
Licensed User
Longtime User
B4X:
    Dim rset As ResultSet
    rset = SQL.execquery("Select * FROM sqlite_master where Type='table'")
    Do While rset.As(ResultSet).NextRow
        Dim tname As String = rset.getstring("tbl_name")
        Log(tname)
    Loop
 

Luis_FY

Member
Licensed User
Longtime User
Excelente me funciono muy bien, ahora tengo otra duda de que manera puedo saber la cantidad de Bases de datos que tengo guardadas en la dirección interna. Para esto use:

SQL1.Initialize(File.DirInternal, N_P.Text&".db", True)
 

drgottjr

Expert
Licensed User
Longtime User
el que no conoces ni las tablas ni las bases de datos que mantienes me preocupa. dicho esto, iba a anadir que para listar los archivos en una carpeta, basta con:
B4X:
    Dim carpeta As String = File.DirInternal           ' o cualquiera carpeta
    
    Dim filelist As List
    filelist = File.ListFiles(carpeta)
    If filelist.IsInitialized Then
        If filelist.Size > 0 Then
            dim nbcount as int
            For Each fname As String In filelist
                If fname.EndsWith(".db") Then          ' como ejemplo, y suponienndo que pones la misma extension a tus bases de datos
                    Log(fname)
                    dbcount = dbcount + 1
                End If
            Next
            if dbcount > 0 then
                log(dbcount & " databases found")
            else
                log("no databases found")
        Else
            Log("no files found")
        End If
    Else
        Log("some problem accessing or listing " & carpeta & ": " & LastException)
    End If
 

Luis_FY

Member
Licensed User
Longtime User
el que no conoces ni las tablas ni las bases de datos que mantienes me preocupa. dicho esto, iba a anadir que para listar los archivos en una carpeta, basta con:
B4X:
    Dim carpeta As String = File.DirInternal           ' o cualquiera carpeta
   
    Dim filelist As List
    filelist = File.ListFiles(carpeta)
    If filelist.IsInitialized Then
        If filelist.Size > 0 Then
            dim nbcount as int
            For Each fname As String In filelist
                If fname.EndsWith(".db") Then          ' como ejemplo, y suponienndo que pones la misma extension a tus bases de datos
                    Log(fname)
                    dbcount = dbcount + 1
                End If
            Next
            if dbcount > 0 then
                log(dbcount & " databases found")
            else
                log("no databases found")
        Else
            Log("no files found")
        End If
    Else
        Log("some problem accessing or listing " & carpeta & ": " & LastException)
    End If
Muchas gracias, entonces con esto prácticamente puedo ver que hay en la carpeta interna. Y me sirve mucho por que si creo una base de datos no veo necesario generar otra base de datos para guardar lo nombres. Pero esto esta excelente te agradezco mucho tu ayuda.
 

josejad

Expert
Licensed User
Longtime User
Hola Luis. Tienes experiencia con bases de datos? Realmente necesitas una tabla para cada dia o usuario? Normalmente basta con tener una tabla con un campo usuario y un campo fecha y seleccionar los datos que necesites mediante consultas.

Saludos,
 

Luis_FY

Member
Licensed User
Longtime User
Realmente el ejemplo que subí es principalmente para experimentar pero el objetivo es llevar registros por proyectos realizados y por eso requiero diferentes tablas ya que pueden llegar a ser mas 100 registros. No debería tener que generar mas bases de datos pero quise resolver esa duda por que dependiendo de el avance puedo llegar a necesitar esa opción.
Y es que si se realiza el proyecto de pintado de casa 1 debo tener esos registro y generar uno nuevo para pintado de casa 2 hasta n cantidad de casas.
 

josejad

Expert
Licensed User
Longtime User
Hola:

Pues en ese caso, no creo que necesites más de una tabla, de hecho una tabla puede tener mucho más que cientos de miles de registros (2 elevado a 64), con lo cual, creo que eso no debiera preocuparte.
En la tabla, simplemente puedes tener un campo que sea "id casa" y así diferenciar todas las casas que vayan pintando, con la fecha, el usuario que lo ha hecho, etc...

Por ej, las columnas:
id, id_proyecto, id_casa, fecha, usuario, estado, observaciones

Luego sólo tienes que filtrar por casas para ver todas las que hay pintadas, o por usuarios, para ver cuántas casas ha pintado cada usuario, etc...
 
Last edited:
Top