PDA

View Full Version : Teildatei erstellen



Jabs
08-12-06, 08:31
Hallo NG,
ich möchte mit einem Windows- Programm über ADO.NET Daten an unsere Buchhaltung (SoftM DKS) übergeben. Ich nutze dafür den Oledb- Provider IBMDA400. Die Daten müssen in eine Datei mit dem Namen 'S8' geschrieben werden. In der DKS wird ein Übernahmeprogramm durchgeführt, welches die Daten aus der S8 importiert. Danach sind alle Teildateien aus S8 entfernt. Versuche ich jetzt neue Daten in die S8 zu schreiben kommt eine Meldung 'S8 in Firmenbibliothek F10 ungültig'. Bisher habe ich immer eine Batch- Datei mit folgendem Befehl vor der Datenübergabe aufrufen lassen :'RMTCMD ADDPFM FILE(F10/S8) MBR(PIORENT) /Z'. Das fand ich nicht besonders schön, hat aber funktioniert. Jetzt wollen wir unsere Windowsanwendung über Windows-Terminalserver betreiben und das RMTCMD funktioniert dort nicht. Kann ich die Teildatei auch über den Oledb- Provider anlegen (stored procedure o.ä.) oder kann ich irgendwie anders auf die AS400- Datei zugreifen oder habe ich Client Access auf dem TS falsch installiert?
cu
Hendrik

Fuerchau
08-12-06, 10:31
Du kannst dies als vorhandenen Prozedur in SQL aufrufen:

CALL QSYS.QCMDEXC ('MYCMD' format$(5, "0000000000.00000")

Alternativ über eine deklarierte QCMDEXC-Prozedur (im Forum gibts entsprechende Beispiele mit CALL QCMDEXC in SQL.)

Jabs
11-12-06, 15:35
Hallo und Vielen Dank für die schnelle Antwort.
Ich habe am Freitag noch ewig rumprobiert, aber bekomme immer wieder Fehlermeldungen.
Ich habe mein Problem vorerst über ftp gelöst:
- Verbindung aufbauen
- 'quote rcmd addpfm usw.' absetzen
- Verbindung schließen
Das iSeries- Information-Center ist nicht besonders ergiebig bei 'QCMDEXC'.
cu
Hendrik

Fuerchau
11-12-06, 15:54
In folgendem Beitrag (am Ende) findest du alles:

http://www.rlpforen.de/showthread.php?t=9983&highlight=qcmdexc+sql

Jabs
11-12-06, 16:32
Hallo,
ich habe z.B. folgende Meldungen auf der Befehlszeile (bekomme ich über den Oledb- Provider auch).
Vorherige Befehle und Nachrichten:

> call qcmdexc('addpfm file(f10/s8) mbr(piorent)',0000000032.00000)
Zeichen ',' nach Zeichenfolge ''addpfm fi' ist ungültig.
Fehler in Befehl *N gefunden.
> call qcmdexc('addpfm file(f10/s8) mbr(piorent)', 0000000032.00000)
Zeichen ',' nach Zeichenfolge ''addpfm fi' ist ungültig.
Fehler in Befehl *N gefunden.
> call qcmdexc('addpfm file(f10/s8) mbr(piorent)' 0000000032.00000)
Schlüsselwort QCMDEXC für diesen Befehl ungültig.
Fehler in Befehl CALL gefunden.

Habe ich was falsch verstanden?
cu
Hendrik

Fuerchau
11-12-06, 17:00
Schu die den Link genau an.
Hast du die Prozedur erstellt ?
Erstelle dir ein Command-Objekt mit "call qtemp.qcmdexc(?, ?)" und fülle den 1. parameter mit dem Kommando und den 2. Parameter mit der Länge:

MyCmd.CommandText = "call qtemp.qcmdexc(?, ?)"
MyCmd(0) = "das kommando"
myCmd(1) = len(MyCmd(0))
MyCmd.Execute

Jabs
12-12-06, 07:59
Guten Morgen,
Vielen Dank noch einmal. Ich habe es noch einmal versucht und es funktionierte sofort.


Public Sub ExecuteCommand(ByVal cmd As String)

cmd = String.Format("call qsys.qcmdexc('{0}', {1})", cmd, _
Format(Microsoft.VisualBasic.Len(cmd), _
"0000000000\.") & "00000")
Dim c As New OleDb.OleDbCommand(cmd, _conn)
Debug.Print(c.CommandText)
Try
c.ExecuteNonQuery()
Debug.Print("Command ausgeführt")
Catch ex As Exception
MsgBox("Fehler: " & ex.Message & Chr(13) & Chr(13) & _
ex.ToString)
End Try

End Sub Der Tag ist gerettet.
cu
Hendrik