PDA

Vollständige Version anzeigen : array, set, und laaangsame DB


Hütti
19.10.2001, 14:20
Hi.

habe folgenden code:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>
delabfrage = Array(&quot;abfrage1&quot;, &quot;abfrage2&quot;, &quot;abfrage3&quot;, &quot;abfrage4&quot;, _
&quot;abfrage15&quot;, &quot;abfrage6&quot ;)
&nbsp;
<span class="REM"> 'aufruf aller abfragen</span>
<span class="TOKEN">For</span> name = <span class="TOKEN">LBound</span>(delabfrage) <span class="TOKEN">To</span> <span class="TOKEN">UBound</span>(delabfrage)
<span class="TOKEN">Set</span> abfrageausf = CurrentDb.QueryDefs(delabfrage(name))
abfrageausf.Execute
<span class="TOKEN">Next</span></pre></div>

also: im array stehen alle abfragen, die ich ausführen will.
das ding läuft auch seit jahr und tag super zuverlässig. bei einer neuen db entsteht folgendes problem:
die abfrage 4 ist eine löschabfrage, die aus einer 80.000 datensätze tabelle mit einer 10x - "oder -bedingung" datensätze löscht.
die abfrage dauert ca. 25 sec. (dann arbeitet das modul weiter).

nach dieser abfrage dauert das zuweisen mit der zeile
Set abfrageausf = CurrentDb.QueryDefs(delabfrage(name))
geschlagene 10 minuten!!!!

hat irgendjemand eine idee, warum?

wie geasgt, bei anderen dbs habe ich das dreifache an abfragen und alles läuft prima. es muss an der abfragevorher liegen, oder???

SoftNet
19.10.2001, 16:31
Hallo Hütti,

da war mal was mit extrem langsamen Abfragen auf NT-Rechnern in Verbindung mit einem bestimmten Patch oder sowas in der Art. Such mal in der englischen KB von Microsoft ich meine mich zu erinnern dort etwas zu dem Thema gesehen zu haben. Den Link zur KB findest bei mir auf der Seite in den Access-Links. Ob das auf Dein Problem paßt kann ich nicht sicher sagen.

Gruss, Tommy. http://www.access-home.de

Hütti
22.10.2001, 10:38
hi tommy,

sieht interessant aus. jedoch sprechen die davon, das die design-ansicht den fehler produzieren würde. ich öffne ja per vba die abfragen nicht in der design-ansicht. oder ist der aufrufweg der selbe?

hätte dann ein expliziter aufruf der abfrage als dynaset oder snapshot vielleicht zur folge, das die zuweisung besser funktioniert???

erwin
22.10.2001, 10:54
klingt seltsam ??!

was ist, wenn du das SQL "direkt" verwendest also:

<big>
For name = LBound(delabfrage) To UBound(delabfrage)
CurrentDB.execute CurrentDb.QueryDefs(delabfrage(name)).SQL
Next</big>

fragt sich erwin...

Hütti
22.10.2001, 11:00
was ist der unterschied, an deiner ausführung??? interesse-halber :)
ich werde es auf jeden fall testen.
danke

erwin
23.10.2001, 19:31
@hütti

normal sollte keiner sein (ausser an der gespeicherten Query ist irgendwas "imEimer") - ich meinte ja, dass du das einfach mal testen solltest - interessehalber :D

so long erwin...

Hütti
24.10.2001, 07:45
jau, bringt aber keine besserung.

habe allerdings inzwischen festgestellt, das, wenn ich die anzahl der kriterien (war eine und-oder auswahl) reduziere, läuft das wieder zügig durch.

a00 scheint sehr sensibel zu sein, bei der verwaltung von kriterien...

Sascha Trowitzsch
24.10.2001, 09:38
Wenn *nach* der Ausführung der Abfrage 4 der Rechner 10 min braucht, um die nächste Zeile mit der Set-Anweisung auszuführen, dann kann es eigentlich nur damit zu tun haben, dass er mit dem Aufräumen des Speichers beschäftigt ist.
Hast du mal einen Speicher-Monitor angeschmissen, während die Abfrage 4 ausgeführt wird? Wahrscheinlich swapt Access dabei, denn 25 sec für 80000 DS sind eigentlich zuviel. (Gut, ich weiß nicht, welches OS und wie die Rechner ausgestattet sind.)

Falls der Speicher das Problem sein sollte, dann würde ich testweise die Abfragen weiter in einzelne aufteilen.
Also z.B. Löschabfrage 4 enthielte nur wenige Bedingungen und bekäme ihre Daten von einer weiteren Auswahlabfrage mit einschränkenden Kriterien.

Also Microsofts Rushmore-Technologie - die in A2000 angeblich verbessert wurde - ist unergründlich. Mir scheint auch, die Optimierung der Abfragen funktioniert bei einfacheren tatsächlich, bei komplexeren nicht unbedingt.

Nebenbei: Sind die Felder, auf die die Kriterien angewandt werden, indiziert?

Ciao, Sascha

Hütti
24.10.2001, 13:02
indiziert ist das feld. mit dem speicher kann es nichts zu tun haben... habe hier einen P3 800MHz mit 384 MB Speicher...

Die Abfrage läuft ja im "Stand alone" Betrieb sauber durch....

Wie gesagt, das waren ca. 20 "oder"-Kriterien, die jeweils 3 "und's" enthielten.

habe das jetzt durch eine andere zuweisung des sql-codes behoben (nur noch 4 kriterien). jetzt läuft das zügig durch.

ich verstehe trotzdem nicht, warum die SET-Zuweisung so langsam gelaufen ist. bei der abfrage selber hätte ich das verstanden.