Daten eines Subformulars in einer Tabelle speichern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Gast

Daten eines Subformulars in einer Tabelle speichern

Beitrag von Gast » Sa, 27.11.2010 19:15

Hallo,

eine Frage beschäftigt mich seit geraumer Zeit und ich hoffe auf eine Antwort hier im Forum.


Ausgangslage

Ich habe ein Formular mit zwei Subfomularen. Das Hauptformular zeigt mir Daten an - ok. Das erste Subformular dient der Darstellung von Daten aus dem Hauptformular und wird, nach Betätigung einer Schaltfläche, mit Daten aus dem zweiten (unsichtbaren) Subformular gefüllt.
Bis hierhin ist alles prima.
Der im ersten Subformular geschriebene Datensatz wird allerdings nur dann in die dazugehörige Tabelle geschrieben, wenn ich den Datensatzmarkierer (grüner Pfeil) in die nächste leere Zeile versetze.

Lösungsansatz

Bisher verwende ich folgenden Code, um die Inhalte in das erste Subformular einzutragen.

Ich stelle hier einmal den gesamten Code (mit allen Schritten) zur Verfügung, wenn es jemanden interessiert oder der Code gebraucht werden kann.

Code: Alles auswählen

Sub EP_Wert_ermitteln

   oDoc = thisComponent
   oDrawPage = oDoc.Drawpage
   oForm = oDrawPage.Forms 'im Formular 4_Ticket_Bearbeiten...
      oGrid = oForm.getByName("MainForm").getByName("EPForm").getByName("ZWForm").getByName("MainForm_Grid") '....das Grid auswählen
      ZWzeit = oGrid.getByName("Wert").value ' Den Wert von ZWert der aktuellen Auswahl an die Variable ZWzeit übergeben
      'MsgBox "Daten gleich " + ZWzeit 'Kontrolle durch MsgBox
  
   	   	  
      'oForm2 = oDrawPage.Forms 'im Formular 4_Ticket_Bearbeiten...
      oGrid2 = oForm.getByName("MainForm").getByName("EPForm").getByName("MainForm_Grid") '....das Grid auswählen
      aufnahmeFeld = "EP_Wert" 'Der Variablen aufnahmeFeld den Formularfeldnamen EP_Wert zuweisen
      oGrid2.getByName(aufnahmeFeld).value = ZWzeit 'in das Feld aufnahmeFeld (EP_Wert) den Wert ZWzeit eintragen
   	  oGrid2.getByName(aufnahmeFeld).commit(true) 'EPWert festschreiben
   	  
   	  EP_Check = oGrid2.getByName("EP_Nr").text 'EP_Check den Wert von EP_Nr zuweisen
   	  'MsgBox "EP_Check gleich " + EP_Check
   	  
   	  If EP_CHeck = ""  Then ' Wenn keine EP_Nr vorhanden, dann.... 

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! EP_Nr_ermitteln und eintragen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	  
	  oDoc = ThisComponent
   oForm = ThisComponent.drawpage.forms.getbyindex(0) 'Im geöffneten Formular Ticket_Bearbeiten  
   oFeld = oForm.getByName("txtTicket_ID") 'Das Feld txtTicket_ID auswählen
      sTick = oFeld.getCurrentValue 'Inhalt von txtTicket_ID der Variablen sTick zuordnen
      'MsgBox "Ticket_ID gleich " + sTick 'Kontrolle durch MsgBox
      
'>>>>>>>>>>>>>>> EP_lfdNr berechnen >>>>>>>>>>>>>>>>>>>>>>>>

    ' Create a row-set to query the database
    RowSet = createUnoService("com.sun.star.sdb.RowSet")
    RowSet.DataSourceName = "Tickets"
    RowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
    'Den Maximalwert des Feldes EP_lfd_Nr für die Kategorie (sTick) mittels SQL in &_Einzelposten ermitteln
    'Die Variable wird mit Anführungszeichen und kaufm.Und eingeschlossen in den Abfragestring eingesetzt
    RowSet.Command = "SELECT max(""EP_lfd_Nr"") FROM ""6_Einzelposten"" WHERE ""Ticket_ID"" = "& sTick &""
    RowSet.execute()
   
    ' it only returns 1 row
    ' so we need no loop
    RowSet.next()
    'RowSet ist ein String
     E_lfd_Nr =  RowSet.getString(1)
    'E_lfd_Nr wird der in eine Zahl umgewandelte String zugeordnet
     E_lfd_Nr = Val (RowSet.getString(1))
 	'jetzt kann E_lfd_Nr hochgezählt werden
     E_lfd_Nr = E_lfd_Nr + 1
     'MsgBox "The MaxId (EP_Nr + 1) is " + E_lfd_Nr +" "
     
'<<<<<<<<<<<<<<<<<<<<< E_lfd_Nr = EP_Nr <<<<<<<<<<<<<<<<<<<<<<<  

'>>>>>>>>>>>>>>>>>>>>> E_lfd_Nr mit führenden Nullen auffüllen >>>>>>>>>>>>>>>>>>>
laenge_Elfd = Len(E_lfd_Nr) 'laenge_Elfd ist die Anzahl der Zeichen von E_lfd_Nr
     'MsgBox "The Lenght is " + laenge_Elfd +" "
     	Select Case laenge_Elfd
			Case 1
			E_fix = "00" + E_lfd_Nr 'wenn die laenge_Elfd (Anzahl der Zeichen) 1, dann werden 2 Nullen E_lfd_Nr vorangestellt
			Case 2
			E_fix = "0" + E_lfd_Nr 'wenn die laenge_Elfd (Anzahl der Zeichen) 2, dann werden 2 Nullen E_lfd_Nr vorangestellt
			Case 3
			E_fix = E_lfd_Nr 'wenn die laenge_Elfd (Anzahl der Zeichen) 4, dann werden keine Nullen E_lfd_Nr vorangestellt
			Case else
			E_fix = "Wert zu groß" 'wenn laenge_Elfd (Anzahl der Zeichen) nicht 1,2,3 oder 4, dann ist der Wert zu groß
			End Select
	 'MsgBox "Der Wert ist" + E_lfd_Nr + "  " + E_fix +"  "
	 
'<<<<<<<<<<<<<<<<<<<<<<< E_fix = E_lfd_Nr mit führenden Nullen<<<<<<<<<<<<<<<<

'>>>>>>>>>>>>>>>>>>>>>>>>>>>> EP_Nr bilden >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

           EP_Nr = sTick & E_fix 	'Die neue EP_Nr wird zusammengesetzt
           'MsgBox "Der Wert ist" + EP_Nr

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     
     oDoc = thisComponent
   oDrawPage = oDoc.Drawpage
   oForm = oDrawPage.Forms 'im Formular 4_Ticket_Bearbeiten...
    oGrid = oForm.getByName("MainForm").getByName("EPForm").getByName("MainForm_Grid") '....das Grid auswählen
    
      aufnahmeFeld = "EP_Nr" 'Der Variablen aufnahmeFeld den Formularfeldnamen EP_Nr zuweisen
      oGrid.getByName(aufnahmeFeld).text = EP_Nr 'in das Feld aufnahmeFeld (EP_Nr) den Wert EP_Nr eintragen
   	  oGrid.getByName(aufnahmeFeld).commit(true) 'EP_Nr festschreiben
  
      aufnahmeFeld2 = "EP_lfd_Nr" 'Der Variablen aufnahmeFeld2 den Formularfeldnamen EP_lfd_Nr zuweisen
      oGrid.getByName(aufnahmeFeld2).value = E_lfd_Nr 'in das Feld aufnahmeFeld2 (EP_lfd_Nr) den Wert E_lfd_Nr eintragen
   	  oGrid.getByName(aufnahmeFeld2).commit(true) 'EP_lfd_Nr festschreiben
      

'<<<<<<<<<<<<<<<<<<<<<<<<<< Abschluss <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  
   End If


  
End Sub

Frage

Wie schaffe ich es, dass nach der Eintragung der Daten im ersten Subformular dieser Datensatz direkt gespeichert wird?


Vielen Dank an dieser Stelle an dieses Forum, ohne dessen Beiträge und Hilfe ich innerhalb so kurzer Zeit nicht in der Lage gewesen wäre, derart komplexe Strukturen zu realisieren.