-
SQL aus Excel
Hallo,
nachdem das mit "call" nur eine Übergangslösung sein darf möchte ich aus Excel VBA SQL Befehle auf der AS400 ausführen, leider kommen da immer wieder Fehlermeldungen :
Option Explicit Sub as400_SQL() Dim cnn As ADODB.Connection Dim CallCmd As String Set cnn = New ADODB.Connection ' Verbindungsdaten cnn.Open "Provider=IBMDA400;" & _ "Data Source=192.***.***.***;" & _ "User ID=*****;" & _ "Password=*****;" Hier soll mit SQL z.B. ausgeführt werden : „create table … …“
' Verbindung schliessen cnn.Close Mit Bitte um Hilfe und vielen Dank im voraus, ERIC
-
Es wäre sehr hilfreich, die Fehlermeldung mal zu posten.
-
Hallo Eric,
versuch es mal so:
Option Explicit
Sub as400_SQL()
Dim cnn As ADODB.Connection
Dim CallCmd As String
Dim SQL As String
Set cnn = New ADODB.Connection
'Verbindungsdaten
cnn.Open "Provider=IBMDA400;" & "Data Source=192.***.***.***;" & "User ID=*****;" & "Password=*****;"
'SqlStatement
SQL = "CREATE TABLE [MyTable] (" & _
"[FieldA] [int] NOT NULL , " & _
"[FieldB] [varchar] (30) NOT NULL)"
'.. ausführen
cnn.Execute SQL
' Verbindung schliessen
cnn.Close
End Sub
-
Lass aber vor allem die eckigen Klammern weg.
-
VielenDank, funktioniert
Hallo,
hab das jetzt so eingetippt und esklappt :
Sub as400_SQL()
Dim cnn As ADODB.Connection
Dim SQL As String
Set cnn = New ADODB.Connection
'Verbindungsdaten
cnn.Open "Provider=IBMDA400;" & _
"Data Source=192.***.***.***;" & _
"User ID=*****;" & _
"Password=******;"
'SqlStatement
SQL = "create table blabla.sql001(feld1 integer not null, feld2 varchar(15), primary key (feld1))"
'.. ausführen
cnn.Execute SQL
' Verbindung schliessen
cnn.Close
End Sub
Vielen Dank ERIC
-
Erweiterung
Hallo,
gibt es eine Möglichkeit vorab zu prüfen ob die Datei vorhanden ist und wenn nein, dann "create table ..." wenn ja dann z.B."insert into ..." ?
Vielen Dank.
ERIC
-
Dafür gibt es die Schema-Abfragen des Connection-Object's.
Man kann auch einfach per Try und Error einen Select lostreten, bei Fehler dann einen Create erstellen.
on error resume next
err.clear
set rcd = cnn.execute("select ...")
if err.number <> 0 then
' ggf. auch andere Fehler berücksichtigen
end if
-
Rückfrage
Hallo,
danke für die schnelle Antwort, ohne Abfrage "knallt" es beim 2.Lauf, denn die Tabelle ist ja schon da, dann:
Dim RCD As ADODB.Recordset oder?
und dann den Select, worauf ???
(select lib/file)
es lief durch und keine Fehlermeldung mehr, hatte :
...
'SqlStatement
SQL = "create table blabla.sql001(feld1 integer not null, feld2 varchar(15), primary key (feld1))"
'.. ausführen
on error resume next
err.clear
set rcd = cnn.execute("select blabla/sql001")
if err.number <> 0 then
SQL = "create table blabla.sql012(feld1 integer not null, feld2 varchar(15), primary key (feld1))"
'.. ausführen
cnn.Execute SQL
end if
' Verbindung schliessen
cnn.Close
End Sub
Eine sql012 gibt es leider nicht und auch keine Fehler ! Wo ist mein Fehler ?
Danke im Voraus ERIC
-
Wie beim Create muss auch der Select bei qualifizierter Benennung einen Punkt verwenden "libname.tblname".
Alternativ kannst du den CREATE ja genauso abfangen. Du bekommst in der err.Description einen Fehlercode geliefert.
Das CNN-Object enthält auch genauere SQLSTATE-Codes nach einem Fehler.
-
KOMM NICHT WEITER, WO IST MEIN FEHLER
Hallo,
vielen Dank für die Rückinfo, nur ich
komm da nicht weiter , kannst Du mir bitte mal den vollständigen Script geben ?
...
wenn "lib/sql001" vorhanden,
dann erstelle "lib/sql011", wenn "lib/sql011 vorhanden, dann EXIT
hab da hin und her probiert, über den Fehler läuft er, nur dann auch wenn "lib/sql011" vorhanden, keine Fehlermeldungen mehr.
Vielen Dank im voraus ERIC
-
 Zitat von Eric
wenn "lib/sql001" vorhanden,
dann erstelle "lib/sql011", wenn "lib/sql011 vorhanden, dann EXIT
warum machst du es nicht so:
1. lösche "lib/sql001" wenn vorhanden
cnn.Execute "DROP TABLE IF EXISTS lib.sql001"
2. erstelle "lib/sql001" neu
cnn.Execute "CREATE TABLE lib.sql001(...)"
-
"if exists" kennt die AS/400 nicht.
Ansonsten soll die Tabelle ja nur erstellt werden, wenn sie nicht da ist.
Also einfach einen CREATE ausführen, wenn der Fehler kommt, ist die Tabelle wahrscheinlich schon da.
Hierzu kann man dann per INSTR den SQL-Code aus der err.Description prüfen.
Similar Threads
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By jjagi in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 07-07-06, 08:29
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By Fritzchen in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-08-05, 08:42
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks