[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2001
    Beiträge
    29

    Post Erfahrung mit SQL.REQUEST in Excel

    Hallo Gemeinde,

    ich möchte in Excel einen SQL auf die AS/400 absetzen. Microsoft Query reicht mir hier nicht aus.
    Ich habe ein in Query funktionierendes SQL Statement, daß mit SQL.REQUEST aber nicht funktioniert.
    Hat jemand Erfahrung damit?

    Danke im Voraus

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Das ganze im VB-Modul (Excel 95) bzw. VB-Editor (ab Excel 97) erfassen und per Extras/Macro.. ausführen.


    Sub SQL()
    Set cn400 = CreateObject("ADODB.Connection")
    Set cmSQL = CreateObject("ADODB.Command")
    Set rsSQL = CreateObject("ADODB.Recordset")

    Sheets("Tabelle1").Select
    Cells.Select
    Selection.Clear

    cn400.Provider = "IBMDA400"
    ' User und Passwort nur ab CA/400 V4R4 Express Client relevant
    'cn400.Properties("user id") = "USER"
    'cn400.Properties("password") = "PASSWORD"
    'hier eigenen AS/400 Systemnamen einsetzen
    cn400.Properties("data source") = "SYSTEM"
    cn400.Open
    Set cmSQL.ActiveConnection = cn400
    cmSQL.CommandText = "SELECT * FROM QIWS.QCUSTCDT "
    cmSQL.CommandType = adCmdText
    cmSQL.Prepared = True

    Set rsSQL = cmSQL.Execute
    With rsSQL
    'Feldnamen
    For j = 0 To .Fields.Count - 1
    Worksheets("Tabelle1").Cells(1, j + 1).Value = .Fields(j).Name
    Next j

    .MoveFirst
    i = 2
    Do While Not .EOF
    For j = 0 To .Fields.Count - 1
    'Typkonvertierungen anpassen, eventuell für jedes Feld, insbesondere bei Num
    ' der Einfachheit hier generell in String umgesetzt
    Worksheets("Tabelle1").Cells(i, j + 1).Value = CStr(.Fields(j).Value)
    Next j
    i = i + 1
    .MoveNext
    Loop
    End With

    cn400.Close
    End Sub


    [Dieser Beitrag wurde von Sven Schneider am 05. Juli 2001 editiert.]

    [Dieser Beitrag wurde von Sven Schneider am 05. Juli 2001 editiert.]

    [Dieser Beitrag wurde von Sven Schneider am 05. Juli 2001 editiert.]

  3. #3
    Registriert seit
    Mar 2001
    Beiträge
    29

    Post

    Hallo Sven,

    ich bekomme bei folgendem Statement

    cmSQL.CommandType = adCmdText eine Fehlermeldung.

    Die Fehlermeldung ist:
    Laufzeitfehler '3001':
    Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander unvereinbar.

    wobei CommandType laut Debugger nicht definiert ist und adCmdText leer ist.


    Ich will Dir vorher mal mein Ziel erklären:

    Ich möchte einen SQL String über Zellen füttern, um flexible Auswertungen zu machen.

    Gruss HPW

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Bei Excel 95 im VBA-Tabellenblatt / ab Excel 97 im VBA-Editor :
    Unter Extras/Verweise...
    "Microsoft ActiveX Data Objects 2.0 Library"
    oder
    "Microsoft ActiveX Data Objects 2.1 Library"
    hinzufügen.
    Dann müsste es funktionieren.
    (adCmdtext ist eine Konstante und ist in der ADO TypeLib definiert)

    [Dieser Beitrag wurde von Sven Schneider am 09. Juli 2001 editiert.]

  5. #5
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Hallo Sven ich bekomme bei:

    cn400.Properties("data source") = "SYSTEMname"

    folgenden Fehler:
    Fehler bei einer aus mehreren Schrittenn bestehenden OLE DB-Opereation.Prüfen Sie die einzelnen DB-Statuswerte, falls vorhanden.

    Sagt Dir das waS ?

    Wo liegt der Fehler?

    Danke,

    Hoschie
    Bye
    HoScHiE

  6. #6
    Registriert seit
    Mar 2001
    Beiträge
    29

    Exclamation

    Wenn der Code so übernommen wurde,
    würde ich sagen, daß "Systemname" durch den Namen der AS/400 ersetzt werden muss.

    gruss hpw

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Steht übrigens deutlich im Source-Code :

    ' User und Passwort nur ab CA/400 V4R4 Express Client relevant !!!
    'cn400.Properties("user id") = "USER"
    'cn400.Properties("password") = "PASSWORD"
    'hier eigenen AS/400 Systemnamen einsetzen !!!
    cn400.Properties("data source") = "SYSTEM"

    Also, erst lesen, dann ...

  8. #8
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Haltet Ihr mich für so dumm ?

    Natürlich habe unseren Systemnamen dort eingetragen und dann kommt der Fehler.
    Wollte Ihn halt nur nicht hier bekannt geben.

    Desweiteren haben wir CA V3 R2 im Einsatz

    So und nun nochmal ...

    hat einer eine Idee... ?
    Es ist aber auch egal was ich da eintrage ob HUgo oder unser Systemname ... der Fehler bleibt gleich.

    Danke
    Bye
    HoScHiE

  9. #9
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Post

    Habe es auch versucht (unter V3.7) und erhalte exakt dieselben Fehlermeldungen.

    Ob es doch am Betriebssystem liegt?

    hs

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Also keine Aufregung, vielleicht hilft folgendes :

    1.AS/400 Systemname ist nur bedingt richtig.
    Der Name muss unter IBM Client ASCCESS "AS/400 Verbindungen" (CWBCONN.EXE) definiert sein.
    OLE-DB verwendet diesen Namen zum Verbindungsaufbau.
    Dieser muss nicht zwangsläufig mit dem Systemnamen übereinstimmen.

    2. Ersetzen
    cn400.Provider = "IBMDA400"
    cn400.Properties("data source") = "SYSTEM"
    cn400.Open

    durch

    cn400.Open "provider=IBMDA400;data source=SYSTEM"

    3. wenn das nicht hilft, versucht es doch mit dem OLE-DB Treiber für ODBC (von Microsoft)
    Die Data Source ist hier allerdings eine eingerichtete ODBC-Datenquelle mit dem Client Access ODBC-Treiber.

    cn400.Provider = "MSDASQL"
    cn400.Properties("data source") = "ODBC_SOURCE"
    cn400.Open

    oder

    cn400.Open "provider=MSDASQL;data source=ODBC_SOURCE"


    Getestet habe ich mit :
    OS/400 V4R4
    CA/400 V3R2 (SNA und TCP/IP)



    [Dieser Beitrag wurde von Sven Schneider am 11. Juli 2001 editiert.]

  11. #11
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Talking

    Hallo Sven,

    habe es auch nochmals probiert. Mit Microsoft ODBC geht es.

    Danke
    HS

  12. #12
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Hallo Sven, also mit der 2. Methode alles in eine Zeile zu packen funktioniert es aber ...

    jetzt bekomme ich eine Schutzverletzung mit Abbruchund allem was dazu gehört(Dr.Watson)
    wenn er folgendes durchführt:

    Set cmSQL.ActiveConnection = cn400
    cmSQL.CommandText = "SELECT * FROM QIWS.QCUSTCDT "
    cmSQL.CommandType = adCmdText
    cmSQL.Prepared = True

    Set rsSQL = cmSQL.Execute ***hier brucht er dann ab !!!

    Haste noch ne Idee ?
    Danke
    Bye
    HoScHiE

Similar Threads

  1. EXCEL, PDF, ZIP, IDEA, e-mail, alles auf iSeries
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 22-11-06, 15:23
  2. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 08:29
  3. MiDViSiON Ausstellerprofil: Excel Data Deutschland AG
    By Kirsten Steer in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 15-06-06, 07:46
  4. EXCEL, PDF, CSV, HTML, IDEA für GDPdU mit TDM 5.2
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 22-03-06, 08:17
  5. DDE Datenaustausch zwischen VARPG und Excel
    By Spoldo in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 06-05-05, 10:48

Berechtigungen

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