PDA

View Full Version : Erfahrung mit SQL.REQUEST in Excel



Seiten : [1] 2

hpw
05-07-01, 11:07
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

Sven Schneider
05-07-01, 21:01
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.]

hpw
06-07-01, 08:48
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

Sven Schneider
09-07-01, 15:42
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.]

HoScHiE
10-07-01, 16:45
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

hpw
10-07-01, 17:12
Wenn der Code so übernommen wurde,
würde ich sagen, daß "Systemname" durch den Namen der AS/400 ersetzt werden muss.

gruss hpw

Sven Schneider
10-07-01, 19:24
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 ...

HoScHiE
11-07-01, 02:40
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

hs
11-07-01, 08:55
Habe es auch versucht (unter V3.7) und erhalte exakt dieselben Fehlermeldungen.

Ob es doch am Betriebssystem liegt?

hs

Sven Schneider
11-07-01, 20:31
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.]