Query too complex

Hallo allerseits,

habe unter A97 SR2 mit Win2000 folgendes kleines Problem:

die - zugegebenermassen recht umfangreiche - Abfrage kann ich aufrufen, sobald ich aber den dazu passenden Bericht verwende, bekomme ich die Fehlermeldung „Query too complex“. Versuchsweise habe ich den Bericht mal ohne die Summenbildung in der Fußzeile neu gestartet und … funktioniert einwandfrei. Ich will aber diese sch… Summen haben !!

Die Abfrage ist eine Abfrage aus einer Abfrage aus einer Abfrage. Ziemlich kompliziert, und ich wage zu bezweifeln, dass ich da jetzt noch durchsteige. Was kann ich machen, damit mein Computer mich wieder lieb hat ? Bringt so etwas wie eine Erweiterung des Arbeitsspeichers irgendwas ?

Danke & Gruß
Jürgen

Hallo, Jürgen!

die - zugegebenermassen recht umfangreiche - Abfrage kann ich
aufrufen, sobald ich aber den dazu passenden Bericht verwende,
bekomme ich die Fehlermeldung „Query too complex“.
Versuchsweise habe ich den Bericht mal ohne die Summenbildung
in der Fußzeile neu gestartet und … funktioniert
einwandfrei. Ich will aber diese sch… Summen haben !!

Da scheint Access dann wohl Deine Abfrage noch ein wenig aufzubohren. Und dann knallt’s. Access kann nämlich leider nicht beliebig lange Abfragen zusammenbasteln. Als Abhilfe bringt Dich dann nur noch Abfragenoptimierung weiter. Oder Du arbeitest mit tempotären Zwischentabellen. Wenn Du z. B. Deine derzeitige gesamte Abfarge so ausführen kannst, die Summenbildung aber zuviel wird, dann lege eine Tabelle gemäß Deiner Abfragestruktur an, schreibe das Abfrageergebnis in diese Tabelle und gib diese Tabelle als Datengrundlage des Berichts an. Das sollte laufen.

Du wirst dann u. U. Probleme bekommen, weil Access die Datenbank wegen dem häufigen Löschen und Schreiben dieser Tabelle immer mehr aufbläht. Also in regelmäßigen Abständen reparieren/komprimieren laufen lassen.

Die Abfrage ist eine Abfrage aus einer Abfrage aus einer
Abfrage. Ziemlich kompliziert, und ich wage zu bezweifeln,
dass ich da jetzt noch durchsteige. Was kann ich machen, damit
mein Computer mich wieder lieb hat ? Bringt so etwas wie eine
Erweiterung des Arbeitsspeichers irgendwas ?

Die dürfte nichts bringen (aber auch nicht schaden, mehr Speicher ist immer gut), weil das Meckern über die Komplexität einer Abfrage nichts mit dem Speicher/der Hardware zu tun hat, sondern mit eigenen Beschränkungen. Wie gesagt: Abfrage normieren und reduzieren oder mit temporären Zwischentabellen arbeiten.

Gruß, Manfred

Hallo Manfred,

werde zunächst dem zweiten Tip (temporäre Tabelle) folgen.

Danke für die prompte Hilfe !!

Gruß
Jürgen

Hallo Manfred,

war wohl etwas zu enthusiastisch [oder habe meine Fähigkeiten wie üblich überschätzt] …

Mein Versuch sieht wie folgt aus:

Public Sub DatenUmschichten()
Dim db As Database
Dim rsSource As DAO.Recordset, rsTarget As DAO.Recordset

Set db = CurrentDb
Set rsTarget = db.OpenRecordset(„tSGARes“) 'die neue Tabelle
Set rsSource = db.OpenRecordset(„qSGAAuswertung2“, dbOpenDynaset, dbReadOnly, dbReadOnly)

Do Until rsSource.EOF
rsTarget.AddNew

rsTarget(„tSGAResTerm“) = Forms(„fSGAPeriod“).Controls(„SGAVorgabeTerm“)
rsTarget(„tSGAResBranch“) = rsSource(„VertragsBranch“)
[…] 'die anderen 20 Überträge spare ich mir mal
rsTarget(„tSGAResSTerm“) = rsSource(„STerm“)

rsTarget.Update
rsSource.MoveNext
Loop
Set db = Nothing
End Sub

Zuerst kommt die Meldung „The object you referenced in the Visual Basic procedure as an OLE object isn’t an OLE object.“ und nach einem freundlichen [OK] dann als Runtime error 3061 „Too few parameters. Expected 4.“

Die Datenbank (aufgeteilt in Tabellen und Frontend) sitzt auf dem Netz, wie erwähnt A97 SR2. Irgendeine Idee ?

Danke & Gruß
Jürgen

Hallo Jürgen

Ich hab deinen Code jetzt nicht so genau analysiert, aber müsste da ein DoCmd.RunSQL(„insert into…“) nicht auch funktionieren? Du hast ja nicht 2 DB’s.

Ist nur so ne idee…

Gruss: Christian

Hallo, Jürgen!

war wohl etwas zu enthusiastisch [oder habe meine Fähigkeiten
wie üblich überschätzt] …

Entweder funktioniert wirklich ein Insert Into, oder…

Zuerst kommt die Meldung „The object you referenced in the
Visual Basic procedure as an OLE object isn’t an OLE object.“
und nach einem freundlichen [OK] dann als Runtime error 3061
„Too few parameters. Expected 4.“

Wann kommt die Meldung? Zum einen solltest Du die Typen bei den Zuweisungen auf Korrekt- und Gleichheit überprüfen. Irgendwie scheinst Du was in ein OLE-Feld reinschreiben zu wollen oder ein solches zu verwenden. Trace einfach mal den gesamten Code durch, damit Du den genauen Fehler lokalisieren kannst.

Die komische Fehlermeldung „Too few parameters. Expected 4.“ deutet auf einen Fehler in einer SQL-Anweisung hin, bei dem Felder/Parameter evtl. nicht korrekt benannt sind. Das könnte z. B. an Feldnamen wie „mein-feld“ liegen, die dann (in SQL) in eckige Klammern einzuschließen sind, weil sonst ein Ausdruck ‚Feld „mein“ minus Feld „feld“‘ berechnet wird.

Gruß, Manfred