Tabellenspalte löschen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Tabellenspalte löschen

Beitrag von Stancer »

Hallo zusammen,
ich habe in einem Formular einen Button eingefügt der mit einem Makro hinterlegt werden soll.
Und zwar soll das Makro eine die Werte einer Spalte aus einer Tabelle löschen bzw. 0 setzen.
Zu allem Übel habe ich leider nicht wirklich viel Ahnung von Makros.
Bin also über jede Hilfe dankbar.

Mein Ansatz sieht so aus:

update tabelle set spalte = 0

aber es kommt immer ein Fehler.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

...zeige uns bitte mehr Code... und beschreibe die Fehlermeldung genauer.

Nach dem ersten Anschein fehlen Dir die quotes um Tabellenname und Spaltename (siehe SQL-Beispiele in diesem Forumsbereich)
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Also alles was ich bisher zusammen bekommen habe ist das hier.

Private Sub CommandButton1_Click()

update tabelle set spalte = 0

End Sub

Der Fehler der auftaucht bezieht sich auf die Zeile mit update tabelle....
und ist ein basic Syntaxfehler.
Hab aber leider keine Ahnung wo und ob ich Hochkommas und oder Klammern setzen muss.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

Du musst wohl erst mal einen Datenbank-Kontext herstellen und den SQL-Befehl aufbereiten.
Beispiele hier im Forum, oder bei Andrew im Datenbank-Dokument, über: http://www.pitonyak.org
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Morgen,
hab gestern noch mal rumprobiert aber nicht wirklich was auf die Reihe bekommen.
Im Forum und auf deinem Link bin ich auch nicht wirklich fündig geworden.
Wäre echt dankbar wenn du mir noch mal weiter helfen könntest.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

wie: nicht fündig geworden? In Andrews Base-Dokument sind doch massig Beispiele...?

Habe gerade nur das Beispiel vorliegen, wie per Makro eine in BASE vorhandene Abfrage ausgeführt wird:

Code: Alles auswählen

' Kontext holen
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DataBaseContext" )

' Datenquelle auswählen
' DBName: Dein Name der registrierten Datenquelle
oDatenquelle = oDatenbankKontext.getByName( "DBName" )

sQuery = "rechnung"

' Abfragen
oAbfragen = oDatenquelle.QueryDefinitions 
' gewünschte Abfrage vorhanden?
if ( oAbfragen.hasByName( sQuery) ) Then
' Abfrage holen
oAbfrage = oAbfragen.getByName( sQuery )
' SQL-Ausdruck von Abfrage entnehmen
 sQuery = oAbfrage.Command
 ' Verbindung zur DB herstellen
 oVerbindung = oDatenquelle.getConnection( ,)
 ' Statement erzeugen
 oStatement = oVerbindung.createStatement
 ' Abfrage absetzen
 oResultSet = oStatement.executeQuery( oAbfrage.Command )
UPDATE-Abfragen bedürfen einer anderen Syntax - habe aber dafür gerade kein Beispiel zur Hand.
Und hier auf der Arbeit brennt heute mal wieder die Luft .... :-/
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Morgen,
Hab noch mal nen bissl weiter probiert und mein code sieht jetzt so aus:

Sub SpaltenLoeschen()

UPDATE "Stückzahlen_2"

SET "Stückzahl" = [0]

END Sub

Allerdings gibt er mir bei meinem Spaltennamen(Stückzahl) immer noch einen Fehler aus. ("Kein Zugriff auf Objekt. Ungültige Objektreferenz").
Hab leider keine ahnung warum ihm das jetzt schon wieder nicht passt.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

* Du hast keinen Datenbankkontext erzeugt.
* Du hast kein statement erzeugt
* Du hast die SQL-Anweisung nicht korrekt beschrieben
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

hallo nochmal,
hab das ganze noch mal überarbeitet und hoffe einfach mal das mir noch mal weiter hilfst (..Bitte.. :oops: ).

Sub zurueck
Dim DatenbankKontext as Object
Dim Datenquelle as Object
Dim Verbindung as Object
Dim Statement as Object
Dim Resultset as Object

DatenbankKontext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatenbankKontext.getByName("Datenbank") 'Datenbank")
Verbindung = Datenquelle.getConnection( "", "" )
Statement = Verbindung.createStatement()
Resultset = Statement.executeQuery("SELECT Stueckzahl FROM Stueckzahlen") 'Datenbank")

Also so sieht der Anfang aus.
Darunter wollte ich dann die Update anweisung stellen, aber schon in diesem Teil kommt ein Fehler(bei Select...) das er die Tabelle nicht finden kann.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

Quoting!

Code: Alles auswählen

sSQL = "SELECT" & CHR(34) & "Stueckzahl" & CHR(34) & " FROM " & CHR(34) & "Stueckzahlen" & CHR(34) 
Hast Du Dir Andrews DataBase.odt geholt?
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Ja hab ich mir geholt und auch einiges nützliches gefunden aber den Fehler hab ich bis jetzt damit auch nicht wegbekommen. Mit deiner Anweisung hats jetzt aber prima geklappt.
Jetzt habe ich nur noch das problem mit der Update Anweisung.
Kann ich die direkt drunter setzen oder klappt das nicht, weil nämlich wieder der Fehler kommt,das Stueckzahl eine ungültige Objektreferenz ist.
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

Stancer hat geschrieben:Jetzt habe ich nur noch das problem mit der Update Anweisung.
Kann ich die direkt drunter setzen oder klappt das nicht, weil nämlich wieder der Fehler kommt,das Stueckzahl eine ungültige Objektreferenz ist.
Dein Code?

bei Andrew:

Code: Alles auswählen

s = "update ""Numbers"" Set ""Number2""=1234567890123456789.1234 Where ID=3"
oStmt.executeQuery(s)
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Hey Winfried vielen Dank für deine Hilfe, aber ich glaub ich bin echt zu blöd dazu.
Stancer hat geschrieben:oStmt.executeQuery(s)
Diese Zeile wirft für mich mal wieder einen Fehler auf(Objektvariable nicht belegt),
den ich nicht lösen kann.
Was muss ich denn noch verändern damit mein Code endlich funktioniert. :(
Hier noch mal der jetzige Stand:

Sub zurueck()

Dim DatenbankKontext as Object
Dim Datenquelle as Object
Dim Verbindung as Object
Dim Statement as Object
Dim Resultset as Object


DatenbankKontext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatenbankKontext.getByName("Datenbank") 'Datenbank")
Verbindung = Datenquelle.getConnection( "", "" )
Statement = Verbindung.createStatement()
sSQL = "SELECT" & CHR(34) & "Stueckzahl" & CHR(34) & " FROM " & CHR(34) & "Stueckzahlen" & CHR(34)

s ="update ""Stueckzahlen"" Set ""Stueckzahl""= 0"
oStmt.executeQuery(s)
end sub

Danke schon mal im Voraus
OpenOffice portable 2.1, Win XP
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Tabellenspalte löschen

Beitrag von komma4 »

Stancer,

ne - Du bist nicht zu blöd (nur etwas blind).

Das Beispiel von Andrew musst Du so anpassen, dass Du auch "Dein" statement-Objekt nimmst.

Code: Alles auswählen

Sub zurueck()

Dim DatenbankKontext as Object
Dim Datenquelle as Object
Dim Verbindung as Object
Dim Statement as Object
Dim Resultset as Object


DatenbankKontext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatenbankKontext.getByName("Datenbank") 'Datenbank")
Verbindung = Datenquelle.getConnection( "", "" )
Statement = Verbindung.createStatement()
sSQL = "SELECT" & CHR(34) & "Stueckzahl" & CHR(34) & " FROM " & CHR(34) & "Stueckzahlen" & CHR(34)

s ="update ""Stueckzahlen"" Set ""Stueckzahl""= 0"
Statement.executeQuery(s)
end sub
Geht es so?

P.S: Beim Posten von Code: die Anweisungen im Editor markieren und dann die Code-Schaltfläche am oberen Rand nutzen
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)
Stancer
***
Beiträge: 67
Registriert: Do, 21.06.2007 14:05

Re: Tabellenspalte löschen

Beitrag von Stancer »

Das Statement objekt hatte ich auch an meins angepasst.
Der Fehler war danach auch weg aber als ich das Makro dann an den Button gebunden hatte und ihn betätigte
passierte gar nichts. Deshalb hab ich dann wieder die ursprüngliche Version reingeschrieben.
Fehlt vielleicht noch irgendwas?

Habs noch mal probiert und es funktioniert, allerdings erst wenn ich wenn ich das Formular schließe und wieder öffne.
Habe bereits einen anderen Button der das ganze aktualisiert. Das Problem ist aber, das in meinem Formular das Subformular(Tabelle Stückzahlen) an die Abfrage für die Produkte gebunden ist. Wenn ich nun die Spalte lösche und aktualisiere sind Haupt und Subformular leer und man kann keine Produkte mehr auswählen um die Stückzahl anzugeben.
Gibt es da eine Möglichkeit die Spalte im Formular zu löschen ohne das gesamte Dokument zu aktualisieren.
OpenOffice portable 2.1, Win XP
Antworten