von WSO » Mi, 14.05.2014 10:37
Guten Morgen acco und Robert,
zunächst nochmal ein herzliches Dankeschön für eure Geduld mit mir.
Nach intensiver Suche habe ich die ursache für das nicht gefundene ".Parent" gefunden:
Makro-a (Aufruf über Formularereignis) macht Datenbankoperationen (Fehlerfrei)
schliesst das aufrufende Formular,
ruft Makro-b auf (.Parent wird nicht mehr gefunden)
Wenn ich
erst Makro-b aufrufe und
danach das Formular schliesse läuft Makro-b einwandfrei.
Ob diese System,verhalten so sein muss, kann ich nicht beurteilen.
Also viel Wind um Nichts und viele Stunden der Fehlersuche.
Für alle, die es brauchen können, hier die function zur Aufbereitung und Augabe der msgbox:
Code: Alles auswählen
Function getMessage(ID as integer, Replacement_1 As String, Replacement_2 as String)
REM ID=Felernummer, Replacetext-1, Replacetext-2
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSql AS OBJECT
DIM oResultSet AS OBJECT
DIM stSql AS STRING
DIM stSql1 as string
DIM stSql2 as string
Dim iTyp as integer
DIM iJN as integer
DIM stID as String
DIM iF1 as String
DIM iF2 As String
DIM iF3 As String
stID = ID
oDatasource = thisComponent.Parent.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
stSql1 = "SELECT ""err_id"", ""err_txt"", ""err_typ"" FROM ""tError"""
stSql2 = "WHERE err_id = " & ID
stSql = stSql1 + stSql2
oSql = oConnection.createStatement()
oResultSet = oSql.executeQuery(stSql)
If not isNull (oResultSet) then
WHILE oResultSet.Next
REM: Meldung aufbereiten und ausgeben igel_betrag = Replace(igel_betrag, ",", ".")
If not isEmpty(Replacement_1) then
iF1 = oResultSet.getString(2)
iF1 = Replace(iF1, "@1", Replacement_1)
else
iF1 = oResultSet.getString(2)
end if
If not isEmpty(Replacement_2) then
iF1 = Replace(iF1, "@2", Replacement_2)
end if
iTyp = oResultset.getint(3)
iF2 = iTyp
iTyp = oResultset.getint(3)
getMessage = True
SELECT case iTyp ' es koennen nur 16, 36 oder 64 vorkommen
case 16:
iF3 = "Fehlermeldung" + " Nr.: " + stID
iJN = msgbox(iF1,iF2,iF3)
if iJN = 0 then
getMessage = False
end if
case 36:
iF3 = "Bestätigungsabfrage" + " Nr.: " + stID
msgbox(iF1,iF2,iF3)
case 64:
iF3 = "Hinweis" + " Nr.: " + stID
msgbox(iF1,iF2,iF3)
END SELECT
WEND
ELSE
iF1 = "Die Meldung mit Nummer " + stID + "wurde nicht gefunden, die Verarbeitung wird abgebrochen"
iF2 = 16
iF3 = "Systemfehler im Modul getMessage"
msgbox iF1,iF2,iF3
getMessage = False
END IF
End Function
Hier ist noch ein offener Punkt, den ich nicht lösen konnte.
Der Text der Meldungen kommt aus einer Tablle (tError).
Wie kann ich dort ein CHR(13) wirksam werden machen, oder (nur so kann ich es mir vorstellen) das entsprechede ASCII als Zeichen in den Text bringen?
Gruss,
Wolfram
Guten Morgen acco und Robert,
zunächst nochmal ein herzliches Dankeschön für eure Geduld mit mir.
Nach intensiver Suche habe ich die ursache für das nicht gefundene ".Parent" gefunden:
Makro-a (Aufruf über Formularereignis) macht Datenbankoperationen (Fehlerfrei)
schliesst das aufrufende Formular,
ruft Makro-b auf (.Parent wird nicht mehr gefunden)
Wenn ich [color=#0000FF]erst[/color] Makro-b aufrufe und [color=#0000BF]danach das Formular schliesse[/color] läuft Makro-b einwandfrei.
Ob diese System,verhalten so sein muss, kann ich nicht beurteilen.
Also viel Wind um Nichts und viele Stunden der Fehlersuche.
Für alle, die es brauchen können, hier die function zur Aufbereitung und Augabe der msgbox:
[code]Function getMessage(ID as integer, Replacement_1 As String, Replacement_2 as String)
REM ID=Felernummer, Replacetext-1, Replacetext-2
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSql AS OBJECT
DIM oResultSet AS OBJECT
DIM stSql AS STRING
DIM stSql1 as string
DIM stSql2 as string
Dim iTyp as integer
DIM iJN as integer
DIM stID as String
DIM iF1 as String
DIM iF2 As String
DIM iF3 As String
stID = ID
oDatasource = thisComponent.Parent.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
stSql1 = "SELECT ""err_id"", ""err_txt"", ""err_typ"" FROM ""tError"""
stSql2 = "WHERE err_id = " & ID
stSql = stSql1 + stSql2
oSql = oConnection.createStatement()
oResultSet = oSql.executeQuery(stSql)
If not isNull (oResultSet) then
WHILE oResultSet.Next
REM: Meldung aufbereiten und ausgeben igel_betrag = Replace(igel_betrag, ",", ".")
If not isEmpty(Replacement_1) then
iF1 = oResultSet.getString(2)
iF1 = Replace(iF1, "@1", Replacement_1)
else
iF1 = oResultSet.getString(2)
end if
If not isEmpty(Replacement_2) then
iF1 = Replace(iF1, "@2", Replacement_2)
end if
iTyp = oResultset.getint(3)
iF2 = iTyp
iTyp = oResultset.getint(3)
getMessage = True
SELECT case iTyp ' es koennen nur 16, 36 oder 64 vorkommen
case 16:
iF3 = "Fehlermeldung" + " Nr.: " + stID
iJN = msgbox(iF1,iF2,iF3)
if iJN = 0 then
getMessage = False
end if
case 36:
iF3 = "Bestätigungsabfrage" + " Nr.: " + stID
msgbox(iF1,iF2,iF3)
case 64:
iF3 = "Hinweis" + " Nr.: " + stID
msgbox(iF1,iF2,iF3)
END SELECT
WEND
ELSE
iF1 = "Die Meldung mit Nummer " + stID + "wurde nicht gefunden, die Verarbeitung wird abgebrochen"
iF2 = 16
iF3 = "Systemfehler im Modul getMessage"
msgbox iF1,iF2,iF3
getMessage = False
END IF
End Function
[/code]
Hier ist noch ein offener Punkt, den ich nicht lösen konnte.
Der Text der Meldungen kommt aus einer Tablle (tError).
Wie kann ich dort ein CHR(13) wirksam werden machen, oder (nur so kann ich es mir vorstellen) das entsprechede ASCII als Zeichen in den Text bringen?
Gruss,
Wolfram