Base: Formulardaten per Basic abspeichern
Moderator: Moderatoren
Base: Formulardaten per Basic abspeichern
Hi,
ich habe ein Formular in Writer, das mit einer Tabelle in Base verbunden ist.
Im Formular existiert ein Button, der das ausgefüllte Formular ausdruckt und die eingegebenen Daten in eine Archiv-Tabelle einfügt. Das funktioniert soweit auch ganz gut - die Sache hat nur einen Schönheitsfehler: Das Feld, in dem der Cursor sich befindet, wird mit updateRow() nicht in die Tabelle geschrieben. Der Click auf den Button belässt aber leider den Cursor im letzten Feld. Was kann ich tun?
Moderation,4: bitte alle BASIC-Fragen im zuständigen Unterforum stellen; verschoben
ich habe ein Formular in Writer, das mit einer Tabelle in Base verbunden ist.
Im Formular existiert ein Button, der das ausgefüllte Formular ausdruckt und die eingegebenen Daten in eine Archiv-Tabelle einfügt. Das funktioniert soweit auch ganz gut - die Sache hat nur einen Schönheitsfehler: Das Feld, in dem der Cursor sich befindet, wird mit updateRow() nicht in die Tabelle geschrieben. Der Click auf den Button belässt aber leider den Cursor im letzten Feld. Was kann ich tun?
Moderation,4: bitte alle BASIC-Fragen im zuständigen Unterforum stellen; verschoben
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Formulardaten per Basic abspeichern
Hallo,
ohne genau zu wissen wie das Makro arbeitet, hier ein Versuch:
nimm statt
Gruß R
ohne genau zu wissen wie das Makro arbeitet, hier ein Versuch:
nimm statt
Code: Alles auswählen
oform.updaterow()
Code: Alles auswählen
if oform.isnew then
oform.insertrow()
oform.updaterow()
else
oform.updaterow()
endif
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Formulardaten per Basic abspeichern
Hallo, danke für deine Antwort.
Dein Vorschlag ändert aber leider nichts. Das Feld, in dem der Cursor sich befindet, wird ignoriert. Es funktioniert, wenn zuvor "Enter" gedrückt wurde. Dies war aber auch schon vorher so, denn dann springt der Cursor ja in ein anderes Feld. Im Grunde geht es also darum, einen Bedienerfehler abzufangen.
Das Makro führt einen SQL UPDATE der einen auf die andere Tabelle aus. Da das Formular aber in das entsprechende Feld (noch) nichts geschrieben hat, bleibt das Feld leer.
Dein Vorschlag ändert aber leider nichts. Das Feld, in dem der Cursor sich befindet, wird ignoriert. Es funktioniert, wenn zuvor "Enter" gedrückt wurde. Dies war aber auch schon vorher so, denn dann springt der Cursor ja in ein anderes Feld. Im Grunde geht es also darum, einen Bedienerfehler abzufangen.
Das Makro führt einen SQL UPDATE der einen auf die andere Tabelle aus. Da das Formular aber in das entsprechende Feld (noch) nichts geschrieben hat, bleibt das Feld leer.
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Formulardaten per Basic abspeichern
Hallo,
Sende vor dem Update ein Commit auf das Feld.Noebian hat geschrieben:Das Feld, in dem der Cursor sich befindet, wird mit updateRow() nicht in die Tabelle geschrieben.
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Formulardaten per Basic abspeichern
Hmm, das hört sich gut an...
Das Problem ist jetzt noch, dass nicht klar ist, in welchem Feld der Cursor steht, wenn der Button gedrückt wird. Kann man das irgendwie abfragen?
Das Problem ist jetzt noch, dass nicht klar ist, in welchem Feld der Cursor steht, wenn der Button gedrückt wird. Kann man das irgendwie abfragen?
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Formulardaten per Basic abspeichern
Hallo,
irgendwie konnte ich den Fehler nicht nachstellen, bei mir wurde der Datensatz immer abgespeichert, und der Cursor war nicht mehr im Feld.
Auch nicht, wenn ich den Button auf ein anderes Formular gelegt habe.
Dann habe ich "Fokkusieren bei Klick" abgestellt, der Cursor bliebt wo er war, die Daten wurden nicht abgespeichert.
Schau doch mal nach ob bei deinem Button "Fokkusieren bei Klick" an oder aus ist, und schalte es ggf. mal ein.
Dann sollte der Cursor beim Druck auf den Button automatisch aus dem letzten Feld springen.
Gruß R
irgendwie konnte ich den Fehler nicht nachstellen, bei mir wurde der Datensatz immer abgespeichert, und der Cursor war nicht mehr im Feld.
Auch nicht, wenn ich den Button auf ein anderes Formular gelegt habe.
Dann habe ich "Fokkusieren bei Klick" abgestellt, der Cursor bliebt wo er war, die Daten wurden nicht abgespeichert.
Schau doch mal nach ob bei deinem Button "Fokkusieren bei Klick" an oder aus ist, und schalte es ggf. mal ein.
Dann sollte der Cursor beim Druck auf den Button automatisch aus dem letzten Feld springen.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Formulardaten per Basic abspeichern
Hi, ich habe es probiert, aber leider ohne Erfolg. Dieses Kontrollfeld scheint ohne Funktion zu sein - der Cursor bleibt wo er ist.
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Base: Formulardaten per Basic abspeichern
Hi,
hast Du wirklich beim "Ausdruck-Button" "Fokkusieren bei Klick" an?
Wenn ja, solltest Du vielleicht doch die .commit methode, evtl. mit event.source.model verwenden, oder hier mehr Informationen bereitstellen, z.b. die Dateien hochladen.
Gruß R
hast Du wirklich beim "Ausdruck-Button" "Fokkusieren bei Klick" an?
Wenn ja, solltest Du vielleicht doch die .commit methode, evtl. mit event.source.model verwenden, oder hier mehr Informationen bereitstellen, z.b. die Dateien hochladen.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Base: Formulardaten per Basic abspeichern
Hi, danke für deine Geduld 
Ja, ich habe "Fokussieren bei Klick" an und aus gemacht - aber ohne erkennbaren Unterschied. Merkwürdig...
event.source.model - ich habe mir den Wolf gegoogelt, aber nicht so recht etwas darüber gefunden, was mich weiterbringt. Hast du vielleicht mal einen Link für mich?

Ja, ich habe "Fokussieren bei Klick" an und aus gemacht - aber ohne erkennbaren Unterschied. Merkwürdig...
event.source.model - ich habe mir den Wolf gegoogelt, aber nicht so recht etwas darüber gefunden, was mich weiterbringt. Hast du vielleicht mal einen Link für mich?
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Base: Formulardaten per Basic abspeichern
Hallo,
mir kommt das Verhalten Deines Formulares buggy vor, wie gesagt, ich kann den Fehler mit einem Formular, was an eine Datenbank angebunden ist, nicht nachvollziehen.
Daher wäre es vermutlich zielführender, wenn Du die Dateien hochlädtst, natürlich verfremdet, aber man muß schon auf folgende Dinge schauen:
- Welche Felder sind wie mit der DB verbunden?
- Welchen Einfluß hat Dein "Druck-Makro", wie arbeitet es?
- Wie werden Die Daten in die zweite Tabelle geschieben, und warum gibt es sie überhaupt? Wäre es nicht einfacher der ersten Tabelle, die mit dem Formular verbunden ist, eine weitere Spalte, Boolean, "gedruckt" zu geben, und diese mit dem Druckauftrag auf "true" zu setzen?
Hier ein Beispiel von
viewtopic.php?f=18&t=44201
Gruß R
mir kommt das Verhalten Deines Formulares buggy vor, wie gesagt, ich kann den Fehler mit einem Formular, was an eine Datenbank angebunden ist, nicht nachvollziehen.
Daher wäre es vermutlich zielführender, wenn Du die Dateien hochlädtst, natürlich verfremdet, aber man muß schon auf folgende Dinge schauen:
- Welche Felder sind wie mit der DB verbunden?
- Welchen Einfluß hat Dein "Druck-Makro", wie arbeitet es?
- Wie werden Die Daten in die zweite Tabelle geschieben, und warum gibt es sie überhaupt? Wäre es nicht einfacher der ersten Tabelle, die mit dem Formular verbunden ist, eine weitere Spalte, Boolean, "gedruckt" zu geben, und diese mit dem Druckauftrag auf "true" zu setzen?
Hier ein Beispiel von
Code: Alles auswählen
event.source.model
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Base: Formulardaten per Basic abspeichern
Hi - vorweg: ich habe jetzt das commit auf alle relevanten Felder gesetzt - damit funktioniert es.
Die Anwendung ist ein Bank-Überweisungs-formular. Ich habe die Lösung mit den zwei Tabellen gewählt, weil es mir als der einfachste Weg schien - Base unterstützt ja keine Kombinationsfeld mit mehreren gebunden Spalten.
Das Formular ist mit der Tabelle "tbl_Ueberweisung" verbunden. Bei der Eingabe eines Name in das Kombinationsfeld "Empfänger" wird ein Makro ausgelöst, das in der zweiten Tabelle "tbl_Archiv" nach dem Namen fahndet. Wird es fündig, dann füllt es die Spalten Bank, BLZ und Kontonummer der ersten Tabelle aus. Und zwar tut es dies, indem es per INSERT INTO direkt in die Tabelle "tbl_Ueberweisung" schreibt. Wenn der Name nicht bekannt ist, besteht eine zweite Abfrage bei der BLZ, diese fahndet nach bekannten Banken und trägt diese ggf ein.
Wenn die Überweisung fertig ausgefüllt ist, kann man sie ausdrucken und per Button die Daten ins Archiv übernehmen. Die Ursprungstabelle wird dabei geleert, so dass jedesmal mit einem leeren Überweisungsformular gestartet wird. Ich war eigentlich ganz stolz auf diese Lösung. (Ja ich weiß, ist anachronistisch in Zeiten von Online-Überweisungen, aber das hat schon seine Gründe...)
An einer Stelle hängt es nun allerdings noch - ganz kurios. Beim Eingeben des Betrages soll das Datumsfeld automatisch auf das Tagesdatum gesetzt werden. Also wird nach dem Aktualisieren des Betragsfeldes folgendes Makro ausgelöst:
Die Messagebox habe ich zu Debugzwecken eingesetzt: das Datum wird nämlich vom Formular nicht angezeigt. bTF steht auf "false" - es gibt aber keine Fehlermeldung und wenn ich die Datenbank öffne, steht das Datum in der Tabelle, wo es hingehört (warum dann also false??)
Auch ein manuelles Reload des Formulares bringt nichts - aktiviere ich allerdings den "Formular bearbeiten Modus" und gehe anschließend wieder in die Datenansicht, wird das Datum im entsprechenden Feld angezeigt. Merkwürdig, oder?
Vielleicht habe ich schon zuviel mit dem Formular herumexperimentiert, Datenbank-Anbindungen verändert etc....
Es sind halt meine ersten Gehversuche mit Base. Mit Access war ich schon deutlich weiter.
Nochmal: hast du vielleicht einen Link bzgl. "event.source.model"?
Die Anwendung ist ein Bank-Überweisungs-formular. Ich habe die Lösung mit den zwei Tabellen gewählt, weil es mir als der einfachste Weg schien - Base unterstützt ja keine Kombinationsfeld mit mehreren gebunden Spalten.
Das Formular ist mit der Tabelle "tbl_Ueberweisung" verbunden. Bei der Eingabe eines Name in das Kombinationsfeld "Empfänger" wird ein Makro ausgelöst, das in der zweiten Tabelle "tbl_Archiv" nach dem Namen fahndet. Wird es fündig, dann füllt es die Spalten Bank, BLZ und Kontonummer der ersten Tabelle aus. Und zwar tut es dies, indem es per INSERT INTO direkt in die Tabelle "tbl_Ueberweisung" schreibt. Wenn der Name nicht bekannt ist, besteht eine zweite Abfrage bei der BLZ, diese fahndet nach bekannten Banken und trägt diese ggf ein.
Wenn die Überweisung fertig ausgefüllt ist, kann man sie ausdrucken und per Button die Daten ins Archiv übernehmen. Die Ursprungstabelle wird dabei geleert, so dass jedesmal mit einem leeren Überweisungsformular gestartet wird. Ich war eigentlich ganz stolz auf diese Lösung. (Ja ich weiß, ist anachronistisch in Zeiten von Online-Überweisungen, aber das hat schon seine Gründe...)
An einer Stelle hängt es nun allerdings noch - ganz kurios. Beim Eingeben des Betrages soll das Datumsfeld automatisch auf das Tagesdatum gesetzt werden. Also wird nach dem Aktualisieren des Betragsfeldes folgendes Makro ausgelöst:
Code: Alles auswählen
Dim strDBName, strSQL as String
Dim bTF as Boolean
objForm.updaterow()
strSQL = "UPDATE ""tbl_Ueberweisung"" SET ""Datum"" = " & "'" & date() & "'" & "WHERE ""ID"" = " & "'0'"
bTF = objStatement.execute(strSQL)
MsgBox bTF
objForm.reload
Auch ein manuelles Reload des Formulares bringt nichts - aktiviere ich allerdings den "Formular bearbeiten Modus" und gehe anschließend wieder in die Datenansicht, wird das Datum im entsprechenden Feld angezeigt. Merkwürdig, oder?
Vielleicht habe ich schon zuviel mit dem Formular herumexperimentiert, Datenbank-Anbindungen verändert etc....
Es sind halt meine ersten Gehversuche mit Base. Mit Access war ich schon deutlich weiter.
Nochmal: hast du vielleicht einen Link bzgl. "event.source.model"?
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Base: Formulardaten per Basic abspeichern
Aloha
Davon abgesehen würde ich nicht mit "harten" Inserts arbeiten, wenn Du das auch über das Formular regeln kannst.
Wenn Du z.B. Deine "nach dem Aktualisieren"-Prozedur statt des Inserts so aufbauen würdest:
erhältst Du ebenfalls das Tagesdatum, schreibst die Daten aber nur in die Datenbank, wenn Du den gesamten Datensatz speicherst.
Warum genau das so passiert, kann ich Dir ohne Testen zwar nicht erklären, aberNoebian hat geschrieben:es gibt aber keine Fehlermeldung und wenn ich die Datenbank öffne, steht das Datum in der Tabelle, wo es hingehört
ergibt sich durch die Verwendung von ".execute". (API: Interface XStatement)Noebian hat geschrieben:warum dann also false??
Ein ".executeUpdate" würde Dir direkt die Anzahl der betroffenen Zeilen zurückliefern, das erscheint mir sinnvoller.Returns
true if the next result is a ResultSet; false if it is an update count or there are no more results
Davon abgesehen würde ich nicht mit "harten" Inserts arbeiten, wenn Du das auch über das Formular regeln kannst.
Wenn Du z.B. Deine "nach dem Aktualisieren"-Prozedur statt des Inserts so aufbauen würdest:
Code: Alles auswählen
Dim myDate as new com.sun.star.util.Date
myDate.Day = DAY(Date)
myDate.Year = YEAR(Date)
myDate.Month = MONTH(Date)
objForm.updateDate(objForm.findColumn("Datum"),myDate)
Re: Base: Formulardaten per Basic abspeichern
Ah, danke, das erklärt zumindest das "false".
Verstanden habe ich aber nicht, was du dagegen hast, direkt in die Tabelle zu schreiben? und warum so umständlich das Datum zusammenstoppeln? date() liefert doch das gewünschte Ergebnis?
Verstanden habe ich aber nicht, was du dagegen hast, direkt in die Tabelle zu schreiben? und warum so umständlich das Datum zusammenstoppeln? date() liefert doch das gewünschte Ergebnis?
Xubuntu 12.04 / AOO 4.0 / MySQL 5.2.40
herzliche Grüße aus Deutschlands Norden
herzliche Grüße aus Deutschlands Norden
Re: Base: Formulardaten per Basic abspeichern
Aloha
Ich hatte den Eindruck, dass das genau dieses Thema der Ursprung Deines zuletzt geschilderten Problems war, ansonsten hätte ich ja gar nichts dazu gesagt.
Nun, aus meiner persönlichen Sicht kann ich nur sagen, dass das keine saubere Arbeit ist und auf professioneller Ebene mehr als ein Problem verursachen würde.Noebian hat geschrieben:Verstanden habe ich aber nicht, was du dagegen hast, direkt in die Tabelle zu schreiben?
Tut es das?Noebian hat geschrieben:date() liefert doch das gewünschte Ergebnis?
Ich hatte den Eindruck, dass das genau dieses Thema der Ursprung Deines zuletzt geschilderten Problems war, ansonsten hätte ich ja gar nichts dazu gesagt.