[OOo]Tabel maken dmv macro

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 17-05 12:04
Ik wil in OpenOffice.org door middel van een macro een tabel in de database maken (standaard dbase database). Daarvoor had ik het volgende uitprobeersel gebrouwen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Main

    Dim oDatabaseContext, oDataSource, oStatement, oResult, oConnection As Object
    Dim i As Integer
    Dim sQuery As String
    
    oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    oDataSource = oDatabaseContext.getByName("Testdb")
    
    oConnection = oDataSource.GetConnection("","")
    
    oStatement = oConnection.createStatement()
    
    sQuery = "CREATE TABLE 'Table2' (col1 VARCHAR, col2 VARCHAR)"
    
    oResult = oStatement.executeQuery(sQuery)
    
End Sub


De bedoeling was dat hier dus een tabel van 2x2 wordt gemaakt maar ik krijg alleen een foutmelding:

code:
1
2
3
4
BASIC runtime error.
An exception occured
Type: com.sun.star.sdbc.SQLException
Message: syntax error, unexpected STRING, expecting NAME


Als ik sQuery verander in "CREATE TABLE Table2 (row1 VARCHAR, row2 VARCHAR)" dan krijg ik bijna dezelfde error maar dan met:

code:
1
Message: syntax error, unexpected NAME


Zijn hier tweakers aanwezig die hier verstand van hebben en mij kunnen zeggen hoe ik dan een tabel moet maken? Ik heb overigens ook andere syntaxen geprobeerd maar die produceerden allemaal iets vergelijkbaars.

[ Voor 13% gewijzigd door Krankenstein op 11-08-2003 17:27 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ben je wel zeker dat je de executeQuery method moet gebruiken voor dergelijke statements?

Normaal gezien heb je een method die gebruikt wordt voor het uitvoeren van SELECT queries, en een andere method die gebruikt wordt voor het uitvoeren van INSERT, DELETE, UPDATE, CREATE, .... statements.

https://fgheysels.github.io/


  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 17-05 12:04
Zou goed kunnen wat je zegt. Maar welke method zou het dan kunnen zijn? Ik zal ff verder zoeken op de site van OOo.

edit: Er wordt hier gesproken over "executeQuery" en "executeUpdate", maar bij geen van beiden staat dat het icm CREATE te gebruiken is. Ik heb het idee dat tables op een hele andere manier gecreate moeten worden. Maar ik heb geen idee hoe...

[ Voor 59% gewijzigd door Krankenstein op 11-08-2003 16:57 ]


Verwijderd

Volgens mij is het zoiezo NIET executeQuery voor een CREATE. In de java mysql api gebruikt men executeUpdate voor een CREATE, dus misschien ook hier?

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 17-05 12:04
Verwijderd schreef op 11 augustus 2003 @ 21:28:
Volgens mij is het zoiezo NIET executeQuery voor een CREATE. In de java mysql api gebruikt men executeUpdate voor een CREATE, dus misschien ook hier?
Al geprobeerd maar dat werkte niet :(. Ik zat te kijken in de reference op api.openoffice.org bij com.sun.star.sdb en via-via kwam ik bij TableDescriptor en Descriptor. Volgens mij moet ik die gebruiken om een nieuwe table te maken. Maar hoe? (ik ben nogal newbie op het gebied van Staroffice API). Kan iemand hier een voorbeeldje programmeren/mij ff op weg helpen?

edit: Wat zoekwerk in de mailinglists van OOo leerde me dat je dmv een query inderdaad geen tables kan aanmaken. maar hoe dan wel?

[ Voor 10% gewijzigd door Krankenstein op 11-08-2003 23:31 ]


  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 17-05 12:04
Okee dit is de oplossing die iemand op www.oooforum.org mij gaf:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
REM  *****  BASIC  *****

Sub Main

    Dim oDatabaseContext, oDataSource, oTable, oTableDescriptor As Object
    Dim oQueryDefinition, oConnection, oColumns, oColumnDescriptor As Object
    Dim oDataDescriptor As Object
    Dim sQuery As String
    Dim i As Integer
    
    oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    oDataSource = oDatabaseContext.getByName("Testdb")
    oConnection = oDataSource.getConnection("","")
    
    oTable = oConnection.getTables()
    oTableDescriptor = oTable.createDataDescriptor()
    oTableDescriptor.Name = "Table4"
    
    oColumns = oTableDescriptor.getColumns()
    oColumnDescriptor = oColumns.createDataDescriptor()
    
    oColumnDescriptor.Name = "f1"
    oColumnDescriptor.Type = com.sun.star.sdbc.DataType.VARCHAR
    oColumnDescriptor.Precision = 20
    
    oColumns.appendByDescriptor(oColumnDescriptor)
    
    oTable.appendByDescriptor(oTableDescriptor)
    
    oConnection.dispose()   
    
End Sub


Het lijkt allemaal prima te werken :)

[ Voor 5% gewijzigd door Krankenstein op 14-08-2003 12:27 ]

Pagina: 1