Este script es interesante ya que nos permite crear una tabla en Base.
Esta funcion es algo larga pero en su mayoria son manejadores de posibles
errores como verificadores que la db exista, que la tabla exista y de que
se pueda reemplazar sin mayor problema. Tambien muchas se dedican a las
variables que estaran funcionando en esta funcion. Los comentarios estan
traducidos para mejorar su entendimiento. Los comentarios estan marcados
como REM y las varaibles son validadas con DIM.
REM Crea la base de datos especificada por dbURL.
REM Si no existe, entonces se crea.
REM Si bForceNew es True, entonces se borra la tabla existente.
REM Si bVerbose es True, se muestra un mensaje de exito.
Sub CreateBinaryTablesUseSQL(dbURL As String, _
Optional bForceNew = False, _
Optional bVerbose = False)
Dim sTableName$ 'El nombre de la nueva tabla
Dim oTable 'valor para la tabla en la base de datos
Dim oTables 'Tablas en el documento
Dim oTableDescriptor 'Define el funcionamiento de una tabla
Dim oCols 'Las columnas de una tabla
Dim oCol 'Descripcion de una columna
Dim oCon 'Conexion a la db
Dim oBaseContext 'Database context service.
Dim oDB 'Fuente de almacenamiento de la base de datos
Dim oResult 'Resultado de SQL
Dim nCount As Long 'Contando variables
Dim oStmt
Dim sSql$
REM Si no existe la base de datos entonces la crea.
If NOT FileExists(dbURL) Then
CreateBinaryDB(dbURL, bVerbose)
End If
REM Usa DatabaseContext para obtener la referencia de una DB.
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oBaseContext.getByName(dbURL)
oCon = oDB.getConnection("", "")
oStmt = oCon.createStatement()
sTableName$ = "BINDATA"
REM Primera, checa si ya existe la tabla
sSql = "select count(*) from INFORMATION_SCHEMA.SYSTEM_TABLES " & _
"where TABLE_NAME='" & sTableName & "' " & _
"AND TABLE_SCHEM='PUBLIC'"
nCount = 0
oResult = oStmt.executeQuery(sSql)
If NOT IsNull(oResult) AND NOT IsEmpty(oResult) Then
oResult.Next()
nCount = oResult.getLong(1)
End If
If nCount <> 0 Then
If bForceNew Then
If bVerbose Then Print "Deleting table " & sTableName
REM El comporamiento normal es usar RESTRICT en vez de CASCADE.
REM RESTRICT evita que se elimine si existen dependencias
REM de esta tabla.
sSql = "DROP TABLE " & _
DBQuoteName(sTablename, oCon) & _
"IF EXISTS CASCADE"
oStmt.executeQuery(sSql)
RefreshTables(dbURL$, oCon)
oCon.close()
Exit Sub
Else
If bVerbose Then Print "Table " & sTableName & " already exists!"
oCon.close()
Exit Sub
End If
End If
REM No puse el campo de nombres entre parentesis
REM ya que se que todas son mayusculas sin nada especial.
sSql = "CREATE TABLE " & _
DBQuoteName(sTableName, oCon) & _
"(ID INTEGER NOT NULL IDENTITY PRIMARY KEY, " & _
" NAME VARCHAR(255) NULL, " & _
" DATA LONGVARBINARY NULL)"
oStmt.executeQuery(sSql)
If bVerbose Then Print "Created table in " & dbURL
RefreshTables(dbURL$, oCon)
REM No deseches el database context de lo contrario
REM no seras capaz de recuperarlo sin reiniciar OpenOffice.org.
REM Almacena los documentos relacionados para almacenar los cambios.
oDB.DatabaseDocument.store()
oCon.close()
If bVerbose Then Print "Table " & sTableName & " created!"
End Sub
--
Alexandro Colorado
CoLeader of OpenOffice.org ES
http://es.openoffice.org
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]