mittels Abfrage Daten in eine DB schreiben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

mittels Abfrage Daten in eine DB schreiben

Beitrag von Frewer »

Hallo,
folgendes Problem stellt sich mir:
Aus meiner Datenbank (DB) ermittle ich mit Hilfe einer Abfrage bestimmte Datenzeilen (zB ID Nr 35, 49,70..).
In diesen Zeilen der DB möchte ich nun Daten in entsprechende Spalten eingeben.
Mein Vorgehen:
Formular auf Basis der Datenbank mit einem Unterformular auf Basis der Abfrage. Das Macro wird durch einen Knopf des Formulars (nicht des Unterformulars) ausgelöst.

SUB Test
oDoc=thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("Abrechnung_BH") 'hinterlegt ist DB "Abrechnung"
oSubForm1 = oForm.getByName("FormularEH") 'hinterlegt ist "Abfrage_BHE"
Nun will ich feststellen wieviele Zeilen zu Ändern sind (Abfrage_BHE). Aus Versuchen habe ich festgestellt, dass die Abfrage immer mit row=1 beginnt. Deshalb gehe ich zur letzten Zeile und lese den Wert aus (inAz in meinem Fall = 9).
oSubForm1.Last
inAz = oSubForm1.getrow()
REM zurück zur 1ten Zeile
oSubForm1.First
REM suche die Spalten für die zu ändernden DB-Zellen
intFeld = oForm.findColumn("BHDatum")
intFeld1 = oForm.findColumn("beok")
REM ermittle aktuelles Datum
unoDate.Year = Year(Date)
unoDate.Month = Month(Date)
unoDate.Day = Day(Date)
REM schreibe aktuelles Datum und beok=1 in die betreffenden Zeilen der Abfrage
FOR ix=1 TO inAz
inID=oSubForm1.getInt(stName) 'bestimme den INDEX der Abfrage nach inID
oForm.absolute(inID) 'gehe in DB zu dieser Zeile (oForm hat die DB hinterlegt)
REm heutiges Datum und bok=1 setzen
oForm.UpdateDate(intFeld,unoDate) 'heutiges Datum --- Meldung "ungültiger Cursorstatus"!!!!!
oForm.UpdateInt(intFeld1,1) 'beok=1
oForm.UpdateRow() 'Zeile erneuern
oSubForm1.Next 'geh zur nächsten Zeile der Abfrage
NEXT ix
msgbox "Fertig"
END SUB

Nun der Fehler: Nachdem ich die row der Datenbank gesetzt habe, kommt die Meldung "ungültiger Cursorstatus".
Dies kann ich mir nicht erklären, weil ich ja in der Zeile davor den Cursor gesetzt habe.

Gibt es dazu einen Rat?
Gruß
Frewer
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: mittels Abfrage Daten in eine DB schreiben

Beitrag von RobertG »

Hallo Frewer,

hast Du an dieser Stelle:

Code: Alles auswählen

oForm.absolute(inID) 'gehe in DB zu dieser Zeile (oForm hat die DB hinterlegt)
nachgesehen, ob es die Zeile überhaupt gibt?
absolute(n) > boolean > Geht zu der Zeile mit der angegebenen Nummer.
In der Zeile kommt keine Fehlermeldung, sondern nur die Rückmeldung TRUE oder FALSE.

Gruß

Robert
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: mittels Abfrage Daten in eine DB schreiben

Beitrag von Frewer »

Hallo Robert,
tatsächlich habe ich mit msgbox "inID" angezeigt (35) und dann in der Datenbank nachgeschaut. Die Zeile mit dem Index 35 habe ich gefunden, die auch wirklich zu dem von der Abfrage ermittelten Index gehört.
Ob der Befehl oForm.absolute(inID) zu dieser Zeile auch wirklich geht, habe ich bisher nicht festgestellt. Werde das gleich mal testen mit dem Auslesen von Daten.

Oha, da scheint tatsächlich das Problem zu sein:
Ergebnis des Befehls ist "False".

habe dann nach oForm.absolute(inID) folgendes

val=oForm.getInt(1) '1 = Zelle mit Index
msgbox val

eingebaut und bekomme jetzt die Fehlermeldung: "der Cursor zeigt vor die 1te bzw hinter die letzte Zeile".
D.h. für mich, dass der Befehl absolute() den Cursor nicht zu der angegebenen Zeile verschiebt? warum?
Gibt es da einen Rat?

Gruß
Frewer
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: mittels Abfrage Daten in eine DB schreiben

Beitrag von Frewer »

Ich habe meinen Fehler gefunden! Die Datenbank ist durch die vielen Tests ganz schön durcheinandermit dem INDEX. Der entspricht nicht der Zeilennummer, weil ich zum Testen immer mal einen Zeile gelöscht habe, der Index aber unbeirrt weiterzählt. Nachdem ich den INDEX händisch auf Reihenfolge gebracht habe, hat auch mein Programm funktioniert.
Vielen Dank Robert für den Hinweis sondt wäre ich nie drauf gekommen!!

Gruß
Frewer
Antworten