![]() |
Datenbank: Acess • Zugriff über: ADO
Mit ADO ODBC auf AS400 zugreifen
Hallo zusammen,
ich habe das Problem, dass ich auf eine Datenbank zugreifen soll, das geht aber nicht! Durch das ADO Tutorial habe ich die Verbindung hinbekommen, das Funktioniert auch und ich kann über ADOConnection auch die FeldNamen des Tables lesen von dem ich die Daten will! Aber ob ich ADOQuery, ADOTable oder ADODataSet verwende es kommt immer die gleiche Fehlermeldung Zitat:
Kann sich da jemand einen Reim drauf machen? Wenn ich im ObejktInspektor CommandText anklicke kommt auch ein Auswahlfenster in dem ich die Tabelle (Table) und die Felder der SQL Abfrage eingeben muss/kann. Es besteht also eine Verbindung! Wie komme ich bloss an die Daten? Ihr merkt ich habe keine Ahnung, hoffentlich kann mir geholfen werden :) Gruß Stefan Hier ist mal mein Code!
Delphi-Quellcode:
unit uDb2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Button2: TButton; ADOConnection1: TADOConnection; Memo1: TMemo; Label2: TLabel; Button3: TButton; ADODataSet1: TADODataSet; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; myWako : TADOTable; const user : string = 'myUser'; passWord : string = 'myPassword'; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ADOConnection1.ConnectionString := 'Provider=MSDASQL;' +'Persist Security Info=False;' +'User ID='+user+';' +'Password='+passWord+';' +'Data Source=rhdbd_16;' +'EXTCOLINFO=1;' +'Driver=iSeries Access ODBC Driver;' +'Initial Catalog=VWWE400;' +'DBQ=C:\Programme\Borland\Delphi7\Projects\DB\AS400.mdb;' +'Mode=Read;'; Memo1.Lines.Append(ADOConnection1.ConnectionString); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if assigned(myWako) then begin myWako.Active := False; myWako.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if ADOConnection1.Connected then ADOConnection1.Close else ADOConnection1.Open(user,passWord); if ADOConnection1.Connected then Button1.Caption := 'DisConnect' else Button1.Caption := 'Connect'; end; procedure TForm1.Button2Click(Sender: TObject); var fieldNames: TStrings; begin memo1.Clear; fieldNames := TStringList.Create; ADOConnection1.GetFieldNames('WAKO', fieldNames); Label1.Caption := intToStr(fieldNames.Count)+' tFields in WAKO available'; Memo1.Lines.Clear; Memo1.Lines.AddStrings(fieldNames); fieldNames.Free; end; procedure TForm1.Button3Click(Sender: TObject); var indexList: TStrings; begin indexList := TStringList.Create; ADODataSet1.GetIndexNames(indexList); memo1.Lines.AddStrings(indexList); indexList.Free; end; end. |
Re: Mit ADO ODBC auf AS400 zugreifen
Ich sehe im Code nicht, das Du myWako instantiierst oder verwendest. Wo ist genau das Problem?
|
Re: Mit ADO ODBC auf AS400 zugreifen
Hallo,
was mir seltsam vorkommt ist Dein Connection-String. Was hat da eine Access-DB darin zu suchen, wenn Du auf eine AS400 zugreifen willst? Ich benutze schon seit Jahren folgenden Connectionstring zum Auslesen von Daten:
Delphi-Quellcode:
const
sVerbindIP= 'DRIVER=Client Access ODBC Driver (32-bit);'+ 'SYSTEM=%s;'+ 'DefaultLibraries=%s;'+ 'UserID=%s;'+ 'PASSWORD=%s;'; function MakeConStrODBC_400(const aIP, aLibrarie, aUser, aPass:String):String; begin Result:=Format(sVerbindIP, [aIP, aLibrarie, aUser, aPass]); end; // MakeConStrODBC_400 .... function TForm1.ConnectToDB():Bool; var IPZurAS400:String; begin //IPZurAS400:='127.0.0.1'; --> diesen Wert enstsprechend anpassen Result:=True; if AdoConnection1.Connected then AdoConnection1.Connected:=False; AdoConnection1.ConnectionString:=MakeConStrODBC_400(IPZurAS400, 'VWWE400', myUser, myPassword); try AdoConnection1.Connected:=True; except on E: Exception do begin MessageDlg(E.Message, mtError, [mbOk], 0); Result:=False; end; // on end; // try end; // TForm1.ConnectToDB |
Re: Mit ADO ODBC auf AS400 zugreifen
Wie schon von meinen Vorschreibern bemerkt:
AS400 und Access haben recht wenig miteinander zu tun. Falls die AS400 als Fileserver agieren sollte ist das eigentlich unerheblich. Falls der Zugriff über ODBC erfolgen sollte, ist mit der Einrichtúng des ODBC-Treibers eigentlich alle Arbeit getan. Man übergibt DSN, Passwort und User (falls überhaupt notwendig) und dann geht's los. Daß die ODBC-Treiber manchmal recht eigenwillig sind, steht auf einem anderen Blatt. Wieso wird eigentlich nicht der MS-Treiber genutzt? Die sollten Access eigentlich am besten kennen! Gruß K-H Edith: tippfehler |
Re: Mit ADO ODBC auf AS400 zugreifen
Danke für die Antworten!
Der entscheidende Durchbruch kam aber aus einem andren Forum: "NewSolutions für iSeries und AS/400" ich bekam dort gesagt: Zitat:
@alzaimar: das myWako ist noch ein überbleisel meiner rumprobiererei @Gollum: der Access.mdb eintrag entstand auch nur aus lauter verzweiflung und hat seinen Ursprung in dem VisualBasic Program das im Moment die DatenBank Anbindung macht. Mein Connection String OHNE die DBQ=...AS400.mdb funktioniert auf jeden Fall, jetzt. Also Danke nochmals, und ciao! |
Re: Mit ADO ODBC auf AS400 zugreifen
Ich weiß ja nicht welche Client Access Version du einsetzt, aber es gibt dort bei den neueren auch OLE-Treiber
Code:
Das "Default Collection" sorgt dafür, dass ein unqualifizierter Tabellen-Name in der dort angegebenen Bibliothek gesucht wird.
Provider=IBMDA400.DataSource.1;Persist Security Info=False;Data Source=AS400.Name;Default Collection=mylib
Gaaaaaaaaaaaanz wichtig: Immer das aktuelleste SP vom Client Access installieren! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz