Seite 1 von 2

Tabellenspalte löschen

Verfasst: Do, 12.07.2007 09:23
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.

Re: Tabellenspalte löschen

Verfasst: Do, 12.07.2007 12:19
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)

Re: Tabellenspalte löschen

Verfasst: Do, 12.07.2007 13:03
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.

Re: Tabellenspalte löschen

Verfasst: Do, 12.07.2007 14:39
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

Re: Tabellenspalte löschen

Verfasst: Fr, 13.07.2007 08:10
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.

Re: Tabellenspalte löschen

Verfasst: Fr, 13.07.2007 12:42
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 .... :-/

Re: Tabellenspalte löschen

Verfasst: Mo, 16.07.2007 10:17
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.

Re: Tabellenspalte löschen

Verfasst: Mo, 16.07.2007 12:44
von komma4
* Du hast keinen Datenbankkontext erzeugt.
* Du hast kein statement erzeugt
* Du hast die SQL-Anweisung nicht korrekt beschrieben

Re: Tabellenspalte löschen

Verfasst: Di, 17.07.2007 11:13
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.

Re: Tabellenspalte löschen

Verfasst: Di, 17.07.2007 12:26
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?

Re: Tabellenspalte löschen

Verfasst: Di, 17.07.2007 12:34
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.

Re: Tabellenspalte löschen

Verfasst: Di, 17.07.2007 17:02
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)

Re: Tabellenspalte löschen

Verfasst: Mi, 18.07.2007 09:13
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

Re: Tabellenspalte löschen

Verfasst: Mi, 18.07.2007 09:40
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

Re: Tabellenspalte löschen

Verfasst: Mi, 18.07.2007 10:05
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.