AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mit ADO ODBC auf AS400 zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Mit ADO ODBC auf AS400 zugreifen

Ein Thema von alf.stefan · begonnen am 19. Mai 2010 · letzter Beitrag vom 19. Mai 2010
Antwort Antwort
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 07:56
Datenbank: Acess • Zugriff über: ADO
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:
[IBM]iSeries Access ODBC-Treiber][DB2 UDB]SQL0204 - WAKO der Art *FILE in myUser nicht gefunden
Wobei WAKO der Table ist und myUser der User (??) der sich mit Passwort connected!
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 10:44
Ich sehe im Code nicht, das Du myWako instantiierst oder verwendest. Wo ist genau das Problem?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 11:39
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 12:45
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#5

Re: Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 14:15
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:
Wie immer das selbe Problem:
Wenn ich unqualifizierte Abfragen mache, wird die Table in der Lib des angemeldeten Users gesucht.
Möchte ich eine bestimmte tabelle abfragen muss ich den namen qualifizieren:

select * from mylib.mytable ...

@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!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Mit ADO ODBC auf AS400 zugreifen

  Alt 19. Mai 2010, 15:16
Ich weiß ja nicht welche Client Access Version du einsetzt, aber es gibt dort bei den neueren auch OLE-Treiber
Code:
Provider=IBMDA400.DataSource.1;Persist Security Info=False;Data Source=AS400.Name;Default Collection=mylib
Das "Default Collection" sorgt dafür, dass ein unqualifizierter Tabellen-Name in der dort angegebenen Bibliothek gesucht wird.

Gaaaaaaaaaaaanz wichtig: Immer das aktuelleste SP vom Client Access installieren!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz