Gelöst: Datenbank per Makro Updaten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Gelöst: Datenbank per Makro Updaten

Re: Gelöst: Datenbank per Makro Updaten

von hema » Di, 08.04.2008 15:26

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

Gruss Markus

Re: Gelöst: Datenbank per Makro Updaten

von komma4 » Di, 08.04.2008 14:41

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)

Re: Gelöst: Datenbank per Makro Updaten

von hema » Di, 08.04.2008 13:13

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

Re: Gelöst: Datenbank per Makro Updaten

von komma4 » Mo, 07.04.2008 18:55

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?

Re: Gelöst: Datenbank per Makro Updaten

von komma4 » Mo, 07.04.2008 18:53

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.

Re: Gelöst: Datenbank per Makro Updaten

von Jensemann » Mo, 07.04.2008 14:30

Hallo,

etwas ähnliches hatte ich auch mit

Code: Alles auswählen

.getString()
Grüße

Jensemann

Gelöst: Datenbank per Makro Updaten

von hema » Mo, 07.04.2008 10:41

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

Re: Datenbank per Makro Updaten

von hema » Fr, 04.04.2008 13:06

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.

Re: Datenbank per Makro Updaten

von hema » Fr, 04.04.2008 08:34

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.

Re: Datenbank per Makro Updaten

von komma4 » Do, 03.04.2008 18:32

Du solltest die sSQL-Zeile mit dem Befehl VOR die .execute-Zeile setzen .... dann sollte das klappen, oder?

Gelöst: Datenbank per Makro Updaten

von hema » Do, 03.04.2008 17:03

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

Nach oben