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]

Responder a