'Felder Abfragen
SUB Unsichtbar(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, NameFeld AS STRING)
REM Felder, die nur zur Speicherung der ID-Werte in den Tabellen dienen, werden auf unsichtbar eingestellt
DIM oForm AS OBJECT
DIM oSubForm AS OBJECT
DIM oSubSubForm AS OBJECT
DIM oFeld AS OBJECT
DIM oCtlView AS OBJECT
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName(NameFormular)
IF NameSubFormular<>"" THEN
oSubForm=oForm.getByName(NameSubFormular)
IF NameSubSubFormular<>"" THEN
oSubSubForm=oSubForm.getByName(NameSubSubFormular)
oFeld=oSubSubForm.getByName(NameFeld)
ELSE oFeld=oSubForm.getByName(NameFeld)
END IF
ELSE oFeld=oForm.getByName(NameFeld)
END IF
REM Zugreifen auf das Kontrollfeld und auf unsichtbar schalten
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeld)
oCtlView.Visible=false
END SUB
SUB TextAnzeigen(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, _
NameFeld AS STRING, NameIDFeld AS STRING, NameTabellenFeld1 AS STRING, NameTabellenFeld2 AS STRING, _
NameTab12ID AS STRING, NameTabelle1 AS STRING, NameTabelle2 AS STRING)
REM Text in den Kombinationsfeldern nach den Werten der (unsichtbaren) ID-Felder aus dem Hauptformular einstellen
DIM oForm AS OBJECT
DIM oSubForm AS OBJECT
DIM oSubSubForm AS OBJECT
DIM oFeld AS OBJECT
DIM oFeldList AS OBJECT
DIM stFeldWert AS STRING
DIM inID AS INTEGER
DIM oCtlView AS OBJECT
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
oForm=oDrawpage.forms.getByName(NameFormular)
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
IF NameSubFormular<>"" THEN
oSubForm=oForm.getByName(NameSubFormular)
IF NameSubSubFormular<>"" THEN
oSubSubForm=oSubForm.getByName(NameSubSubFormular)
oFeld=oSubSubForm.getByName(NameIDFeld)
oFeldList=oSubSubForm.getByName(NameFeld)
ELSE
oFeld=oSubForm.getByName(NameIDFeld)
oFeldList=oSubForm.getByName(NameFeld)
END IF
ELSE
oFeld=oForm.getByName(NameIDFeld)
oFeldList=oForm.getByName(NameFeld)
END IF
oFeldList.Refresh()
REM Wert des ID-Feldes auslesen
IF NOT IsEmpty(oFeld.getCurrentValue()) THEN
inID=oFeld.getCurrentValue()
REM Nur wenn das ID-Feld nicht leer ist: oVerbindung mit der oDatenquelle herstellen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) Then
oDatenquelle.connect()
End If
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
REM SQL-Anweisung nach den in dem Kombinationsfeld dargestellten Feldern formulieren
IF NameTabellenFeld2<>"" THEN
REM Wenn ein zweites Tabellenfeld existiert
IF NameTabelle2<>"" THEN
REM ... und wenn eine zweite Tabelle existiert
stSql = "SELECT """+NameTabelle1+"""."""+NameTabellenFeld1+"""||' '||""" _
+NameTabelle2+"""."""+NameTabellenFeld2+""" FROM """+NameTabelle1
stSql = stSql+""","""+NameTabelle2+""" WHERE ""ID""='"+inID+"' AND """+NameTabelle1+ _
"""."""+NameTab12ID+"""="""+NameTabelle2+""".""ID"""
ELSE
REM ... und eine zweite Tabelle nicht existiert
stSql = "SELECT """+NameTabellenFeld1+"""||' '||"""+NameTabellenFeld2+""" FROM """_
+NameTabelle1+""" WHERE ""ID""='"+inID+"'"
END IF
ELSE
REM Wenn ein zweites Tabellenfeld nicht existiert kann es auch nur eine Tabelle sein
stSql = "SELECT """+NameTabellenFeld1+""" FROM """+NameTabelle1+""" WHERE ""ID""='"+inID+"'"
END IF
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
stFeldWert = oAbfrageergebnis.getString(1)' Erstes Datenfeld
WEND ' naechster Datensatz
REM Kombinationsfeld auf den aus der Abfrage sich ergebenden Textwert einstellen
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeldList)
oCtlView.setText(stFeldWert)
END IF
END IF
IF IsEmpty(oFeld.getCurrentValue()) THEN
REM Kombinationsfeld auf den aus der Abfrage sich ergebenden Textwert einstellen
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeldList)
oCtlView.setText("")
END IF
END SUB
FUNCTION TextAuswahlWertSpeichern(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, _
NameFeld AS STRING, NameIDFeld AS STRING, NameTabellenFeld1 AS STRING, NameTabellenFeld2 AS STRING, _
NameTab12ID AS STRING, NameTabelle1 AS STRING, NameTabelle2 AS STRING, LaengeFeld1 AS INTEGER, LaengeFeld2 AS INTEGER) AS STRING
DIM oForm AS OBJECT
DIM oSubForm AS OBJECT
DIM oSubSubForm AS OBJECT
DIM oFeld AS OBJECT
DIM oFeldList AS OBJECT
DIM stInhalt AS STRING
DIM stInhaltFeld2 AS STRING
DIM a_stTeile() AS STRING
DIM stmsgbox1 AS STRING
DIM stmsgbox2 AS STRING
DIM i AS INTEGER
DIM inAnzahl AS INTEGER
DIM inAnzahl2 AS INTEGER
DIM inAnzahl3 AS INTEGER
DIM inID AS INTEGER
REM Formular ansteuern, Textfeld auslesen
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
oForm=oDrawpage.Forms.getByName(NameFormular)
IF NameSubFormular<>"" THEN
oSubForm=oForm.getByName(NameSubFormular)
IF NameSubSubFormular<>"" THEN
oSubSubForm=oSubForm.getByName(NameSubSubFormular)
oFeld=oSubSubForm.getByName(NameIDFeld)
oFeldList=oSubSubForm.getByName(NameFeld)
ELSE
oFeld=oSubForm.getByName(NameIDFeld)
oFeldList=oSubForm.getByName(NameFeld)
END IF
ELSE
oFeld=oForm.getByName(NameIDFeld)
oFeldList=oForm.getByName(NameFeld)
END IF
stInhalt=oFeldList.getCurrentValue()
REM Leertasten am Anfang und Ende der Eingabe gegebenenfalls entfernen
stInhalt=Trim(stInhalt)
IF stInhalt<>"" THEN
IF NameTabellenFeld2<>"" THEN
REM Wenn ein zweites Tabellenfeld existiert muss der Inhalt des Kombinationsfeldes gesplittet werden. Dabei wird von einem leeren Feld als Trenner ausgegangen.
a_stTeile=Split(stInhalt, " ")
u=Ubound(a_stTeile)
stInhalt=a_stTeile(0)
REM Künftig hier verbessern: So wird der Rest komplett als zweiter Inhalt gesehen, incl. Leerstellen
FOR i=1 TO u ' ... alle Teile bis auf den ersten wieder zusammenfuegen, dabei Leerstellen wieder einfuegen ...
stInhaltFeld2=stInhaltFeld2+" "+a_stTeile(i)
NEXT i
stInhaltFeld2=Trim(stInhaltFeld2)
END IF
IF (LaengeFeld1 > 0 AND Len(stInhalt) > LaengeFeld1) OR (LaengeFeld2 > 0 AND Len(stInhaltFeld2) > LaengeFeld2) THEN
stmsgbox1 = "Das Feld "+NameTabellenFeld1+" darf höchstens "+LaengeFeld1+ "Zeichen lang sein."+CHR(13)
stmsgbox2 = "Das Feld "+NameTabellenFeld2+" darf höchstens "+LaengeFeld2+ "Zeichen lang sein."+CHR(13)
IF (LaengeFeld1 > 0 AND Len(stInhalt) > LaengeFeld1) AND (LaengeFeld2 > 0 AND Len(stInhaltFeld2) > LaengeFeld2) THEN
msgbox ("Der eingegebene Text ist zu lang."+CHR(13)+stmsgbox1+stmsgbox2+"Bitte den Text kürzen.",64,"Fehlerhafte Eingabe")
ELSEIF (LaengeFeld1 > 0 AND Len(stInhalt) > LaengeFeld1) THEN
msgbox ("Der eingegebene Text ist zu lang."+CHR(13)+stmsgbox1+"Bitte den Text kürzen.",64,"Fehlerhafte Eingabe")
ELSE
msgbox ("Der eingegebene Text ist zu lang."+CHR(13)+stmsgbox2+"Bitte den Text kürzen.",64,"Fehlerhafte Eingabe")
END IF
ELSE
REM Datenbankverbindung erzeugen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) Then
oDatenquelle.connect()
End If
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT COUNT(""ID"") FROM """+NameTabelle1+""" GROUP BY """+NameTabellenFeld1+""" HAVING """+NameTabellenFeld1+"""='"+stInhalt+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
inAnzahl=0
inAnzahl2=0
inAnzahl3=0
i=0
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inAnzahl = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
IF NameTabellenFeld2<>"" AND NOT IsEmpty(stInhaltFeld2) AND NameTabelle2<>"" THEN
REM Wenn ein zweites Tabellenfeld existiert
REM muss zuerst die zweite Abhaengigkeit geklaert werden
stSql = "SELECT COUNT(""ID"") FROM """+NameTabelle2+""" GROUP BY """+NameTabellenFeld2+""" HAVING """+NameTabellenFeld2+"""='"+stInhaltFeld2+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inAnzahl2 = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
IF inAnzahl2<1 THEN
stSql = "INSERT INTO """+NameTabelle2+""" ("""+NameTabellenFeld2+""") VALUES ('"+stInhaltFeld2+"') "
oSQL_Anweisung.executeUpdate(stSql)
i=2
END IF
REM Und die entsprechende ID direkt wieder auslesen bzw. die ID der vorherigen Abfrage ermitteln
stSql = "SELECT ""ID"" FROM """+NameTabelle2+""" WHERE """+NameTabellenFeld2+""" ='"+stInhaltFeld2+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
IF inAnzahl<1 THEN
stSql = "INSERT INTO """+NameTabelle1+""" ("""+NameTabellenFeld1+""","""_
+NameTab12ID+""") VALUES ('"+stInhalt+"','"+inID+"') "
i=1
ELSE
stSql = "UPDATE """+NameTabelle1+""" SET """+NameTab12ID+"""='"+inID+"' WHERE """+NameTabellenFeld1+""" = '"+stInhalt+"'"
END IF
oSQL_Anweisung.executeUpdate(stSql)
REM Und die entsprechende ID direkt wieder auslesen bzw. die ID der vorherigen Abfrage ermitteln
stSql = "SELECT ""ID"" FROM """+NameTabelle1+""" WHERE """+NameTabellenFeld1+""" ='"+stInhalt+"' AND """+NameTab12ID+"""='"+inID+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
END IF
IF NameTabellenFeld2<>"" AND NameTabelle2="" THEN
stSql = "SELECT COUNT(""ID"") FROM """+NameTabelle1+""" GROUP BY """+NameTabellenFeld1+""","""_
+NameTabellenFeld2+""" HAVING """+NameTabellenFeld1+"""='"+stInhalt+"' AND """+NameTabellenFeld2+"""='"+stInhaltFeld2+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inAnzahl3 = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
IF inAnzahl3<1 THEN
REM ... und eine zweite Tabelle nicht existiert
stSql = "INSERT INTO """+NameTabelle1+""" ("""+NameTabellenFeld1+""","""_
+NameTabellenFeld2+""") VALUES ('"+stInhalt+"','"+stInhaltFeld2+"') "
i=1
oSQL_Anweisung.executeUpdate(stSql)
END IF
stSql = "SELECT ""ID"" FROM """+NameTabelle1+""" WHERE """+NameTabellenFeld1+""" ='"+stInhalt+"' AND """+NameTabellenFeld2+"""='"+stInhaltFeld2+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
END IF
IF inAnzahl<1 AND NameTabellenFeld2="" THEN
REM Wenn ein zweites Tabellenfeld nicht existiert
stSql = "INSERT INTO """+NameTabelle1+""" ("""+NameTabellenFeld1+""") VALUES ('"+stInhalt+"') "
i=1
oSQL_Anweisung.executeUpdate(stSql)
END IF
IF NameTabellenFeld2="" THEN
REM Wert des ID-Feldes ermitteln, das in die Haupttabelle eingetragen wird
stSql = "SELECT ""ID"" FROM """+NameTabelle1+""" WHERE """+NameTabellenFeld1+"""='"+stInhalt+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
END IF
REM ID-Wert in das (unsichtbare) Feld der Haupttabelle eintragen
oFeld.BoundField.updateInt(inID)
END IF
ELSE
oFeld.BoundField.updateNull()
END IF
TextAuswahlWertSpeichern=i
END FUNCTION
SUB Formular_Start_Mitglied
DIM oForm AS OBJECT
DIM oFeld1 AS OBJECT
DIM inID AS INTEGER
REM Unsichtbares ID-Feld für die einzeilige Tabelle, in der Zwischenwerte abgespeichert werden
Unsichtbar("Mitglied","","","ID")
REM *** Adresse ***
REM Unsichtbar(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, NameFeld AS STRING)
Unsichtbar("Mitglied","","","numstrID")
Unsichtbar("Mitglied","","","numposID")
Unsichtbar("Mitglied","","","numID_Adr")
REM TextAnzeigen(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, NameFeld AS STRING,
REM NameIDFeld AS STRING, NameTabellenFeld1 AS STRING, NameTabellenFeld2 AS STRING, NameTab12ID AS STRING,
REM NameTabelle1 AS STRING, NameTabelle2 AS STRING)
TextAnzeigen("Mitglied","","","LBStrasse","numstrID","Strasse","","","Strasse","")
TextAnzeigen("Mitglied","","","LBPLZ_Ort","numposID","Postleitzahl","Ort","ortID","Postleitzahl","Ort")
REM *** Konto ***
REM Unsichtbar(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, NameFeld AS STRING)
Unsichtbar("Mitglied","","","numblzID")
Unsichtbar("Mitglied","","","numID_Kon")
REM TextAnzeigen(NameFormular AS STRING, NameSubFormular AS STRING, NameSubSubFormular AS STRING, NameFeld AS STRING,
REM NameIDFeld AS STRING, NameTabellenFeld1 AS STRING, NameTabellenFeld2 AS STRING, NameTab12ID AS STRING,
REM NameTabelle1 AS STRING, NameTabelle2 AS STRING)
TextAnzeigen("Mitglied","","","LBBLZ_Bank","numblzID","BLZ","Bank","","Bank","")
REM Da statt der Eingabe einer Mitgliedsnummer eine Checkbox verwendet wird, um das Mitglied als dasjenige auszuweisen, das mit dem Konto zu verbinden ist,
REM wird bei Gleichheit der Nummern in der Tabelle Konto und der Tabelle Mitglied die Checkbox auf "True" gestellt
REM Datenbankverbindung erzeugen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) Then
oDatenquelle.connect()
End If
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT ""Konto_mitID"" FROM ""Filter_Formular"""
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
IF NOT ISNULL(oAbfrageergebnis) THEN
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
WEND ' naechster Datensatz
END IF
oDoc=thisComponent
oDrawpage=oDoc.drawpage
oForm=oDrawpage.forms.getByName("Mitglied")
oFeld1=oForm.getByName("fmtID")
IF oFeld1.GetCurrentValue = inID THEN
oForm.getByName("chkKonto").State = 1
ELSE
oForm.getByName("chkKonto").State = 0
END IF
Formular_Mitglied_chkKonto
Formular_Mitglied_Eingabesperre
END SUB
SUB Formular_Mitglied_chkKonto
DIM oForm AS OBJECT
DIM oFeld2 AS OBJECT
DIM oFeld3 AS OBJECT
oDoc=thisComponent
oDrawpage=oDoc.drawpage
oForm=oDrawpage.forms.getByName("Mitglied")
oFeld2=oForm.getByName("lbomitID")
oFeld3=oForm.getByName("chkKonto")
IF oFeld3.State = 1 THEN
oForm.getByName("lbomitID").ReadOnly = True
oForm.getByName("txtNachname_Kon").ReadOnly = True
oForm.getByName("txtVorname_Kon").ReadOnly = True
oForm.getByName("txtKonto").ReadOnly = False
oForm.getByName("LBBLZ_Bank").ReadOnly = False
oForm.getByName("lbomitID").BackgroundColor = RGB(230,230,230)
oForm.getByName("txtNachname_Kon").BackgroundColor = RGB(230,230,230)
oForm.getByName("txtVorname_Kon").BackgroundColor = RGB(230,230,230)
oForm.getByName("txtKonto").BackgroundColor = RGB(255,255,255)
oForm.getByName("LBBLZ_Bank").BackgroundColor = RGB(255,255,255)
ELSEIF oFeld2.GetCurrentValue <> "" THEN
oForm.getByName("lbomitID").ReadOnly = False
oForm.getByName("txtNachname_Kon").ReadOnly = True
oForm.getByName("txtVorname_Kon").ReadOnly = True
oForm.getByName("txtKonto").ReadOnly = True
oForm.getByName("LBBLZ_Bank").ReadOnly = True
oForm.getByName("lbomitID").BackgroundColor = RGB(230,230,255)
oForm.getByName("txtNachname_Kon").BackgroundColor = RGB(230,230,230)
oForm.getByName("txtVorname_Kon").BackgroundColor = RGB(230,230,230)
oForm.getByName("txtKonto").BackgroundColor = RGB(230,230,230)
oForm.getByName("LBBLZ_Bank").BackgroundColor = RGB(230,230,230)
ELSE
oForm.getByName("lbomitID").ReadOnly = False
oForm.getByName("txtNachname_Kon").ReadOnly = False
oForm.getByName("txtVorname_Kon").ReadOnly = False
oForm.getByName("txtKonto").ReadOnly = False
oForm.getByName("LBBLZ_Bank").ReadOnly = False
oForm.getByName("lbomitID").BackgroundColor = RGB(230,230,255)
oForm.getByName("txtNachname_Kon").BackgroundColor = RGB(255,255,255)
oForm.getByName("txtVorname_Kon").BackgroundColor = RGB(255,255,255)
oForm.getByName("txtKonto").BackgroundColor = RGB(255,255,255)
oForm.getByName("LBBLZ_Bank").BackgroundColor = RGB(255,255,255)
END IF
oForm.getByName("lbomitID").refresh()
END SUB