Anmelden

View Full Version : Insert into über Verbindungsserver



Seiten : [1] 2

Ha__Pe
17-09-10, 10:10
Hallo zusammen,

da dies mein erster Artikel ist möchte ich mich kurz vorstellen.

Ich heisse HaPe bin 47 Jahre alt und seit vielen Jahre Windows Softwareentwickler.

Seit kurzem arbeite ich in einer Firma die mit einer AS400 arbeitet:
Version V6R1

Ich habe über einen MS-SQL 2005 einen Verbindungsserver [BioLab] erstellt. Select Statements sind problemlos möglich.

Die Insert Statemants erzeugen Fehlermeldungen.
Sofortiges Commit ist eingeschaltet.
Hier meine Versuche mit Fehlermeldungen:

Insert into [BIO].[S06237C4].[BIOLAB].[AUFTRG] (AUFNR) values (' 1')
Fehlermeldung:
[IBM][System i Access ODBC-Treiber][DB2 für
i5/OS]SQL7008 -
AUFTRG in BIOLAB für Operation ungültig

Declare @test varchar(5)
Set @test = ' 1'
INSERT INTO Openquery([BIO], 'SELECT AUFNR FROM [BIO].[S06237C4].[BIOLAB].[AUFTRG]')
Select @test

Fehlermeldung:
[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token [ ungültig. Gültige Token:
( NEW FINAL TABLE LATERAL <IDENTIFIER>

Ich bin für jede Hilfe dankbar

Gruß HaPe

Fuerchau
17-09-10, 10:30
Zu Problem 1:
SQL7008 kommt dann, wenn die Tabelle nicht im Journal aufgezeichnet ist.
Du musst in der DSN-Beschreibung Commit mit *NONE definieren.

Zu Problem 2:
Eckige Klammern werden nur von SQL-Server oder Access unterstützt.
SQL-Standard sind Anführungszeichen.
Die kannst du allerdings weglassen, wenn alle Namen in Großbuchstaben angegeben werden bzw. auf der AS/400 so definiert sind (Groß/Klein spielt dann keine Rolle).

Zu Problem 3:
Die AS/400 akzeptiert keinen Insert auf ein Select-Statement, du musst hier tatsächlich Insert-Statements verwenden.

Ha__Pe
17-09-10, 11:05
@Fuerchau
Danke für Deine Antwort.

zu 1.
Commit mit *NONE ist eingetragen

zu 2.
Ohne Eckige Klammern funktonieren beide Statements auch nicht.

zu 3.
Verstehe ich so, dass nur der erste Insert Befehl funktioniert?

Gruß HaPe

Fuerchau
17-09-10, 11:10
Es ist richtig, dass nur die direkte Insert-Variante funktioniert.
Der SQL-Server übersetzt den SQL-Befehl in die AS/400-Syntax (macht der ODBC-Treiber).

Allerdings weiß ich nicht, wie dem SQL-Server beigebracht werden kann ohne Transaktionen zu arbeiten.

Sofortiges Commit ist die Einstellung für den Verbindungs-Server.

COMMIT=*NONE wird über die ODBC-Konfiguration eingestellt.

Ha__Pe
17-09-10, 13:09
@Fuerchau

Sofortiges Commit kann ich leider auf dem Verbindungsserver leider nicht finden /einstellen.

Wenn ich ein Insert Statement absetze bekomme ich folgende Fehlermeldung:
Insert into BIO.S06237C4.BIOLAB.AUFTRG (AUFNR) values ('1')

Fehler:
AUFTRG in BIOLAB für Operation ungültig.

Wobei Biolab die Bibliothek und Auftrg die Tabelle ist.

Muss da in der AS400 noch irgendwas frei gegeben werden?

Gruß HaPe

Fuerchau
17-09-10, 13:53
Wenn das wieder der SQL-Fehler 7008 ist, hast du leider auf diesem Wege keine Chance.

Bist du sicher, dass du die DSN ohne Commit definiert hast ?

Wichtig zu wissen ist folgendes:
Der SQL-Server übernimmt die DSN-Einstellungen in seine Verbindungsfolge.
Prüfe mal, ob da "CMT=0;" drinn steht und korrigiere das ggf.
Eine nachträgliche Änderung der DSN kann nur übernommen werden, wenn auch die Verknüpfung neu erstellt wird.

BenderD
17-09-10, 14:23
... wobei es allerdings sinnvoller wäre, der AS/400 Commit beizubringen, sprich: die Tabellen ans Journal hängen. Es gibt da keinerlei Vernunftsgründe, das nicht zu tun, ganz im Gegenteil!!!

D*B


Allerdings weiß ich nicht, wie dem SQL-Server beigebracht werden kann ohne Transaktionen zu arbeiten.

dabeda
18-09-10, 06:05
Allerdings weiß ich nicht, wie dem SQL-Server beigebracht werden kann ohne Transaktionen zu arbeiten.

insert into tabelle values(1, 2, 3) with nc

sollte gehen.

Ha__Pe
20-09-10, 08:06
@dabeda

??? with nc

wo hast Du denn dieses Kommando her?

Es gibt weder einen "nc" noch einen "no commit" noch einen "nocommit" Befehl.

Oder habe ich da etwas übersehen?

Gruß HaPe

dabeda
20-09-10, 08:19
Moment, du kommst von MS-SQL, das hab ich übersehen, um 7 Uhr in der Früh kann sowas vorkommen. :o
with nc wirds dort nicht geben, denke das ist rein AS400.
Sorry.

Mfg