Zum Inhalt springen

[Access2000/ODBC Pass Through] Fehler 3197


DJTank

Empfohlene Beiträge

Hallo Leute,

folgende Fehlermeldung spuckt mir Access aus:

Das Mircosoft Jet-Datenbankmodul hat den Vorgang angehalten, da Sie und ein weiterer Benutzer gleichzeitig versuchen, dieselben Daten zu verändern.

Das Problem tritt bei einem RS.EDIT/RS.UPDATE auf.

Ausgangspunkt ist eine Auflistung von Aufträgen.

Jetzt das dubiose, bis zum ca. 18000. Auftrag kann ich das Update problemlos durchführen, wenn ich aber noch weiter runterscrolle, bekomme ich immer nur diesen Fehler.

Kann mir da jemand helfen?

Danke schonmal :)

lg

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dankeschön,

diesen Lösungsansatz habe ich auch gefunden und ausprobiert.

Nachdem du mir diese Lösung nocheinmal nahegelegt hast, hab ich noch einmal komprimiert, noch einmal alles in eine neue MDB importiert, aber nach der 7. oder 8. Stichprobe bekomme ich wieder den selben Fehler

*ratlos*

Normalerweise arbeiten wir ja mit einem über verknüpfte Tabellen funktionierendes Access-FE mit Oracle-BE. Wenn das Recordset mit meinem fatalen Edit/Update über eine verknüpfte Tabelle geöffnet wird, kann ich Edit/Update ausführen.

Wenn ich jedoch eine Pass-Through-Abfrage mache (eigentlich ja die selbe ODBC-Connection), bekomme ich diesen komischen Fehler.

Wir verwenden hier Access2k, wäre es möglich, dass der Fehler mit AccessXP nicht mehr auftritt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Public Function f_proSpeichern(ByVal strPronrOK As String, ByVal VarZuteilenAct As Long, Optional ByVal bolFree As Boolean) As String

'--------------------------------------------------------------

'################Legt vorhandenen Daten ab#########'

Dim rs As Recordset, rs1 As Recordset

Dim Erg_VWzuVP As String

Dim VP_Mont As String

Dim Rabatte As Long

Dim hlpRabatte As Long

Dim Help As String, Help1 As String

Dim sngFaktorLif As String, sngFaktorKnd As String

'

On Error GoTo Fehler

'

'***Unwesentlicher Code

With Forms!f_pro

If Nz(.preisliste, conSpace0) = conSpace0 Then .preisliste = pubStdPreisliste     'NULL abfangen

'

Call f_proAkt      'Formular f_pro aktualisieren

'

If Nz(strPronrOK, conSpace0) <> conSpace0 Then

    '--- preis definieren, Montageauftrag oder nicht...

    zProTyp = Mid(strPronrOK, OrderLen1 + OrderLen2, OrderLen2) 'Klassen-typ wird der klassen-variablen zProTyp übergeben

    If (aryProArt(zProTyp).MONAUFTRAG = True Or aryProArt(zProTyp).SerAuftrag = True) Then

    'denn dann ist es ein montageauftrag!

        If Nz(.tfS_preis, conSpace0) = conSpace0 Then .tfS_preis = AufXStellenRunden(.tfWWert, conRund2)

    Else

        .tfS_preis = AufXStellenRunden(.tfS_preis_org, conRund2)

    End If

    '---

    '*********daten für t_pro, t_pro1, t_pro2 und t_rek laden ********'

    [B]Set rs = CurrDataBase.OpenRecordset("SELECT TOP 1 id_knd,id_asp,id_lad,mwst,zelle,name_ver,bestnr_knd,benennung,Name,status,dat_warn,dat,dat_sort,lif_dat,w_wert,gesperrt,zuordnung,zuordnung_anz,Preisgruppencode,Import,p_wert,dat_best,dat_stat,dat_an,geschäftsbuchungsgrp,name_mon,t_pro1.memo,za_ko,lif_ko,vers_art,vers_kosten,lif_kosten,lif_text,vers_text,KleinMengenZuschlag,terminSAT,TerminKBZ,TerminMSM,terminKLT,rech_gut,dat_von,t_rek.memo AS MemoR,t_rek.art FROM ((t_pro LEFT JOIN t_pro1 ON t_pro.pronr1 = t_pro1.pronr1) LEFT JOIN t_pro2 ON t_pro.pronr1 = t_pro2.pronr1) LEFT JOIN t_rek ON t_pro.pronr1 = t_rek.pronr1 WHERE t_pro.pronr1 = '" + strPronrOK + "'")[/B]

    '

    If Not (rs.BOF And rs.EOF) Then

        [B]rs.Edit[/B]

        Rabatte = 0

        '

        If (aryProArt(zProTyp).MONAUFTRAG = True Or aryProArt(zProTyp).SerAuftrag = True) Then

            '---------------

            sngFaktorLif = getWert("t_preisliste_init", "code", .preisliste, "Faktor") 'Umrechnungsfaktor für Montageauftrag

            If sngFaktorLif = conError Then sngFaktorLif = getWert("t_preisliste_init", "code", pubStdPreisliste, "Faktor")

            If Nz(.tfZuordnung, conSpace0) = conSpace0 Then

                VP_Mont = Nz(.tfS_preis, 0)     'Verkaufspreis aus Montageauftrag

                sngFaktorKnd = sngFaktorLif     'Umrechnungsfaktor ist hier immer = 1

            Else

                'Verkaufspreis aus Kundenauftrag

                Set rs1 = CurrDataBase.OpenRecordset("SELECT TOP 1 preis, rabatt, wrgp FROM t_zeile WHERE pronr1 = '" + Nz(.tfZuordnung, conSpace0) + "' AND best_nr = '" + strPronrOK + "'", dbOpenForwardOnly)

                If rs1.BOF And rs1.EOF Then

                    VP_Mont = Nz(.tfS_preis, 0) 'Verkaufspreis aus Montageauftrag, da keinen Verkaufspreis gefunden

                    sngFaktorKnd = sngFaktorLif 'Umrechnungsfaktor ist hier immer = 1

                Else

                    VP_Mont = rs1(0) * (100 - rs1(1)) / 100     'Verkaufspreis gefunden* sngFaktorLif / sngFaktorKnd

                    sngFaktorKnd = getWert("t_pro", "pronr1", .tfZuordnung, "Preisgruppencode")         'Preisliste aus Kundenauftrag

                    sngFaktorKnd = getWert("t_preisliste_init", "code", sngFaktorKnd, "Faktor")         'Umrechnungsfaktor für Kundenauftrag

                    'Rabatt aus der Rabattzeile holen --> aktuell gültiger Rabatt wird verwendet

                    Help = getWert("t_pro", "pronr1", .tfZuordnung, "id_knd")    'Kundennummer aus Kundenauftrag

                    Help = getWert("a_pass_knd", "id_knd", Help, "rabatt_txt")    'Rabattzeile des Kunden laden

                    Help1 = Nz(getWertExact("t_ra_pv", "knd", Help, "art", rs1(2), "rabatt"), 0)   'Rabatt laden ( in % )

                    Rabatte = IIf(Help1 = conError, 0, Help1)

                End If

                Set rs1 = Nothing

            End If

            VP_Mont = VP_Mont * sngFaktorKnd / sngFaktorLif     'mit Umrechnungsfaktor

            '---------------

            Erg_VWzuVP = f_VWzuVP(Nz(.tfWWert, 0), Nz(VP_Mont, 0), Rabatte, hlpRabatte) ' -15% ?

            If Erg_VWzuVP = conError And strClose = conSpace0 Then

                Call MsgBoxLang(15, str(hlpRabatte))

            End If

        '*********Wurde der Verkaufswert verändert? - nur bei Montageaufträgen ********'

            If rs!W_Wert <> Nz(.tfWWert, 0) Then

                If Nz(rs!p_wert, 0) = Nz(.tfS_preis, 0) And strClose = conSpace0 Then 'Verkaufspreis prüfen

                    Call MsgBoxLang(8, strPronrOK)

                End If

            End If

        End If

        '----

        'Soll die Übersicht aller Aufträge aktualisiert werden ?

        If Nz(rs!status, 0) <> Nz(.kfStatus, 0) Or Nz(rs!bestnr_knd, conSpace0) <> Left(Nz(.tfBestKnd, conSpace0), rs!bestnr_knd.Size) Or Nz(rs!lif_dat, conSpace0) <> Nz(.tfLifDat, conSpace0) Then

            Forms!f_haupt.RecordSource = conSpace0

        End If

        '----

        'Registerblatt Kunde

        rs!id_knd = IIf(Nz(.kfKunde, conSpace0) = conSpace0, Nz(rs!id_knd, conSpace0), Nz(.kfKunde, conSpace0))

        rs!id_asp = Nz(.kfAsp, conSpace0)

        rs!id_lad = Nz(.tfIdAsp, conSpace0)

        'Registerblatt Allgemein

        Rabatte = Nz(.tfMwst, 0)

        rs!mwst = Nz(.tfMwst, 0)

        rs!ZELLE = Nz(.tfZelle, 0)

        rs!name_ver = Nz(.tfVerNeu, conSpace0)

        rs!bestnr_knd = Left(Nz(.tfBestKnd, conSpace0), rs!bestnr_knd.Size)

        rs!benennung = Left(Nz(.tfBenennung, conSpace0), rs!benennung.Size)

        rs!NAME = Nz(.tfName, conSpace0)

        rs!status = Nz(.kfStatus, 0)

        rs!dat_warn = .tfWarnDat

        If IsNull(rs!dat) Then rs!dat = Date

        rs!dat_sort = Now

        rs!lif_dat = .tfLifDat

        On Error Resume Next

            rs!W_Wert = 0

            rs!W_Wert = Nz(.tfWWert, 0)                             'Dieser Code verursacht zeitweise einen Fehler

        On Error GoTo Fehler

        rs!GESPERRT = IIf(bolFree = False, rs!GESPERRT, False)      'bolfree = false (ist Standardwert)

        rs!zuordnung = Nz(.tfZuordnung, conSpace0)

        rs!zuordnung_anz = Nz(.tfZuordnungAnz, 1)

        rs!Preisgruppencode = IIf(Nz(.preisliste, conSpace0) = conSpace0, Nz(rs!Preisgruppencode, conSpace0), Nz(.preisliste, conSpace0))

        rs!import = Nz(.opImport, 1)

        '--- der folgende eintrag wird, falls der auftrag eine Aufgabe ist weiter unten überschieben!

        rs!p_wert = Nz(.tfS_preis, 0)

        '

        '*********daten für t_pro1********'

        rs!dat_best = .tfBestDat

        rs!dat_stat = .tfStatDat

        rs!dat_an = .tfAnDat

        rs!geschäftsbuchungsgrp = IIf(Nz(.tfGeschäftsbuchgrp, conSpace0) = conSpace0, Nz(rs!geschäftsbuchungsgrp, conSpace0), Nz(.tfGeschäftsbuchgrp, conSpace0))

        rs!name_mon = Nz(.tfMonteur, conSpace0)

        rs!memo = .farbstat

        rs!za_ko = Nz(.kfzak1, conSpace0)

        rs!lif_ko = Nz(.kflifko1, conSpace0)

        rs!vers_art = Nz(.kfvers1, conSpace0)

        rs!vers_kosten = Nz(.tfVers1, 0)

        rs!lif_kosten = Nz(.tflifko1, 0)

        rs!lif_text = Nz(.tflifko2, conSpace0)

        rs!vers_text = Nz(.tfvers2, conSpace0)

        rs!Kleinmengenzuschlag = Nz(.tfKleinmengenzuschlag, 0)      

        '

        '***********daten für t_pro2**********'

        rs!terminSAT = .tfDatSAT

        rs!TerminKBZ = .tfDatKBZ

        rs!TerminMSM = .tfDatMSM

        rs!terminKLT = .tfDatKLT

        rs!rech_gut = IIf(Nz(.ogRechnung, conSpace0) = conSpace0, Nz(rs!rech_gut, 1), Nz(.ogRechnung, 1))

        '*****************reklamations ablage, wenn notwendig***********'

        'Allgemeine Info: im falle einer zweiten rekl. wird der reklamationsbeginn nicht gelöscht,

        'das rek-ende aber schon, was bedeutet, die reklamationsdauer zählt von beginn der ersten

        'reklamation bis ende der letzten...!

        If .kkRek = True Then

            If IsNull(rs!dat_von) Then rs!dat_von = Date

            rs!memoR = Nz(.rek_tx, conSpace0)

            rs!art = Nz(.rek_art, conSpace0)

        End If

        '

        [B]rs.Update[/B]

Else

    If strClose <> "close" Then Call MsgBoxLang(137)

End If

'

Ausgang:

    On Error Resume Next

    strCurrentAction = conSpace0

    Set rs = Nothing

    Set rs1 = Nothing

    End With

    Exit Function

Fehler:

    If Nz(Err.Description, conSpace0) = conSpace0 Or Err.Number = 0 Then

        Call ErrorLog(strUserIdent, 815815, "Order: " + strCurrentAction, "m_funktionen / f_proSpeichern", , True)

    Else

        Call ErrorLog(strUserIdent, Err.Number, Err.Description, "m_funktionen / f_proSpeichern", , True)

    End If

    On Error Resume Next

    Resume Next

End Function

Hab mal den RS, das RS.Edit und das RS.Update fett gemacht. Hier noch die Pass-Through-Abfrage:
SELECT t_pro.DAT, t_pro.LIF_DAT, t_pro.PRONR1, t_pro.STATUS, t_pro.NAME_KND, t_pro.BESTNR_KND, t_pro.ID_KND, t_pronr_art.ART_ART

FROM HACOS.t_pro LEFT OUTER JOIN HACOS.t_pronr_art ON t_pro.PRONR1 = t_pronr_art.PRONR1

WHERE (((t_pro.ARCHIV)=0))

ORDER BY t_pro.DAT_SORT DESC , t_pro.DAT DESC;

Und hier die Eigenschaften:

ODBC-Verbindung: ODBC;DSN=hacostooraclepervba;UID=SYSTEM;PWD=HERON;DBQ=HACOS.HERONDOM.ROBOTUNITS.COM;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

Liefert Datensätze: Ja

Meldungen protokollieren: Nein

ODBC-Wartezeit: 60

Sonst sind keine (wesentlichen) Eigenschaften vorhanden.

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...