none
OpenReport geht nicht mehr mit Win7

    Allgemeine Diskussion

  • Hallo zusammen,

    Ich habe ein PPS-System mit Access als Frontend und SQL-Server. Der Kunde hat 10 PC in Betrieb.

    Nun hat er 2 neue mit Win7. Auf denen bleibt das Programm auf folgendem Befehl stehen:

    DoCmd.OpenReport "rBAuf", , , "[BAufNr] =" + Str(Me!BAufNr)

    Fehlermeldung: Der Befehl ist zu komplex um ausgewertet zu werden. Unterteilen Sie....

    Der SQL-Befehl ist folgender:

    SELECT DISTINCTROW tAdressen.Firma, tArtikel.ArtBez, tArtikel.ArtNrP, tArtikel.ZchngNr, tArtikel.TGew, tArtikel.Bem, tArtikel.Kontr, tArtikel.SGew, tArtikel.SVerp, tArtikel.SPal, tArtikel.MPal, tBAuf.BAufNr, tBAuf.Termin, tBAuf.ArtNr, tBAuf.AufM, tBAuf.Bem AS Bem1, tBAuf.NeuDat, tBAuf.Muster, tArtikel.Temper, tArtikel.DTeil, tArtikel.Eigner, tBAuf.Gelöst, tWerkzeug.StammF, tArtikel.GW, tStüli.Pos, [Menge]*[Fach] AS SGewi, tArtikel.MGew, tArtikel.MGew1Komp, tArbPlan.Pos, tWerkzeug.Fach
    FROM tStüli RIGHT JOIN (tWerkzeug RIGHT JOIN ((tArtikel INNER JOIN (tAdressen RIGHT JOIN tBAuf ON tAdressen.Code = tBAuf.Code) ON tArtikel.ArtNr = tBAuf.ArtNr) LEFT JOIN tArbPlan ON tArtikel.ArtNr = tArbPlan.ArtNr) ON tWerkzeug.WzNr = tArbPlan.WzNr) ON tStüli.Stüli = tArtikel.ArtNr
    WHERE (((tStüli.Pos)=1 Or (tStüli.Pos) Is Null) AND ((tArbPlan.Pos)=5 Or (tArbPlan.Pos) Is Null)) OR (((tStüli.Pos)=30 Or (tStüli.Pos) Is Null))
    ORDER BY tBAuf.BAufNr;

    Kann Win7 nicht mehr was in Win2000 und XP funktioniert?

    Besten Dank    Max Leibundgut

     

    Montag, 29. November 2010 15:54

Alle Antworten

  • Hallo,

    Max Leibundgut wrote:

    Fehlermeldung: Der Befehl ist zu komplex um ausgewertet zu werden.
    Unterteilen Sie....

    Der SQL-Befehl ist folgender: [...]
    Kann Win7 nicht mehr was in Win2000 und XP funktioniert?

    Win7 als 32- oder 64-bit Version? Wurde ausser Win7 noch was anderes
    geaendert, z.B. die Access-Version? Die SQL-Syntax mit den vielen Outer
    Joins sieht zwar grenzwertig aus, aber solange sie anderweitig
    funktioniert, wuerde sie sicher auch unter Win7 laufen.

    Was passiert, wenn du den SQL-String im SQL-Fenster des Abfrageeditors
    ausfuehrst? Kommt da die gleiche Meldung? Falls ja, wird irgendeine Stelle
    im String markiert?
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 30. November 2010 00:41
    Moderator
  • hallo Max,

    ich denke die Komplexität an sich sollte es nicht sein. Ich würde erstmal das SQL Statement anhübschen, d.h. Tabellenaliasnamen verwenden und alle Feld- und Tabellennamen mal in [] setzen. Auch würde ich anstatt [feld] Is Null die entsprechende IsNull([feld])-Funktion benutzen.

    Ansonsten: Hat der Report im Load- oder Open-Ereignis Code hinterlegt?


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 30. November 2010 10:29
    Moderator
  • Hallo Stefan!

    Stefan Hoffmann schrieb:

    Auch würde ich anstatt [feld] Is Null die entsprechende IsNull([feld])-Funktion benutzen.

    Warum würde du das machen? Damit eine mögliche Indexnutzung ausgeschlossen wird?
    Was gefällt dir an der SQL-typischen Schreibweise von [feld] Is Null nicht?

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Dienstag, 30. November 2010 11:10
  • hallo Josef,

    On 30.11.2010 12:10, Josef Pötzl [MVP] wrote:

    Auch würde ich anstatt [feld] Is Null die entsprechende IsNull([feld])-Funktion benutzen.

    Warum würde du das machen? Damit eine mögliche Indexnutzung ausgeschlossen wird?
    Was gefällt dir an der SQL-typischen Schreibweise von [feld] Is Null nicht?

    Wenn er wirklich in eine zu komplexe Abfrage rein läuft, dann ist es von Vorteil den SQL-Anteil zu reduzieren. Hat bei mir schon mal geholfen.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 30. November 2010 13:02
    Moderator
  • Hallo Stefan!

    Stefan Hoffmann schrieb:

    Wenn er wirklich in eine zu komplexe Abfrage rein läuft, dann ist es von Vorteil den SQL-Anteil zu reduzieren. Hat bei mir schon mal geholfen.

    Danke für die Info. Das ist interessant. Ich hätte nicht angenommen, dass das Nutzen des Jet-Expression-Service hilft, eine Abfrage weniger "komplex" zu machen.
    Ich muss allerdings gestehen, dass ich mich relativ wenig mit komplexeren Jet-Abfragen beschäftige - daher finde ich es immer wieder interessant, welche "Umweglösungen" bei Jet-SQL helfen können. :-)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Dienstag, 30. November 2010 13:27
  • Hallo Peter,

    Die alten PC haben Win XP und Office 2000

    Die neuen PC haben Win 7 (32 Bit) und Office 2010

    Die Abfrage mit dem SQL-String lässt sich im Frontend mit Win7 problemlos öffnen.

    Gruss    Max Leibundgut

    Dienstag, 30. November 2010 13:39
  • Hallo!

    Max Leibundgut schrieb:

    Die Abfrage mit dem SQL-String lässt sich im Frontend mit Win7 problemlos öffnen.

    Wie sieht eigentlich der an den Bericht übergebene Filter aus?

    dim strFilter as String
    strFilter =  "[BAufNr] =" + Str(Me!BAufNr)
    debug.print strFilter
    DoCmd.OpenReport "rBAuf", , , strFilter

    Falls der Filterausdruck passt, könntest du prüfen, ob folgende Abfrage funktioniert:

    select * from DeineAbfrage where [BAufNr] = DeineBAufNurVonVorher

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Dienstag, 30. November 2010 13:46
  • Hallo Josef,

    Ab dem Moment, wo ein Abfrage zu komplex zu werden beginnt, wird immer etwas Voodoo notwendig, da es manchmal hilft. Was genau diese Meldung triggert ist mir eh ein Rätsel, da viele Abfragen dieses Typs ja interessanterweise als eigenständige Abfrage geöffnet auch laufen. Oft ist ja dann das Öffnen in einem Report oder Formular der Auslöser.

    Ansonsten bleibt ja nichts anderes übrig als die Abfrage in mehrere separate zu zerlegen.

    btw, wo ich nochmal drüber lese: Es ist doch eine nette Ansammlung von INNER, LEFT und RIGHT JOINs. Er könnte da tatsächlich die Grenze überschritten haben.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 30. November 2010 13:48
    Moderator
  • Hallo Stefan,

    Ich werde versuchen den SQL-String anzuhübschen.

    Ich verspreche mir aber nicht viel, denn ich machte die Abfrage in der Access-Abfrage-Entwicklungsansicht und diese machte den SQL-String.

    Der Report hat im Load und Open-Ereignis nichts aber im Format und Print:

    Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

      Dim iDSS As Integer                                'Datensätze in Stüli
      Dim iDSAP As Integer                               'Datensätze in APlan
     
      iDSS = DCount("*", "tStüli", "Stüli='" & Me!ArtNr & "'")
      iDSAP = DCount("*", "tArbPlan", "ArtNr='" & Me!ArtNr & "'")

      'If Me!Muster Then
      '  Me!BezFldWer.Caption = "Musterung"
      'Else
      '  Me!BezFldWer.Caption = "Produktion"
      'End If

      If iDSS > 4 Then                                   'mehr als 4 StüliPos
        Me!RahmenStüli.Height = 1862 + 285 * (iDSS - 4)  '567 Twips/cm, 285=Zeile
      End If

      If iDSAP > 2 Then                                  'mehr als 2 APlanPos
        Me!RahmenAPlan.Height = 1921 + 571 * (iDSAP - 2) '567 Twips/cm, 571=Zeile
      End If

      '22.7.03 ML
    End Sub

    Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)

      Dim iHöhe As Integer
      'Rechteck um Bemerkungen zeichnen, Height ist erst bei Print bekannt
      'iHöhe ist variabel, min 1831 Twips wenn nur je 1 Zeile a 284 Twips
      iHöhe = 1250 - 2 * 284 + Me!Bem1.Height + Me!Kontr.Height   '+ Me!Bem.Height
      Me.DrawWidth = 10                           'ca 1 Punkt
      'Me.Line (56, 8095)-Step(10035, iHöhe), , B  'Rechteck zeichnen
     
      '24.11.03 ML, 10.1.04 Bem weg, Me.Line wegkommentiert 10.01.05 HL
    End Sub

    Ein Unterbericht hat noch Folgendes:

    'WeidAuf, srBMat in rBAuf
    Private Sub Detail1_Format(Cancel As Integer, FormatCount As Integer)   'WeidAuf, srBMat

      Me!AufMenge = Me!Menge * Me.Parent!AufM + Me!RMenge
     
      If Me!Einh = "Kg" Then
        Me!AufMenge = Me!AufMenge / 1000              'g in Kg
      Else
        Me!AufMenge = Int(Me!AufMenge + 0.9999)       'Stk aufrunden
      End If

      '23.11.98 ML RMenge 26.6.00
    End Sub

    Ich kann mir kaum vorstellen, dass darin ein Problem besteht. Aber irgendwo ist eines.

    Gruss     Max Leibundgut

    Dienstag, 30. November 2010 13:58
  • hallo Max,

    Ich werde versuchen den SQL-String anzuhübschen.
    Ich verspreche mir aber nicht viel, denn ich machte die Abfrage in der Access-Abfrage-Entwicklungsansicht und diese machte den SQL-String.

    Das ganze mußt du natürlich in der SQL-Ansicht machen, der Designer ist in solchen Fällen meist schon das falsche Mittel der Wahl.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 30. November 2010 14:26
    Moderator
  • Hallo!

    Stefan Hoffmann [MVP] schrieb:

    Ab dem Moment, wo ein Abfrage zu komplex zu werden beginnt, wird immer etwas Voodoo notwendig, da es manchmal hilft. Was genau diese Meldung triggert ist mir eh ein Rätsel, da viele Abfragen dieses Typs ja interessanterweise als eigenständige Abfrage geöffnet auch laufen. Oft ist ja dann das Öffnen in einem Report oder Formular der Auslöser.

    Interessant ist auch, dass anscheinend das Unterteilen in mehrere Abfragen helfen soll. Der Ausführungsplan wird nämlich trotzdem wieder für die komplette SQL-Anweisung (also inkl. separate Abfragen) ermittelt.

    btw, wo ich nochmal drüber lese: Es ist doch eine nette Ansammlung von INNER, LEFT und RIGHT JOINs. Er könnte da tatsächlich die Grenze überschritten haben.

    Es sind nur 6 Tabellen beteiligt. Das sollte auch für Jet kein besonderes Problem sein (da mach selbst ich mit Jet öfter Abfragen mit mehr Tabellen, obwohl ich sie normalerweise in T-SQL schreibe. ;-)).

    FROM
      tStüli
      RIGHT JOIN
     (tWerkzeug
      RIGHT JOIN
    ((tArtikel
      INNER JOIN
     (tAdressen
      RIGHT JOIN
      tBAuf
      ON tAdressen.Code = tBAuf.Code)
      ON tArtikel.ArtNr = tBAuf.ArtNr)
      LEFT JOIN
      tArbPlan
      ON tArtikel.ArtNr = tArbPlan.ArtNr)
      ON tWerkzeug.WzNr = tArbPlan.WzNr)
      ON tStüli.Stüli = tArtikel.ArtNr

    Diese Ausdruck finde aber auf den ersten Blick gar nicht so einfach zu überblicken. ;-)

    Ich versuchte die right/left-join-Mischung einmal in left join umzuformen, bin mir aber nicht 100% sicher, ob das gleiche Ergebnis erzielt wird. ... vielleicht hilft es Jet, damit es nicht mehr in 2 Richtungen "denken" muss. ;-)

    FROM
    ((((tArtikel
       INNER JOIN
       tBAuf ON tArtikel.ArtNr = tBAuf.ArtNr)
       left join
       tAdressen ON tAdressen.Code = tBAuf.Code)
       left join
       tArbPlan ON tArtikel.ArtNr = tArbPlan.ArtNr)
       left join
       tWerkzeug ON tWerkzeug.WzNr = tArbPlan.WzNr)
       left join
       tStüli ON tStüli.Stüli = tArtikel.ArtNr

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Dienstag, 30. November 2010 21:33
  • Hallo Peter, Josef und Stefan,

    Ich habe die Abfrage halbiert, die Where-Klausel in eine String-Variable überführt, etc. und wollte damit heute zum Kunden. Der sollte mir vorher noch die detaillierte Fehlermeldung kopieren. Jetzt meldet er:

    Hoi Max,

    das Ausdrucken geht jetzt wieder auf beiden PC’s. Tut mir leid für die Umtriebe, aber ich weiss wirklich nicht warum.

    Ich habe vorher an 2 verschiedenen Tagen das Problem beim Kunden persönlich gesehen. Es scheint tatsächlich Voodoo im Spiel zu sein. Ich hoffe nur dass es anhält.

    Ich kann Euch noch sagen, dass der Abfrage-Designer im Access die Funktion IsNull() nicht akzeptiert. Die Alias und die Klammern konnte ich einfügen und es funktionierte, aber beim Speichern ist alles wieder verschwunden.

    Ich danke Euch vielmals für Eure Bemühungen und bitte um Entschuldigung, dass ich Eure Zeit sinnlos in Anspruch nahm.

    mfg     Max Leibundgut

     

    Mittwoch, 1. Dezember 2010 13:59