PDA

View Full Version : ADO SQL in Access über nicht indexiertes Feld auf der AS/400 abfragen



gerhardsw
20-08-10, 14:13
Hallo zusammen,

ich muss gleich vorweg sagen, dass ich noch neu auf dem Gebiet der Abfragen in VBA auf den AS/400 bin.

Habe dazu folgende Frage:

Wenn ich direkt aus VBA heraus auf eine AS/400 zugreife und das Selektionskriterium kein Indexiertes Feld auf der AS/400 ist, dann dauert die Abfrage ewig lange (ca. 6 Minuten bei einer Datei mit ca. 16 Mio Datensätzen).

Diese Abfrage sieht dann folgendermaßen aus:

__________________

Public Sub as400_Connect()

Dim MyConn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim DB As DAO.Database
Dim STR As String
Dim strFakturnummer as String

strFakturnummer = inputbox("Bitte geben Sie die Fakturnummer ein:")



Set DB = CurrentDb

Set MyConn = New ADODB.Connection
MyConn.Open "Provider=IBMDA400;Data Source=xxxx;", "xxxx", "xxxx"


Set rs = New ADODB.Recordset
Set rs.ActiveConnection = MyConn
Set DB = CurrentDb
With MyConn


sql = "SELECT * from FPRDDTA.LFSVHD13 where HDNFAK = "
& strFakturnummer

rs.Open sql

Do Until rs.EOF
Debug.Print rs.Fields("hdnauf")
rs.MoveNext
Loop
End With
rs.Close

End Sub

__________________

Gibt es eine oder mehrere Möglichkeiten, diese Abfrage in Access deutlich zu beschleunigen - vielleicht indem man das Feld über SQL irgendwie indexiert? Sicher haben Sie diverse Lösungsansätze parat.

Vielen Dank im voraus!

Grüße,
Wilfried

BenderD
20-08-10, 14:38
... ich kann mir kaum vorstellen, dass es für die Fakturnummer keinen Index geben soll, gehört da vielleicht noch eine Firmennummer, oder ähnliches dazu?

Sollte das allerdings wirklich fachlich richtig sei und da nicht ein wesentlicher Teil des Schlüssels fehlen, hilft da ein create index durch den Datenban Verantwortlichen (keinesfalls by the fly im Anwendungsprogramm.

D*B


Hallo zusammen,

ich muss gleich vorweg sagen, dass ich noch neu auf dem Gebiet der Abfragen in VBA auf den AS/400 bin.

Habe dazu folgende Frage:

Wenn ich direkt aus VBA heraus auf eine AS/400 zugreife und das Selektionskriterium kein Indexiertes Feld auf der AS/400 ist, dann dauert die Abfrage ewig lange (ca. 6 Minuten bei einer Datei mit ca. 16 Mio Datensätzen).

Diese Abfrage sieht dann folgendermaßen aus:

__________________

Public Sub as400_Connect()

Dim MyConn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim DB As DAO.Database
Dim STR As String
Dim strFakturnummer as String

strFakturnummer = inputbox("Bitte geben Sie die Fakturnummer ein:")



Set DB = CurrentDb

Set MyConn = New ADODB.Connection
MyConn.Open "Provider=IBMDA400;Data Source=xxxx;", "xxxx", "xxxx"


Set rs = New ADODB.Recordset
Set rs.ActiveConnection = MyConn
Set DB = CurrentDb
With MyConn


sql = "SELECT * from FPRDDTA.LFSVHD13 where HDNFAK = "
& strFakturnummer

rs.Open sql

Do Until rs.EOF
Debug.Print rs.Fields("hdnauf")
rs.MoveNext
Loop
End With
rs.Close

End Sub

__________________

Gibt es eine oder mehrere Möglichkeiten, diese Abfrage in Access deutlich zu beschleunigen - vielleicht indem man das Feld über SQL irgendwie indexiert? Sicher haben Sie diverse Lösungsansätze parat.

Vielen Dank im voraus!

Grüße,
Wilfried

gerhardsw
20-08-10, 14:50
Hallo! Danke für die schnelle Rückinfo. Wenn ich über Access eine Verknüpfung auf die AS/400 Tabelle erstelle, sind doch grundsätzlich die Schlüsselfelder fett markiert, oder? Falls ja ist dieses Datenfeld wirklich nicht indexiert. Eine gleiche Abfrage über einen Range einer Auftragsnummer (welche fett markiert angezeigt wird) ist in Sekunden erledigt. Das spricht ja eher dafür... Gibt es denn evtl. auch noch andere, performantere Möglichkeiten um hier zum Ziel zu kommen?!

Viele Grüße,
Wilfried

BenderD
20-08-10, 15:23
... ich würde da mit oder rechnen, ich weiß zwar nicht, was access da anzeigt, aber ich vermute mal den Primärschlüssel.
Wenn es da anderes als eine Index gäbe, hätte ich das schon mit genannt.
Ich würde aber nochmal dringend empfehlen, mal abzuklären, ob das genau so Sinn macht, üblicherweise kann man davon ausgehen, dass für Standard Varianten von Abfragen Zugriffspfade da sind.

D*B


Hallo! Danke für die schnelle Rückinfo. Wenn ich über Access eine Verknüpfung auf die AS/400 Tabelle erstelle, sind doch grundsätzlich die Schlüsselfelder fett markiert, oder? Falls ja ist dieses Datenfeld wirklich nicht indexiert. Eine gleiche Abfrage über einen Range einer Auftragsnummer (welche fett markiert angezeigt wird) ist in Sekunden erledigt. Das spricht ja eher dafür... Gibt es denn evtl. auch noch andere, performantere Möglichkeiten um hier zum Ziel zu kommen?!

Viele Grüße,
Wilfried