Software-Engineering Martin Fabiani

Sitemap (Navigation ohne JavaScript)

Impressum: Martin Fabiani, Röderbergweg 104, D-60485 Frankfurt, Tel: +49 (69) 49084808, E-Mail: info (at) fabiani.net, USt-IdNr: DE217298609

Tips und Tricks zu Perl

Datenbankzugriff mit Win32::ODBC

  1. ODBC-Eintrag per Skript im ODBC-Manager erstellen (Win32)

    1. Fuer MS-SQL-Server
      #!perl
      use strict;
      use Win32::ODBC; # ODBC-Modul fuer Win32 von Dave Roth einbinden.
      
      my $dsn = "mydsn";              # Namen des DSN-Eintrages im ODBC-Manager.
      my $dsnDescription = "testdsn"; # Beschreibung des DSN-Eintrages im ODBC-Manager.
      my $sqlServer = "mymachine";    # Hostname des SQL-Servers.
      my $database = "mydb";          # Name der Datenbank.
      my $uid = "";                   # eventuell Benutzername
      my $password = "";              # eventuell Passwort fuer Benutzer
      
      if (Win32::ODBC::ConfigDSN(
      			   ODBC_ADD_DSN, 
      			   "SQL Server",
      			   ( "DSN=$dsn",
      			     "DESCRIPTION=$dsnDescription",
      			     "SERVER=$sqlServer",
      			     "DATABASE=$database",
      			     "UID=$uid", "PWD=$password",  
      			     )
      			   )
          ){
          print ("DSN $dsn sucessfully created\n");
      }
      else {
          die ("ERROR: couldn't create DSN '$dsn': ".Win32::ODBC::Error()."\n");
      }
      
      
                      
      • Falls anstelle des Benutzer-DSN-Eintrags ein System-DSN-Eintrag erstellt werden soll, dann einfach ODBC_ADD_DSN durch ODBC_ADD_SYS_DSN ersetzen.
      • Falls der String $sqlServer leer ist, wird versucht, eine Verbindung zum Sql-Server der lokalen Maschine aufzubauen.
      • Die $dsnDescription ist fuer das Funktionieren des Scriptes recht unwichtig.

    2. Fuer MS-Access-Datei
      #!perl
      use strict;
      use Win32::ODBC; # ODBC-Modul fuer Win32 von Dave Roth einbinden.
      
      my $dsn = "mydsn";              # Namen des DSN-Eintrages im ODBC-Manager.
      my $dsnDescription = "testdsn"; # Beschreibung des DSN-Eintrages im ODBC-Manager.
      my $accessDir = "c:\\temp";     # Verzeichnis der Access-Datei
      my $accessFile = "mydb.mdb";    # Name der Accessdatei
      my $uid = "";                   # eventuell Benutzername
      my $password = "";              # eventuell Passwort fuer Benutzer
      
      if (Win32::ODBC::ConfigDSN(ODBC_ADD_DSN, "Microsoft Access Treiber", 
      			   ("DSN=$dsn", 
      			    "Description=$dsnDescription", 
      			    "DBQ=$accessDir\\$accessFile", 
      			    "DEFAULTDIR=$accessDir", 
      			    "UID=$uid", "PWD=$password"))){
          print "Successful!\n";
      }
      else{
          print "ERROR: Couldn't create dsn '$dsn': " . Win32::ODBC::Error() . "\n";
      }
                      
      • Falls anstelle des Benutzer-DSN-Eintrags ein System-DSN-Eintrag erstellt werden soll, dann einfach ODBC_ADD_DSN durch ODBC_ADD_SYS_DSN ersetzen.
      • Die $dsnDescription ist fuer das Funktionieren des Scriptes recht unwichtig.
      • Der Eintrag Microsoft Access Treiber kann je nach Windows/Office-Version und Sprache variieren. Am besten im ODBC-Manager in der Systemsteuerung (Win2000: ->Verwaltung) nachschauen, wie der Treiber genau heiszt.


Die Dokumentation zu Perl und den ODBC-Schnittstellen ist leider meistens recht schlecht. Viele Parameter musz man selbst herausfinden. Folgende Vorgehensweise kann die Arbeit ziemlich erleichtern:

  1. Im ODBC-Manager testweise eine ODBC-Datenquelle mit Namen Strat eintragen, und ueber die graphische Oberflaeche alles an Einstellungen vornehmen, was man braucht.
  2. Jetzt regedit ausfuehren, und in den richtigen Zweig wechseln. Der Name des Zweiges ist folgendermaszen:
    • System-DSN: HKEY_LOCAL_MACHINE\Software\ODBC
    • User-DSN:   HKEY_CURRENT_USER\Software\ODBC
    Dort befinden sich, je nach Windows-Version, meist mehrere Unterverzeichnisse. Die nach dem Namen Strat durchsuchen, und man ist dort, wo der Eintrag fuer die temporaere DSN namens Strat abgespeichert ist.
    Die Namen der Werte, die dort eingetragen sind, kann man nun mit Win32::ODBC::ConfigDSN verwenden. Z.B. befindet sich dort der Eintrag: Thrusted_Connection mit dem Wert Yes, dann wuerde das ConfigDSN folgendermaszen aussehen:
    if (Win32::ODBC::ConfigDSN(
    			   ODBC_ADD_SYS_DSN, 
    			   "SQL Server",
    			   ( "DSN=$dsn",
    			     "DESCRIPTION=$dsnDescription",
    			     "SERVER=$sqlServer",
    			     "DATABASE=$database",
    			     "UID=$uid", "PWD=$password",
    			     "Trusted_Connection=Yes",  
    			     )
    			   )
        ){
        print ("DSN $dsn sucessfully created\n");
    }
    
    
            

Letztes Update dieser Seite: Sunday, 16-Jan-2005 23:17:33 CET