Schrift
[thread]3700[/thread]

DBI und MS-Access Verbesserungsmöglichkeiten

Leser: 1


<< >> 5 Einträge, 1 Seite
AndreasM
 2006-07-10 16:09
#34503 #34503
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen!

Ich habe hier ein Skriptfragment, das mir Probleme macht.
Prinzipiell geht es um folgendes: Ich bekomme regelmässig eine Accessdatenbank von einem Kunden.
Aus dieser Accessdatenbank wird eine Abfrage gelesen und exportiert. Die Weiterverarbeitung der Daten erfolgt immer gleich.
Diesen Job im ganzen möchte ich automatisieren.
Der Zugriff auf die Accessdatenbank gelingt mir, Export klappt auch. (Nebenbei: 140 000 Datensätze in 10-15 Minuten. Ist auch etwas von Netztraffic abhängig, denn ich arbeite nicht lokal. Ist das performacetechnisch ok, oder gibt es Tuningmöglichkeiten??)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use warnings;
use strict;
use DBI;

# 1. Mit der Access-Datenbank verbinden
my $dbh = DBI->connect('dbi:ODBC:driver=microsoft access driver (*.mdb);dbq=C:\\Muster.mdb');

#2. SQL-Statment vorbereiten und ausführen
my $sqlstatement="SELECT verschiedene_Felder FROM Ansprechpartner INNER JOIN PersStammdaten ON Ansprechpartner.StSchlNr = PersStammdaten.SchlNr";
my $sth = $dbh->prepare($sqlstatement);
$sth->execute ||
die "Konnte SQL Abfrage nicht ausführen ... vielleicht ungültig?";


#3. Ergebnis ausgeben
my @row_ary = $sth->fetchrow_array;
open AUSGABE, ">Muster.txt";
print AUSGABE "verschiedene_Felder\n";
while ( @row_ary = $sth->fetchrow_array ) {
print AUSGABE join(";",@row_ary),"\n";
}
close AUSGABE;
$dbh->disconnect;


Was mich noch etwas stört: Ich würde gerne die Titelzeile mit ausgeben.
Im Moment behelfe ich mir, in dem ich einfach mit "print AUSGABE "verschiedene_Felder\n";
alle im SQL-Staement ausgegebenen Felder ausdrucke. Das funktioniert, aber wenn ich mal das SQL-Statement ändere muss ich diese Änderung zweimal vornehmen, nämlich einmal im SQL-Statement an sich und dann in der besagten Zeile "print AUSGABE "verschiedene_Felder\n";
Das möchte ich vermeiden. Gibt es eine Möglichkeit die Abfrage so abzusetzen, dass eine Titelzeile quasi mit ausgegeben wird?

Grüße
AndreasM\n\n

<!--EDIT|AndreasM|1152533414-->
renee
 2006-07-10 16:33
#34504 #34504
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
print AUSGABE join(";",@{$sth->{Name}}),"\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2006-07-11 01:32
#34505 #34505
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Zu dem Text: Du kannst den Tabellennamen natürlich in eine Variable packen. Die kannst du dann einmal zu Beginn im Script nach Wunsch belegen.
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2006-07-12 14:54
#34506 #34506
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
while ( @row_ary = $sth->fetchrow_array ) {

durch:
Code: (dl )
while( my $dataHRef = $sth->fetchrow_hashref() ) {

dann hast du die "Zeile" in einer Hashreferenz, deren Keys die Feldnamen sind, z.B.
Code: (dl )
1
2
3
4
5
while( my $dataHRef = $sth->fetchrow_hashref() ) {
foreach my $fieldname (sort keys %$dataHRef) {
print "$fieldname => '$dataHRef->{$fieldname}'\n";
} # foreach
} # while
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2006-07-12 15:06
#34507 #34507
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wobei Du dann die Reihenfolge verlierst, während mit $sth->{Name} die Reihenfolge wie in der Abfrage erhalten bleibt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 5 Einträge, 1 Seite



View all threads created 2006-07-10 16:09.