ich soll als Aufgabe in meiner Ausbildung ein Perl Makro zu schreiben welches sich mit einer Datenbank verbinden soll (Bin absoluter Neuling im Umgang mit PERL). Leider kriege ich es nicht wirklich hin deswegen stelle ich hier mal die Frage ;-)
Das Perl Makro soll die Access 2007 Datenbank öffnen, den Import einer Datei ausführen und danach die Datenbank wieder schließen. Idealerweise soll noch eine Überprüfung stattfinden, die guckt ob ein gewissen Wert in der Tabelle überschritten wurde - sollte dies der Fall sein soll eine E-Mail an eine Adresse geschickt werden.
Leider bin ich im Internet nicht fündig geworden, ich hoffe hier kann mir jemand helfen.
Danke schonmal im vorraus!
renee
2010-02-07 14:55
User since 2003-08-04
13019
articles
Hallo Tobi,
als generellen Einstieg für die Anbindung von Datenbanken haben wir diesen Artikel.
Was meinst Du genau mit "Import einer Datei"? Wie sieht die Datei aus? Wie würde man den Import "manuell" machen? Muss man da direkt mit Access arbeiten, oder kann man beim Aufruf von Access einfach einen Dateinamen angeben?
1) Soll deine Anwendung auf Windows laufen?
2) Ist ODBC verwendbar?
Das sollte erst geklärt werden.
Ganz kurz und brutal:
Code (perl):
1234567
my$dsn="Datenbank";my$dbh= Win32::ODBC->new("DSN=$DSN");# zu Datenbank verbindenmy$sql="SELECT * FROM Tabellenname";# deine SQL-Abfrageif($db->Sql($sql_string)){# Abfrage war erfolgreich# dein weiterer Programmcode}$db->Close();# Verbindung zu Datenbank schließen
Packagebeilage:
Perl-Beispiele können bei Anfängern und Perl-Evangelisten üble Irritationen verursachen und Damian Conway zur Rettung des »Guten Perl-Programmierstils« auf den Plan rufen!
Ich gebe niemals Perl-Code an Psychopathen weiter. Die bekommen von mir BASIC.
Germanistikfreaks und grammatikalisch Zwanghafte verweise ich an Hans weiter.
+4 replies
renee
2010-02-07 15:04
User since 2003-08-04
13019
articles
Ich persönlich würde DBI mit DBD::ODBC verwenden. Dann lernt man gleich das "richtige" Modul kennen und bleibt portabler...
Portabler? DBD::ODBC setzt ODBC voraus, was unter Linux nicht immer gegeben ist, kostenpflichtig oder korrekt läuft.
Es kommt ja auf das System an, auf dem gearbeitet wird. Deswegen meine Fragestellung.
Packagebeilage:
Perl-Beispiele können bei Anfängern und Perl-Evangelisten üble Irritationen verursachen und Damian Conway zur Rettung des »Guten Perl-Programmierstils« auf den Plan rufen!
Ich gebe niemals Perl-Code an Psychopathen weiter. Die bekommen von mir BASIC.
Germanistikfreaks und grammatikalisch Zwanghafte verweise ich an Hans weiter.
+2 replies
renee
2010-02-07 15:39
User since 2003-08-04
13019
articles
Mit portabler meinte ich eher portabel zwischen DB-Systemen. Wenn man von Access auf MySQL umsteigt, dann ist es viel weniger Code, den man anpassen muss. Sorry für die Unklarheit...
hast schon recht, damit dass es sinnvoller ist, DBI zu verwenden wenn es Zieldatenbanken von verschiedenen Herstellern sind.
Nur war das ja im Grunde genommen nicht die Fragestellung des Posters.
Du hasr also schon Schritte weiter gedacht. ;)
Packagebeilage:
Perl-Beispiele können bei Anfängern und Perl-Evangelisten üble Irritationen verursachen und Damian Conway zur Rettung des »Guten Perl-Programmierstils« auf den Plan rufen!
Ich gebe niemals Perl-Code an Psychopathen weiter. Die bekommen von mir BASIC.
Germanistikfreaks und grammatikalisch Zwanghafte verweise ich an Hans weiter.
+5 replies
Funnybone
2010-02-07 15:23
User since 2010-02-07
8
articles
Erstmal danke für die ganzen Antworten, ich habe mir direkt mal mail:sender angeguckt und DBI + ODBC überschlagen.
@renee:
Eine Textdatei soll mit einer Importspezifikation in eine Datenbank eingefügt werden. Die Textdatei "test.txt" hat zB eine Zeile mit dem Inhalt "0000000Hallo0000000wie00000gehts0000". In der Datenbank wird dann mit der Spezifikation festgelegt die sagt welchen Teil der Zeile ich importieren will also nur "Hallo" "wie" und "gehts" und in welches Feld das ganze gepackt werden soll. Mit einem VBA Makro importiert Access dann den Inhalt der Datei also das "Hallo" "wie" gehts" in eine Tabelle.
Sieht mit dem VBA Makro so aus:
Code:
DoCmd.TransferText acImportDelim, "Name der Importspezifikation", "Name der Tabelle", ""
@GwenDragon:
Ja, ODBC ist möglich und es soll unter Windows laufen!
Danke für die schnellen Antworten :-)
+4 replies
renee
2010-02-07 15:30
User since 2003-08-04
13019
articles
Wenn der Import dann über ein VBA-Makro gemacht werden soll, dann musst Du Access richtig "fernsteuern". Da bietet sich das Modul Win32::OLE an.
Das Problem ist, dass das nur funktioniert wenn die Datenbank bereits offen ist - wie schreibe ich denn das sich die Datenbank öffnet und schließt anstatt das sie geöffnet sein muss?
Könnte ich mit win:32 ole zB auch sagen, dass Access eine Abfrage drucken soll?
+10 replies
renee
2010-02-09 10:41
User since 2003-08-04
13019
articles
Ja, mit Win32::OLE kann man auf alle Funktionalitäten der Anwendung zugreifen. Probier mal, Deine Aktionen mit dem Makrorekorder aufzunehmen. Und poste dann den VB-Code hier...
mit ActivePrinter wollte ich den Drucker festlegen den das Programm benutzt, leider nimmt er trotzdem nicht FreePDF sondern den normalen hier eingestellten Drucker :-(
Bin iwie ganz begeistert von Perl, ist ja echt cool was man so alles damit machen kann!
+8 replies
renee
2010-02-09 11:48
User since 2003-08-04
13019
articles
Bin mir jetzt nicht ganz sicher (kann es im Moment nicht testen), aber mach den Printout-Aufruf mal so:
Funktioniert leider nicht. Er gibt zwar keinen Fehler aus, gedruckt wird aber auch nichts.
Ansich funktioniert das Ganze übrigens wenn ich FreePDF XP als Standarddrucker eingerichtet habe - aber ich möchte den PDF Drucker nur für die Access Datei benutzen nicht immer als Standard anhaben.
+4 replies
renee
2010-02-09 13:13
User since 2003-08-04
13019
articles
Dann kann ich auch nur raten...
Ist der Name, den Du angegeben hast auch der Name wie er in der Systemsteuerung eingetragen ist?
Was wird denn im Fehlerfall angezeigt, wenn du sowas als Code nimmst:
Code (perl):
12345
$access->{DoCmd}->Printout({ ActivePrinter =>"FreePDF XP",},) or die Win32::OLE->LastError();
Packagebeilage:
Perl-Beispiele können bei Anfängern und Perl-Evangelisten üble Irritationen verursachen und Damian Conway zur Rettung des »Guten Perl-Programmierstils« auf den Plan rufen!
Ich gebe niemals Perl-Code an Psychopathen weiter. Die bekommen von mir BASIC.
Germanistikfreaks und grammatikalisch Zwanghafte verweise ich an Hans weiter.
Funnybone
2010-02-09 14:32
User since 2010-02-07
8
articles
Code:
Win32::OLE(0.1709) error 0x80020006: "Unbekannter Name" "ActivePrinter" in GetIDsOfNames for "Printout" at C:\Data\user\Desktop\druck.pl line 12.
Bezieht sich unbekannter Name auf den Drucker, oder auf "ActivePrinter"?
Wenns sich auf den Drucker bezieht ist es seltsam, denn der Name stimmt 1:1 überein..