Toon posts:

[.Net] AS/400 ODBC

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb Client Access van IBM geinstalleerd daarmee is ook de ODBC driver geinstalleerd om verbinding te maken met de AS/400. Op de AS/400 draait het ERP pakket Mapics, de bedoeling is om deze gegevens uit te lezen.

Ik maak gebruik van Visual Studio .Net. Als ik nu een nieuwe ODBCDataAdapter toevoeg volg ik de wizard, ik maak een nieuwe connectie, maak een System DSN aan naar de AS/400.

Dit gaat allemaal goed en ik kan de tabellen en de libraries zien. Ik kan via de Query Builder ook query opbouwen. Maar als ik in mijn programma de DataSet wil vullen krijgen ik wel de numerieke velden te zien alleen bij de andere velden staat er: "Byte[]Array".

Nu blijkt dat deze velden "binaire" velden zijn, is het mogelijk dat de ODBC koppeling deze velden al converteert naar gewone tekst?

mvg


Henro

sorry klikfout... verkeerde forum... bedoelde Webscripting en Programmeren

[ Voor 7% gewijzigd door Verwijderd op 14-10-2004 15:34 ]


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 03-04 13:23
Wil je perse ODBC gebruiken ?? Ik gebruik zelf (vanuit VBA) een ADODB.connection.

met onderstaande :

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset


cn.Provider = "IBMDA400"
cn.Properties("Convert Date Time To Char") = "FALSE"
cn.Properties("Force Translate") = 0
cn.Open "Data Source=SYSNAME;", "USER", "PASS"

[ Voor 50% gewijzigd door Bud_s op 14-10-2004 15:42 ]


Verwijderd

Topicstarter
[bud_s]
Visual Basic A. Waar staat A voor?
Heb jij toevallig ook gewerkt met Mapics?

Weet je toevallig ook hoe je vanuit C# .Net een ADODB Connectie aanmaakt voor een AS/400?

grtn
Henro

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10-04 07:30

Freee!!

Trotse papa van Toon en Len!

Dit klinkt bijna alsof de AS/400 met een Double Byte Character Systeem (DBCS) draait, een zeldzaamheid in Europa.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 03-04 13:23
Verwijderd schreef op 14 oktober 2004 @ 15:42:
[bud_s]
Visual Basic A. Waar staat A voor?
A staat voor Applications, zit dus in Word en Excel , is een geknipte versie van VB zeg maar.
Verwijderd schreef op 14 oktober 2004 @ 15:42:
[bud_s]
Heb jij toevallig ook gewerkt met Mapics?

Weet je toevallig ook hoe je vanuit C# .Net een ADODB Connectie aanmaakt voor een AS/400?
Nee, en Nee, maar als jij straks weet hoe het in C# .Net werkt, wil ik het ook wel weten :)

* Bud_s moet nog eens aan de gang met .Net

Verwijderd

Topicstarter
[Mr. Liu]

Enig idee of deze karaktercode om te zetten is via een ODBC koppeling. Of eventueel via een ander koppeling?

Zou een ander karakterset het probleem kunnen verhelpen?

[ Voor 20% gewijzigd door Verwijderd op 14-10-2004 16:20 ]


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10-04 07:30

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 14 oktober 2004 @ 15:58:
[Mr. Liu]

Enig idee of deze karaktercode om te zetten is via een ODBC koppeling. Of eventueel via een ander koppeling?

Zou een ander karakterset het probleem kunnen verhelpen?
Bij de ODBC-koppeling moeten de charactersets aan beide kanten goed gedefiniëerd worden.

Een klein bijkomend probleem, wat een aantal mensen nog wel eens over het hoofd willen zien, is dat de AS/400 net als alle andere grotere IBM-machines EBCDIC gebruikt in plaats van ASCII.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 02:15

crisp

Devver

Pixelated

Dit mag inderdaad wel in Programming & Webscripting :)

oh, en groetjes hoeven niet op GoT

Webdesign & Graphics >> Programming & Webscripting

Intentionally left blank


Verwijderd

Topicstarter
Kan iemand mij op weg helpen met het goed instellen van ODBC
Ik heb bij de ODBC koppeling bij het Tabblad "Conversie" ook "Binaire gegevens omzetten naar tekst" aangevinkt maar zonder succes.

Ik zag dat je bij uitgebreid ook .dll kunt laden voor conversie. Zijn er .dll's die zulke conversies uitvoeren.

Ik heb het nu met C# .net en Visual Basic .Net geprobeert maar nog steeds geen succes.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Zit bij de client access niet de .NETprovider voor de ibm systemen? hij wordt iig al wel meegeleverd bij db2 installaties en client access for db2

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 08-04 12:26
System.Text.Encoding.* misschien ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Numerieke waarden worden nu goed getoond. Probleem is nu dat tekst velden als binair worden weergegeven ipv tekst. Wat kunnen we hieraan doen?
Dit gebeurd ook wanneer we de tabel vanaf de AS/400 importeren in access.

In de instellingen hebben we vanalles al geprobeerd. Is er een mogelijkheid een conversie dll of iets dergelijks te gebruiken?

Note: Client Access is niet volledig geinstalleerd. Alleen ODBC en ondersteuning voor DB2 is geinstalleerd.

Verwijderd

Topicstarter
Tabellen met het ccsid 37 kunnen we nu goed uitlezen.
Echter, tabellen met het ccsid 65535 (standaard Mapics) niet.

Via een odbc-koppeling is onze pc verbonden met de AS/400.

Is het mogelijk dat we via de odbc-koppeling een vertaling instellen dat de gegevens worden omgezet naar het ccsid 37 zodat we deze kunnen lezen?

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 10-04 07:30

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 20 oktober 2004 @ 11:51:
Tabellen met het ccsid 37 kunnen we nu goed uitlezen.
Echter, tabellen met het ccsid 65535 (standaard Mapics) niet.
Aaaargh 7(8)7 |:( daar had ik aan moeten denken 7(8)7 |:(
CCSID 65535 wordt inderdaad niet vertaald.
Via een odbc-koppeling is onze pc verbonden met de AS/400.

Is het mogelijk dat we via de odbc-koppeling een vertaling instellen dat de gegevens worden omgezet naar het ccsid 37 zodat we deze kunnen lezen?
Ik denk dat je dit op de AS/400 zelf op moet lossen. Ik ken Mapics niet, maar ik kan me nauwelijks voorstellen dat Mapics er problemen mee heeft als de tabellen CCSID 37 gebruiken.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
Ik denk dat je dit op de AS/400 zelf op moet lossen. Ik ken Mapics niet, maar ik kan me nauwelijks voorstellen dat Mapics er problemen mee heeft als de tabellen CCSID 37 gebruiken.
Dat Mapics er waarschijnlijk geen problemen mee heeft dachten wij ook. Helaas mochten wij dit niet veranderen.

Gelukkig hebben we nu een oplossing! .. Tijdens de query vanaf onze c# .NET appl. geven we aan dat de data moet worden geconverteerd naar CCSID 37.

query:
SELECT VARCHAR(TESTLIB.POMAST.ORDNO, 7, 37) AS ORDERNR, VARCHAR(TESTLIB.POMAST.VNDNR, 6, 37) AS LEVERANCIER
FROM TESTLIB.POMAST, TESTLIB.POITEM
WHERE TESTLIB.POMAST.ORDNO = TESTLIB.POITEM.ORDNO AND (TESTLIB.POITEM.ITNBR = 'AA0001')

Tussen de haakjes bij "VARCHAR" geven we als eerste de veldnaam op, dan de veldlengte, en als laatste de gewenste (!) CCSID. En dat werkt.
We krijgen nu de juiste data in de datagrid.

Bedankt voor de hulp!

  • ruthger
  • Registratie: September 2000
  • Laatst online: 22-11-2024
Misschien kun je het via de OLE DB connection string oplossen. Kijk vooral naar Force Translate.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{

string strConn = "Provider=IBMDA400.DataSource.1;Persist Security Info=False;
User ID=soft;Data Source=xxx.xxx.xxx.xxx;Protection Level=None;
Initial Catalog='';Transport Product=Client Access;SSL=DEFAULT;
Force Translate=65535;Default Collection='';Convert Date Time To Char=TRUE;
Catalog Library List='';Cursor Sensitivity=3";

string strSQL = "SELECT CSTNAM, CSTAD1, CSTAD2, CSTCTY FROM LibraryName.CUSTMSTR";

OleDbConnection conn = new OleDbConnection(strConn);

DataSet dtSet = new DataSet();

OleDbDataAdapter dtAdr = new OleDbDataAdapter(strSQL,conn);

dtAdr.Fill(dtSet,"Temp");

DataGrid1.DataSource = dtSet.Tables[0].DefaultView;

DataGrid1.DataBind();

conn.Dispose();

}

[ Voor 12% gewijzigd door ruthger op 20-10-2004 16:48 ]

Veni, vidi et cervesiam

Pagina: 1