[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2003
    Beiträge
    14

    Question Prozessdauer bei Import nach MS Access via ODBC

    Vorgeschichte:
    Ich habe mir ein Modul erstellt, mit welchem ich AS400-Daten über eine SQL-Abfrage in MS Access importiere.
    Zunächst wir hierin die Anzahl der Felder und Datensätze ermittelt und abgefragt, ob der Import weiter verfolgt werden soll. Nach Zustimmung werden nach Anlegen der notendigen Access-Tabelle dann die Daten importiert. Derweil zeigt ein Progressbar den Verlauf an.

    Nun das Problem:
    Manchmal ist der zuvor im Command-Objekt gesetzt Wert für Timeout (SQL0666) zu klein und die Routine wird abgebrochen. Doch auch wenn dieser erhöht wird, dauert es je nach Komplexität der Abfrage einige Zeit, bis es zum Import kommt bzw. überhaupt etwas passiert. Hier könnte zumindest ein Progressbar Aufschluss über den Aktivitätenverlauf geben.

    Hier die Frage:
    Ist es möglich die zu erwartende Prozessdauer (die wird m.E. in der SQL0666-Meldung angezeigt) zunächst abzufragen um diese dann in einem Progressbar zu verwenden?

    Wäre schön wenn hier was gäbe.

    Gruß Thomas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dazu müsstest du den SQL 2 Mal ausführen.
    1. CommandTimeout mit 1, Auswerten der Fehlermeldung
    2. CommandTimeout mit größerem Wert

    Über ADO kannst du den SQL auch asynchron starten, so dass ein Weiterarbeiten möglich ist.
    Über das Recordset.State kannst du abfragen, ob der Execute ggf. noch läuft.

    Über die Cancel-Eigenschaft kannst du (zumindest bei der AS/400) den laufenden Befehl sogar abbrechen.

    Das Connection-Object liefert über ein Ereignis, dass der SQL fertig ist und die daten abgeholt bzw. verarbeitet werdn können (je nach Cursorart).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Dec 2003
    Beiträge
    14
    Danke!
    Damit mit der Auswertung der Fehlermeldung ist eine gute Lösung. Der zusätzliche SQL nimmt nicht sonderlich viel Zeit in Anspruch und durch das CommandTimeout= 1 ist die Fehlermeldung ruckzuck da!

    Aber kannst du das asynchrone Starten näher beschreiben?

    Könnte dies so lauten:
    Code:
    Dim AS400Connect As New ADODB.Connection
    Dim AS400Command As New ADODB.Command
    Dim AS400Record As New ADODB.Recordset
    
    CommString = "Select * FROM DCWD.KBEWKO WHERE KBKST<>'99999' Order BY KBBTX "
    
    With AS400Connect
       .ConnectionString = "DSN=THK-Bibliothek"
       .Open "DSN=THK-Bibliothek", Benutzerkennung, Passwort
    end with
    
    With AS400Command
       .CommandText = CommString
       .CommandTimeout = 500
       Set .ActiveConnection = AS400Connect
    End With
    
    AS400Record .StayInSync = False
    AS400Record .Open AS400Command
    ...
    Gruß Thomas

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Code:
    ' Ereignisse der Verbindung
    Dim WithEvents cLocalWait As ADODB.Connection   ' Warten auf Fertigstellung
    
    :
    :
            With xRecord
                .CursorLocation = adUseClient       ' lokal Cache
                .CursorType = adOpenStatic
                .LockType = adLockBatchOptimistic
                .CacheSize = 10000
                .Open xSQL, cLocal, , , adAsyncExecute Or adAsyncFetch
                
                Do While True
                    Select Case True
                    Case Is = (.State And adStateExecuting) = adStateExecuting
                        DoEvents
                    Case Else
                        Exit Do
                    End Select
                Loop
                
            End With
    :
    :
    Private Sub cLocalWait_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
    ' Behandlung des Ereignisses
        If Not pError Is Nothing Then
           ' Fehler passiert
        End If
    End Sub
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Dec 2003
    Beiträge
    14
    Bei mir läuft die Schleife endlos obwohl .State und adStateExecuting den Wert 4 haben!

    Welche Werte kann denn .State überhaupt haben?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Auf MSDN gibts eine Beschreibung zu ADO.
    Du wirst auch fündig in "C:\WinVerz\HELP\ADO210.CHM". Die Doku ist immer noch weitgehend gültig.

    adStateExecuting hat ja den Wert 4.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  2. Kein Update via MS Access
    By Fubini in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 06-09-05, 14:11
  3. Geschwindigkeit beim Datentransfer via ODBC in MS ACCESS
    By mdhl in forum NEWSboard Server Software
    Antworten: 5
    Letzter Beitrag: 11-07-05, 09:18
  4. MS Access Zugriff via ODBC auf iSeries Tabellen
    By Rico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 21-03-05, 09:43
  5. Zugriff MS Access auf AS/400 via ODBC
    By SL in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-07-02, 11:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •