updateRow: ein Wert wird nicht übernommen, warum?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

updateRow: ein Wert wird nicht übernommen, warum?

Beitrag von juetho »

In meinem Unterformular für Kontodaten wird der Inhalt des Kontrollfeldes BIC nicht in die Datenbank-Tabelle übernommen. Kann mir das jemand erklären? Ich habe alles jetzt wie folgt geregelt; der Arbeitsablauf selbst funktioniert.
  • Die Tabelle konto enthält die Felder ID (als Verknüpfung zum Hauptformular), Part (zur Auswahl mehrerer Konten zur gleichen Adresse), IBAN, BIC, Name (Kontoinhaber). (Zumindest für DE kann ich auf den Banknamen verzichten; inwieweit das international nötig ist, lasse ich erstmal offen. Das interessiert auch für das Problem nicht.)
  • Die Felder Part, BIC, Name werden mit Kontrollfeldern verknüpft: Part als numerisches Feld, Name als Textfeld, BIC als maskiertes Feld (wegen automatischer Großschreibung).
  • Das Datenfeld IBAN wird nach dem Einlesen (Ereignis "nach dem Datensatzwechsel") aufgeteilt in die Kontrollfelder Lkz (maskiert, nur Großbuchstaben), Zahl (maskiert, zwei Ziffern), Konto (maskiert, bis zu 37 Zeichen incl. Leerzeichen).
  • Nach dem Verlassen des Feldes Konto (Ereignis "bei Fokusverlust") wird die Gültigkeit der IBAN geprüft (siehe meine früheren Fragen). Außerdem werden für DE mithilfe der Bankleitzahl (den ersten 8 Stellen der Kontoangabe) aus der Tabelle blz mit einem SELECT-Befehl die BIC und der Bankname ausgelesen und in die Kontrollfelder BIC (siehe oben) und Bankname (Text, zz. nur Anzeige) eingetragen:

    Code: Alles auswählen

        oForm.Bankname.Text = oResult.getString(1)
        oForm.BIC.Text = oResult.getString(2)
  • Gespeichert wird durch einen Button Bestätigen mit dem Ereignis "Aktion ausführen". Das Makro dafür setzt die IBAN-Teile zusammen und speichert:

    Code: Alles auswählen

    text = oForm.iban_lkz.Text + oForm.iban_zahl.Text + ReplaceString( oForm.iban_konto.Text, "", " ")
    oForm.updateString(3, text)
    if oForm.isNew then oForm.insertRow() else oForm.updateRow
Problem: Im Zusammenhang mit updateRow wird der Feldinhalt des Kontrollfeldes BIC gelöscht und nicht in der Tabelle gespeichert. Nach dem Einlesen wird der Tabelleninhalt direkt in das Kontrollfeld BIC übernommen. Als Zwischenlösung habe ich in den vorstehenden Code noch eingefügt (so klappt es auch):

Code: Alles auswählen

oForm.updateString(5, oForm.BIC.Text)
Was ist da los? Kann mir das Ignorieren des Feldinhalts von BIC jemand erklären? Danke! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
RobertG
********
Beiträge: 2068
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: updateRow: ein Wert wird nicht übernommen, warum?

Beitrag von RobertG »

Hallo Jürgen,

es ist ein Unterschied, ob Du den Text nur auf der grafischen Oberfläche darstellst oder ob Du ihn an die darunterliegende Tabelle weitergibst. Die Eingabe mit Hilfe der Tastatur in ein Feld mach beides. Kopierst Du aber einen Text in ein Feld, so ist der nur sichtbar, muss aber als "updateString" weitergegeben werden. Passiert dies nicht, so wird der Text nicht mit abgespeichert.

Wenn ich das richtig durchschaue füllst Du das Feld über eine Abfrage mit einem solchen Text. Von der Änderung bekommt aber die Datenbank nichts mit.

Gruß

Robert
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: updateRow: ein Wert wird nicht übernommen, warum?

Beitrag von juetho »

Hallo Robert, das macht es klar:
RobertG hat geschrieben:es ist ein Unterschied, ob Du den Text nur auf der grafischen Oberfläche darstellst oder ob Du ihn an die darunterliegende Tabelle weitergibst. Die Eingabe mit Hilfe der Tastatur in ein Feld mach beides. Kopierst Du aber einen Text in ein Feld, so ist der nur sichtbar, muss aber als "updateString" weitergegeben werden. Passiert dies nicht, so wird der Text nicht mit abgespeichert.
Im ersten Code-Auszug habe ich den Text also nur in die Oberfläche kopiert, aber ohne Weitergabe an die Tabellenverknüpfung. Das habe ich in der letzten Code-Zeile als Zwischenlösung nachgeholt, ohne zu wissen, warum das eine richtige Nachbesserung war.
Wenn ich das richtig durchschaue füllst Du das Feld über eine Abfrage mit einem solchen Text.
So habe ich es vorgesehen.
Von der Änderung bekommt aber die Datenbank nichts mit.
Fazit: updateString wirkt wie eine manuelle Eingabe, ist also in der Regel sinnvoller. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Antworten