Spalte einer Tabelle in eine andere übernehmen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

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

Re: Spalte einer Tabelle in eine andere übernehmen

Beitrag von F3K Total »

Hallo Frog,
schau Dir mal die SQL-Befehle hier an:
viewtopic.php?f=8&t=47595
Du müsstest sie nur in einer anderen Reihenfolge anwenden.
1.) Datenbankverbindung herstellen:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")...
2.) Daten aus der ersten Tabelle auslesen:

Code: Alles auswählen

Sql="select ...
.
.
.
While Sql_Abfrage.next ...
optional neue Tabelle erzeugen, weglassen wenn Du die zweite Tabelle schon angelegt hast:

Code: Alles auswählen

Sql ="CREATE CACHED TABLE " ...
3.) Daten in die zweite Tabelle hineinschreiben:

Code: Alles auswählen

Sql ="INSERT INTO ""Name_der_Tabelle"" ...
Zur 2. Frage:
Klar, Du kannst diese erzeugten/gefüllten Tabellen auch in Formularen verwenden, aber nach dem Erzeugen einmal auf "Tabellen" klicken und dann "Ansicht/Tabellen aktualisieren" drücken, sonst wird die Änderung/neue Tabelle nicht gefunden.

Gruß R
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Spalte einer Tabelle in eine andere übernehmen

Beitrag von komma4 »

frog hat geschrieben: Ich kann mir vorstellen das ich dies über SQL machen muss. Bin aber auch für andere Vorschläge offen.
Sowas kannst Du auch direkt in der Datenbank, bzw. über Extras>SQL... machen - kein Makro nötig.
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: Spalte einer Tabelle in eine andere übernehmen

Beitrag von F3K Total »

Hallo Frog,
Deine letzte Frage habe ich nicht verstanden, was genau möchtest Du tun?
komma4 hat geschrieben:Sowas kannst Du auch direkt in der Datenbank, bzw. über Extras>SQL... machen - kein Makro nötig.
Hallo komma4,
natürlich, stimmt. Für eine einmalige/seltene Aktion ist dies bestimmt die bessere Variante.

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

Re: Spalte einer Tabelle in eine andere übernehmen

Beitrag von F3K Total »

Ok, ich versuche es auch noch einmal.
Schaue Dir die Befehle, die Du im oben angegebenen Link findest mal genau an.
Da steht alles drin, was Du brauchst.

1.) Verbindung zur Datenbank herstellen
2.) Abfrage durchführen--> Die Daten werden hier bereits in die Variable "Sql_Abfrage" eingelesen
3.) Die Variable "Sql_Abfrage" auslesen, den sie ist eine "Variant"-Variable, sprich mal Zahl, mal String usw. und muß deshalb entsprechend ausgelesen werden.

Zur Erklärung:
Wenn Du z.B. die Spalten "Name", "Nachname", mit dem Format "Varchar" und die "Hausnummer" mit dem Format "Integer" aus einer Tabelle "Adressen" auslesen willst, geht das z.B. so:

Code: Alles auswählen

Sub Tabelle_Auslesen

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()

sql="select ""Name"", ""Nachname"", ""Hausnummer"" from ""Adressen"""
Sql_Abfrage=SQL_Anweisung.executeQuery(Sql)

While Sql_Abfrage.next
oName=Sql_Abfrage.getString(1)' hier steht getString(1), weil es sich um die erste Spalte , Format  "Varchar" im Abfragebefehl "sql" handelt.
oNachname=Sql_Abfrage.getString(2)' hier steht getString(2), weil es sich um die zweite Spalte , Format  "Varchar" im Abfragebefehl "sql" handelt.
oHausnummer=Sql_Abfrage.getInt(3)' hier steht getInt(3), weil es sich um die dritte Spalte , Format  "Integer" im Abfragebefehl "sql" handelt.
msgbox "Name: "+oName&" "+oNachname+" Hausnummer: "+oHausnummer
Wend

end Sub
Mit den Variablen oName, oNachname und oHausnummer kannst Du jetzt weiterarbeiten, oder du liest die Abfrage in ein Array ein.

Code: Alles auswählen

i=0
While Sql_Abfrage.next
i=i+1
oName(i)=Sql_Abfrage.getString(1)' hier steht getString(1), weil es sich um die erste Spalte , Format  "Varchar" im Abfragebefehl "sql" handelt.
oNachname(i)=Sql_Abfrage.getString(2)' hier steht getString(2), weil es sich um die zweite Spalte , Format  "Varchar" im Abfragebefehl "sql" handelt.
oHausnummer(i)=Sql_Abfrage.getInt(3)' hier steht getInt(3), weil es sich um die dritte Spalte , Format  "Integer" im Abfragebefehl "sql" handelt.
msgbox "Name: "+oName(i)&" "+oNachname(i)+" Hausnummer: "+oHausnummer(i)
Wend
Dann hast Du die ganze Tabelle in einem Stück.
Gruß R
Antworten