Base: Formulardaten per Basic abspeichern

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: Base: Formulardaten per Basic abspeichern

Re: Base: Formulardaten per Basic abspeichern

von DPunch » Mo, 20.06.2011 23:10

Aloha
Noebian hat geschrieben:Verstanden habe ich aber nicht, was du dagegen hast, direkt in die Tabelle zu schreiben?
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:date() liefert doch das gewünschte Ergebnis?
Tut es das?
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.

Re: Base: Formulardaten per Basic abspeichern

von Noebian » Mo, 20.06.2011 22:52

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?

Re: Base: Formulardaten per Basic abspeichern

von DPunch » Mo, 20.06.2011 12:24

Aloha
Noebian hat geschrieben:es gibt aber keine Fehlermeldung und wenn ich die Datenbank öffne, steht das Datum in der Tabelle, wo es hingehört
Warum genau das so passiert, kann ich Dir ohne Testen zwar nicht erklären, aber
Noebian hat geschrieben:warum dann also false??
ergibt sich durch die Verwendung von ".execute". (API: Interface XStatement)
Returns
true if the next result is a ResultSet; false if it is an update count or there are no more results
Ein ".executeUpdate" würde Dir direkt die Anzahl der betroffenen Zeilen zurückliefern, das erscheint mir sinnvoller.

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)
erhältst Du ebenfalls das Tagesdatum, schreibst die Daten aber nur in die Datenbank, wenn Du den gesamten Datensatz speicherst.

Re: Base: Formulardaten per Basic abspeichern

von Noebian » So, 19.06.2011 22:10

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:

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

Re: Base: Formulardaten per Basic abspeichern

von F3K Total » So, 19.06.2011 19:16

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

Code: Alles auswählen

event.source.model
viewtopic.php?f=18&t=44201

Gruß R

Re: Base: Formulardaten per Basic abspeichern

von Noebian » So, 19.06.2011 16:31

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?

Re: Base: Formulardaten per Basic abspeichern

von F3K Total » So, 19.06.2011 10:32

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

Re: Formulardaten per Basic abspeichern

von Noebian » So, 19.06.2011 09:38

Hi, ich habe es probiert, aber leider ohne Erfolg. Dieses Kontrollfeld scheint ohne Funktion zu sein - der Cursor bleibt wo er ist.

Re: Formulardaten per Basic abspeichern

von F3K Total » So, 19.06.2011 08:42

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

Re: Formulardaten per Basic abspeichern

von Noebian » So, 19.06.2011 01:12

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?

Re: Formulardaten per Basic abspeichern

von turtle47 » So, 19.06.2011 00:52

Hallo,
Noebian hat geschrieben:Das Feld, in dem der Cursor sich befindet, wird mit updateRow() nicht in die Tabelle geschrieben.
Sende vor dem Update ein Commit auf das Feld.

Re: Formulardaten per Basic abspeichern

von Noebian » So, 19.06.2011 00:18

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.

Re: Formulardaten per Basic abspeichern

von F3K Total » Sa, 18.06.2011 23:49

Hallo,
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
Gruß R

Base: Formulardaten per Basic abspeichern

von Noebian » Sa, 18.06.2011 22:40

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

Nach oben