| Perl-Basics | Perl-Enhanced | ||
|---|---|---|---|
Tips und Tricks zu Perl
Datenbankzugriff mit Win32::ODBC
- ODBC-Eintrag per Skript im ODBC-Manager erstellen (Win32)
- 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.
- 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.
- Fuer MS-SQL-Server
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:
- Im ODBC-Manager testweise eine ODBC-Datenquelle mit Namen Strat eintragen, und ueber die graphische Oberflaeche alles an Einstellungen vornehmen, was man braucht.
- 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
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"); }