Gelöst: Datenbank per Makro Updaten

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Gelöst: Datenbank per Makro Updaten

Beitrag von hema »

Hallo zusammen,
habe folgendes Problem:
Ich versende Rechnungen an die Mitlieder.
Diese bezahlen und ich trage dies in der Verwaltung ein.
Einmal pro Woche drucke ich die MItgliederkarten aus und versende sie.
Dann trage ich bei den Mitgliedern das Datum des Versenden ein, falls Fragen kommen...
Bin nun an einem Makro, bei welchem ich das Datum des Versenden bei allen auf einmal eintragen kann, so dass ich nicht 10, 20 oder mehr Datensätze von Hand nachtragen muss.
Dabei habe ich unter anderem auf diesen Eintrag im Forum aufgebaut: viewtopic.php?f=1&t=15602&p=63899&hilit=ssql#p63899.

Mein bisheriger Code:

Code: Alles auswählen

Sub versendenEintragen ()
mydb = "mitglieder"
Dim oDataBaseContext as Object
Dim oDataSource as Object
Dim oConnection as Object
Dim oStatement as Object

oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
oDatenquelle = oDatenbankKontext.getByName( mydb )
' Verbindung zur DB herstellen
oVerbindung = oDatenquelle.getConnection( "" , "" )
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oStatement.executeUpdate( sSQL )


sSQL = "UPDATE ""tbl_Daten ""SET ""Karte ""= " & now() 

End Sub
Nach einigen Fehlermeldungen (wie üblich bei mir durch Hochkomma-Fehler usw.) habe ich die Fehlermeldungen weg.
Aber nun passiert folgendes: Nämlich gar nichts.
Wenn ich das Makro ablaufen lasse, kommt keine Fehlermeldung mehr, aber es werden auch keine Einträge gemacht.
Die Spalte "Karte" ist als timestamp definiert.

Kann mir jemand sagen, wo ich den Fehler finden kann.

Ein hoffnungsvolles Danke im Voraus
Zuletzt geändert von hema am Mo, 07.04.2008 10:42, insgesamt 1-mal geändert.
Sämtliche Probleme, welche ich ohne Computer nicht hatte, kann ich nun mit diesem lösen.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datenbank per Makro Updaten

Beitrag von komma4 »

Du solltest die sSQL-Zeile mit dem Befehl VOR die .execute-Zeile setzen .... dann sollte das klappen, oder?
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)
hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Re: Datenbank per Makro Updaten

Beitrag von hema »

Hallo komma4,
vielen Dank für den Tip, hat aber leider eine Fehlermeldung ausgelöst.
Habe die Reihenfolge geändert auf

Code: Alles auswählen

sSQL = "UPDATE ""tbl_Daten ""SET ""Karte ""= " & now() 
oStatement.executeUpdate( sSQL )
Nun erhalte ich allerdings eine Fehlermeldung:

BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Table not found in Statement [UPTDATE "tbl_Daten"].

Die Tabelle "tbl_Daten" und die Spalte "Karte" existieren beide.

wie weiter? :?:

Arbeite mit OOo 2.4 unter Linux und OO0 Portable 2.3.1 ab USB-Stick im Geschäft, da ich hier nichts installieren kann.
Die Fehlermeldung erscheint auf beiden Systemen.
Sämtliche Probleme, welche ich ohne Computer nicht hatte, kann ich nun mit diesem lösen.
hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Re: Datenbank per Makro Updaten

Beitrag von hema »

Habe zur Kontrolle den SQL-Befehl über Extras -> SQL ausführen lassen.

UPDATE "tbl_Daten" SET "Karte" = now()

Hier wird der Befehl problemlos ausgeführt. Es kann also nicht daran liegen, dass eine Tabelle oder Spalte nicht vorhanden ist.
Sämtliche Probleme, welche ich ohne Computer nicht hatte, kann ich nun mit diesem lösen.
hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Gelöst: Datenbank per Makro Updaten

Beitrag von hema »

Konnte mein Problem lösen.
Wenn ich die now()-Funktion direkt in SQL ausführen lasse, kommt die Fehlermeldung, die ich schon früher gemeldet habe.
Wenn ich "now()" vorher definiere (weiss nicht, ob dies der richtige Ausdruck ist), funktionierts.

Code: Alles auswählen

Sub versendenEintragen ()
mydb = "mitglieder"
heute = "(now())"
.....
....
sSQL = "UPDATE ""tbl_Daten ""SET ""Karte ""= " & heute 

End Sub
Vielleicht kann mir mal jemand den Unterschied erklären...
Gruss Markus
Sämtliche Probleme, welche ich ohne Computer nicht hatte, kann ich nun mit diesem lösen.
Jensemann
***
Beiträge: 59
Registriert: Mo, 08.10.2007 12:51

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von Jensemann »

Hallo,

etwas ähnliches hatte ich auch mit

Code: Alles auswählen

.getString()
Grüße

Jensemann
openSuSE 11.2 LibreOffice 3.6.1
Windows XP SP3 (in VirtualBox unter openSUSE 11.2) mit LibreOffice 3.5.4 sowie Apache OpenOffice 3.4.0
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von komma4 »

hema hat geschrieben:

Code: Alles auswählen

Sub versendenEintragen ()
mydb = "mitglieder"
heute = "(now())"
.....
....
sSQL = "UPDATE ""tbl_Daten ""SET ""Karte ""= " & heute 
Vielleicht kann mir mal jemand den Unterschied erklären...
Gruss Markus
Damit übergibst Du eine Zeichenkette an die Datenbank-engine.

Im anderen Fall wird durch BASIC die Funktion NOW() ausgeführt - und eben deren Rückgabewert übergeben.

Das zunächst probierte Beispiel stammt aus einem erfolgreichen Versuch mit einer PostgreSQL-DB.
Ob es funktioniert oder nicht liegt an der engine (:= welche Zeichenkette als gültiges Datum akzeptiert wird.
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von komma4 »

Jensemann hat geschrieben:etwas ähnliches hatte ich auch mit

Code: Alles auswählen

.getString()
Bedeutet?
Was für ein Problem war es - wie hast Du es gelöst?
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)
hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von hema »

komma4 hat geschrieben:
(:= welche Zeichenkette als gültiges Datum akzeptiert wird.
Verstehe ich das richtig, dass es noch darauf ankommt, wie die entsprechende Spalte neben "timestamp" sonst noch formatiert ist?
z.B. TT.MM.JJ HH:MM:SS geht nicht
aber TT.MM.JJJJ... geht (Jahr zwei oder vierstellig)?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von komma4 »

Es kommt auf die Datenbank an - und wie diese Deine "Zeit" akzetiert.


Sprich:


übergibst Du 01.02.2008 an die DB für eine als timestamp definierte Spalte, dann kann die engine:

a) das akzpetieren, und die Stunden, Minuten, Sekunden und Hundertstel-/Tausendstelstellen mit Null auffüllen, oder
b) einen Fehler schmeissen, dass nicht das erwartete Zeitformat bedient wurde, weil Du eben schreiben musst: 01.02.2008 00:00:00 oder 01.02.2008 00:00:00,00000

So akzeptiert MySQL über Webmin bei mir (SuSE 10.1 !) gefüllt bspw.

01.02.2008
01.02.2008 01:02:03


aber nicht

01.02.2008 01:02:03,000000

(obwohl die Zeitstempel im letzteren Format angezeigt werden)
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)
hema
***
Beiträge: 70
Registriert: So, 27.01.2008 14:36
Wohnort: Schweiz
Kontaktdaten:

Re: Gelöst: Datenbank per Makro Updaten

Beitrag von hema »

OK, jetzt habe ich es verstanden
vielen Dank für deine Bemühungen

Gruss Markus
Sämtliche Probleme, welche ich ohne Computer nicht hatte, kann ich nun mit diesem lösen.
Antworten