Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit on Error goto

Empfohlene Antworten

Veröffentlicht

Hallo Forum,

ich habe folgenden Quelltext:


on error goto err_sub_start

do

 if not isnull(rs.fields(5).value) then 

        'Aktionen

 end if

rs.movenext

loop until rs.eof = true


err_sub_start:

        'Aktionen

Er soll in den Fehlerabschnitt gehen, wenn rs leer ist, also kein aktueller Datensatz vorhanden ist. Mit not isnull(rs) kann ich es nicht abfragen. Das geht nicht. Er ignoriert aber komplett die Zeile

on error goto err_sub_start

Wenn er dann an den Punkt

if not isnull(rs.fields(5).value) then 

bringt er den Laufzeitfehler 3021. Aber er sollte ja dann eigentlich zu

err_sub_start gehen!!!!

Warum macht er das nicht????

Gruß

Druid :cool:

Mal anders formuliert, Du möchtest im Falle eines komplett leeren Recordsets reagieren können. Falls ja, dann frag das rs auf gleichzeitige BOF und EOF ab.

<OT>

Warum kommt mir nur das Opening von Simpsons in den Sinn wo Bart an der Tafel zur Strafe schreibt?

"I will not use goto!I will not use goto!I will not use goto!I will not use goto!"

</OT>

Mal anders formuliert, Du möchtest im Falle eines komplett leeren Recordsets reagieren können. Falls ja, dann frag das rs auf gleichzeitige BOF und EOF ab.

<OT>

Warum kommt mir nur das Opening von Simpsons in den Sinn wo Bart an der Tafel zur Strafe schreibt?

"I will not use goto!I will not use goto!I will not use goto!I will not use goto!"

</OT>

Das habe ich mir auch schon überlegt. Aber es ist ja nicht eof oder bof. Da würde ja noch was kommen. Es sind immer wieder nur leere Datensätze dazwischengestreut.

Ich mache eine Zuordnung von Servern zu IPs und die hohl ich mir aus zwei Tabellen in zwei Recordsets. Und bastel die dann zusammen. Da manche Server keine IP haben ist bei diesen Servern auch der RS leer. Aber danach kommt ja nochmal was

*g* und vb bietet einem bei Fehlerroutinen keine andere Möglichkeit als goto...


On Error Resume Next

  [i]möglicher Fehler[/i]

  If Err.Number<>0 Then

    [i]Fehlerbehandlung[/i]

  End If

On Error Goto 0

let´s try it :)

funktioniert nicht.

der bleibt bei


if not isnull(rs.fields(5).value) then 

hängen. Wenn ich die Fehlernummer im Direktfenster mit debug.print Err.Number ausgebe ist es die 3021. Aber er ignoriert mir total das on error resume next.

on error resume next 

if not isnull(rs.fields(5).value) then 

 if err.number <> 0 then 

   msgbox err.number, vbokonly

 end if 

end if 

on error goto 0

I h*** VB!!!

Greetz

Druid :cool:

Versuch mal folgendes:


On Error Resume Next

    Err.Raise (3021)

    If Err.Number <> 0 Then

        MsgBox Err.Number & " - " & Err.Description, vbOKOnly

    End If

On Error GoTo 0

er bleibt auch hier wieder bei err.raise(3021) hängen...

Hmm, ok, jetzt bin ich bischen überfragt, denn bei mir bringt er anstandslos die msg-Box mit der Nummer und Description.

Was mir noch kurz einfällt.

Statt:


on error resume next 

if not isnull(rs.fields(5).value) then 

 if err.number <> 0 then 

   msgbox err.number, vbokonly

 end if 

end if 

on error goto 0

Schreib mal:

on error resume next 

if not isnull(rs.fields(5).value) then 

  msgbox "Ist nicht null!"

end if 

 if err.number <> 0 then 

   msgbox err.number, vbokonly

 end if 

on error goto 0

hab ich auch gemacht. Funktioniert leider immer noch nicht..

Der bleibt immer an der Stelle hängen, an der der Fehler erzeugt

wird...

Keine Ahnung...

das komische ist in anderen Modulen funktioniert es einwandfrei,

nur in dem ich es am dringendsten brauch, geht es nicht..

--> Murphy´s Law

Dann musst Du Dir wohl leider das Modul genauer anschauen, im Hinblick auf Differenzen zu anderen Modulen.

das werd ich dann wohl auch tun..

trotzdem danke für deine Hilfe...

Gruß

Druid :cool:

Hallo Forum,

ich habe folgenden Quelltext:


on error goto err_sub_start

do

 if not isnull(rs.fields(5).value) then 

        'Aktionen

 end if

rs.movenext

loop until rs.eof = true


err_sub_start:

        'Aktionen

Er soll in den Fehlerabschnitt gehen, wenn rs leer ist, also kein aktueller Datensatz vorhanden ist. Mit not isnull(rs) kann ich es nicht abfragen. Das geht nicht. Er ignoriert aber komplett die Zeile

on error goto err_sub_start

Wenn er dann an den Punkt

if not isnull(rs.fields(5).value) then 

bringt er den Laufzeitfehler 3021. Aber er sollte ja dann eigentlich zu

err_sub_start gehen!!!!

Warum macht er das nicht????

Gruß

Druid :cool:

Hy, ich verstehe dein Problem nicht. Ich würde das folgendermaßen machen:

on error goto err_sub_start

do while rs.eof = flase and rs.bof=false

if not isnull(rs.fields(5).value) then

'Aktionen

end if

rs.movenext

loop

.

.

.

exit function

err_sub_start:

'Aktionen

end function

ich habe das bei mir nachgebaut und es hat funktioniert. kannst du vielleicht mal die ganze funktion zeigen, dann wäre es einfacher, den fehler zu finden?

Chiacomo

Hi,

er bleibt auch hier wieder bei err.raise(3021) hängen...

Das riecht für mich nach einer Einstellung der Entwicklungsumgebung... Unter Menü <Extras><Optionen> auf dem Reiter <Allgemein> die Einstellung "Unterbrechung bei Fehlern" überprüfen. Wenn hier "Bei jedem fehler" aktiviert ist, kommt es zu dem Verhalten. Sollte man dann auf "Bei nicht verarbeiteten Fehlern" stellen.

hth,

Stephan

@Chiacamo: tja es ist schön, dass es bei dir funzt. Bei mir leider nicht :)

Anbei die komplette Funktion:


Public Function fuk_import_gcf_data(ByVal TabName As String, ByVal Filename As String, ByVal tabno As Integer, ByVal type_data As String)

Dim iCounter As Integer

Dim sSQL2 As String

Dim dbs As DAO.Database

Dim qdf As DAO.QueryDef

Dim rs_temp_2 As DAO.Recordset

Dim null_rs As Boolean


Set dbs = CurrentDb


If type_data = "ac" Then

 DoCmd.RunSQL ("drop table tempimport_gcf_ac")

 DoCmd.TransferSpreadsheet acImport, , TabName, Filename, True, "Assets!"

 sSQL = "select Name, [Cust# Order / CC_(Portfolio item)] from tempimport_gcf_ac where Cost_allocation_active = 'YES'"

 Call mdl_database.createSQLRecordset(sSQL)

 Do

  sSQL = "insert into ta_gcf_ac (co, server) values ('" & rs.Fields(1).Value & "', '" & rs.Fields(0).Value & "')"

  DoCmd.RunSQL (sSQL)

  rs.MoveNext

 Loop Until rs.EOF = True

 rs.Close

 DoCmd.RunSQL ("drop table tempimport_gcf_ac")

 DoCmd.TransferSpreadsheet acImport, , TabName, Filename, True, "DCI!"

 sSQL = "select Auftragsnummer, [Server-Name/LPAR], Leistungsart, [9 / 2004 - 2004-10-04] from tempimport_gcf_ac where Auftragsnummer<>NULL or Auftragsnummer<>0"

 Call mdl_database.createSQLRecordset(sSQL)

 Do

  Do

  If Right(rs.Fields(2).Value, 1) = "[" Then

   rs.Edit

   rs.Fields(2).Value = Left(rs.Fields(2).Value, Len(rs.Fields(2).Value) - 2)

   rs.update

   Exit Do

  End If

   rs.Edit

   rs.Fields(2).Value = Left(rs.Fields(2).Value, Len(rs.Fields(2).Value) - 1)

   rs.update

  Loop

  rs.MoveNext

 Loop Until rs.EOF = True

 rs.Close

 sSQL2 = "select server from ta_gcf_ac"

 Set qdf = dbs.CreateQueryDef("", sSQL2)

 Set rs_temp_2 = qdf.OpenRecordset

 Do

  sSQL = "select * from tempimport_gcf_ac where [Server-Name/LPAR] = '" & rs_temp_2.Fields(0).Value & "'"

  mdl_database.createSQLRecordset sSQL

  iCounter = 0

  Do

   If iCounter = 0 Then

  On Error goto err_sub_start

    If Not IsNull(rs.Fields(5).Value) Then

     sSQL = "update ta_gcf_ac set la_short = '" & rs.Fields(3).Value & "', ammount = " & rs.Fields(5).Value & ", month = " & Month(Date) & ", year = " & Year(Date) & " where server = '" & rs_temp_2.Fields(0).Value & "'"

    Else

     sSQL = "update ta_gcf_ac set la_short = '" & rs.Fields(3).Value & "', ammount = 0, month = " & Month(Date) & ", year = " & Year(Date) & " where server = '" & rs_temp_2.Fields(0).Value & "'"

    End If

   Else

    If Not IsNull(rs.Fields(5).Value) Then

     sSQL = "insert into ta_gcf_ac (co, server, la_short, ammount, month, year) values ('" & rs.Fields(0).Value & "', '" & rs.Fields(2).Value & "', '" & rs.Fields(3).Value & "', " & rs.Fields(5).Value & ", " & Month(Date) & ", " & Year(Date) & ")"

    Else

     sSQL = "insert into ta_gcf_ac (co, server, la_short, ammount, month, year) values ('" & rs.Fields(0).Value & "', '" & rs.Fields(2).Value & "', '" & rs.Fields(3).Value & "', 0, " & Month(Date) & ", " & Year(Date) & ")"

    End If

   End If

   DoCmd.RunSQL sSQL

   iCounter = iCounter + 1

   rs.MoveNext

  Loop Until rs.EOF = True

err_sub_start:

  rs_temp_2.MoveNext

  iCounter = 0

 Loop Until rs_temp_2.EOF = True

 rs.Close

 rs_temp_2.Close

ElseIf type_data = "sap" Then

ElseIf type_data = "bck" Then

End If

End Function

@Peregrin: Die Einstellung ist auf "Bei nicht verarbeiteten Fehlern"! Daran liegt

es also nicht.

Greetz

Druid :cool:

Was mir,ohne den Code näher analysiert zu haben, auffällt ist, dass deine Sprungmarke nur bei nCounter = 0 gesetzt wird.

Ist das gewollt?

jo das ist gewollt.. wenn iCounter<>0 dann ist er ja schon einmal durchgelaufen, d.h. dass der Recordset ein gültiges befülltes Objekt enthält.

Also muss ich nur aktiv werden wenn iCounter = 0

Greetz

Druid :cool:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.