Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Beitrag von F3K Total »

Hallo,
das geht recht einfach:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatabaseContext.getByName(ThisDatabaseDocument.getLocation())'Hier wird der aktuelle Datenbankname ermittelt. 
Verbindung = Datenquelle.GetConnection("","")' ("Benutzername","Passwort")
SQL_Anweisung = Verbindung.createStatement()
Jetzt den SQL-Befehl zum Erzeugen einer Tabelle, dabei wichtig, nur Großbuchstaben wie PILOTID brauchen nicht in doppelte "" eingepackt werden, sind auch Kleinbuchstaben dabei, dann wie Name_der_Tabelle:

Code: Alles auswählen

Sql ="CREATE CACHED TABLE ""Name_der_Tabelle"" (ID integer not null identity, PILOTID integer, F1 integer, NAME varchar(50))"
SQL_Anweisung.executeUpdate(Sql)
Jetzt noch in Base Ansicht/Tabellen aktualisieren und schon ist sie da.
Willst Du Werte in die Tabelle schreiben dann hier ein Beispiel:

Code: Alles auswählen

Sql ="INSERT INTO ""Name_der_Tabelle""  VALUES (12,13,126,'Max Mustermann')"
SQL_Anweisung.executeUpdate(Sql)
Und Abfragen gehen so:

Code: Alles auswählen

Sql="select ID, PILOTID, F1, NAME  from  ""Name_der_Tabelle"""
Sql_Abfrage=SQL_Anweisung.executeQuery(Sql)
und das Auslesen der Abfrage:

Code: Alles auswählen

While Sql_Abfrage.next
oID=Sql_Abfrage.getint(1)
oPILOTID=Sql_Abfrage.getint(2)
oF1=Sql_Abfrage.getint(3)
oNAME=Sql_Abfrage.getstring(4)
Wend
G R
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Beitrag von komma4 »

Gast hat geschrieben:dass ich die Tabelle nach den Variablenwert benenne und nicht die Tabelle nach der Variable genannt wird?

Indem Du den Inhalt der Variablen verwendest und nicht den Namen der Variablen.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Beitrag von F3K Total »

Hi, Du suchst sicherlich die Syntax?
Hier ein Beispiel, ist wirklich etwas verzwickt, mit den Gänsefüsschen.
gänsefüsschen.png
Das 1. und 4. Gänsefüsschen umrahmt den String vor oder hinter der Variable, das 2. und 3. bildet dann das eine Gänsefüsschen, was im SQL benötigt wird, wenn Kleinbuchstaben vorkommen, bei Großbuchstaben kannst Du sie weglassen.

Dann geht das also so:

Code: Alles auswählen

sub create_table
dim TABLE_NAME as string

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatabaseContext.getByName(ThisDatabaseDocument.getLocation())'Hier wird der aktuelle Datenbankname ermittelt.
Verbindung = Datenquelle.GetConnection("","")' ("Benutzername","Passwort")
SQL_Anweisung = Verbindung.createStatement()

TABLE_NAME="Name_der_Tabelle"

Sql ="CREATE CACHED TABLE """+TABLE_NAME+""" (ID integer not null identity, PILOTID integer, F1 integer, NAME varchar(50))"
SQL_Anweisung.executeUpdate(Sql)

end Sub
Gruß R
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Beitrag von F3K Total »

Hallo,
um welchen Typ von Kontrollfeld handelt es sich bei "Fach"?

G R
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Für jeden Datensatz aus Tabelle eigene Tabelle erstellen

Beitrag von F3K Total »

Nein, nicht dass ich wüßte.
Es lag nur nahe, dass es sich bei dem Feld um ein numerisches Feld handelt, weil es in deinem Makro "oNumField1" heißt.
Dann wäre .Text verkehrt und müßte .CurrentValue heißen.
Aber gerade habe ich vermutlich den Fehler gefunden:
Ersetze mal

Code: Alles auswählen

nValue = oView.Model.text
durch

Code: Alles auswählen

nValue = oView.text
Gruß R
Antworten