@FLoH.tar et al
wahrscheinlich ist mein Weg nicht richtig:
ich möchte auf eine .dbf-Datei (Clipper,dbase) zugreifen, um die Daten in einem 1. Schritt per SELECT * FROM DATEI ausgeben zu können.
Bisher hab ich dafür aus awk mittels Konsolenprogramm "odbc" (http://www.spinellis.gr/sw/outwit/) einfach über den eingebauten odbc-Treiber auf die .dbf zugegriffen.
Ein Aufruf sieht bspw. folgendermaßen aus:
odbc "Driver={Microsoft dBase-Treiber (*.dbf)};DBQ=D:\home\op\Eigene Jobs\tneu\SRC\BEFO" "SELECT * FROM KUST"
Nun hab ich versucht, das in Perl zu realisieren; hier mal der Code zur freundlichen Begutachtung 😉:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 | #!perl
use warnings;
use strict;
use File::Copy;
use Win32::ODBC; # für eine ODBC-Verbindung mit KUST.DBF
# Netzverzeichnisvariablen
my $stammvz = "D:/home/op/Eigene Jobs/tneu/BEFODAT/"; # BEFO-QuellVerzeichnis
# Netzdateivariablen
my @kustfiles = qw/ KUST.DBF KUST2.DBF /;
# lokale Verzeichnisvariablen
my $maindir = "D:/home/op/Eigene Jobs/tneu/"; # lokales Hauptverzeichnis
my $befolocal = $maindir . "SRC/BEFO/"; # BEFO-ZielVerzeichnis
my $gps = $maindir . "SRC/GPS/"; # GPS-ZielVerzeichnis
# BEFO-Quelldateien nach lokal kopieren
foreach (@kustfiles) {
copy($stammvz . $_, $befolocal)
or warn "Kopieren von $_ fehlgeschlagen: $!";
}
# Verbindung mit KUST
my $dbpfad = "D:/home/op/Eigene Jobs/tneu/SRC/BEFO";
my $DSN = "Driver={Microsoft dBase-Treiber (*.dbf)};DBQ=$dbpfad";
my $db;
if (!($db = new Win32::ODBC($DSN))){
print "Error connecting to $DSN\n";
print "Error: " . Win32::ODBC::Error() . "\n";
exit;
}
my $SqlStatement = "SELECT * FROM KUST";
if ($db->Sql($SqlStatement)){
print "SQL failed.\n";
print "Error: " . $db->Error() . "\n";
$db->Close();
exit;
}
my %Data;
while($db->FetchRow()){
undef %Data;
%Data = $db->DataHash();
print $_;
}
$db->Close();
|
Ausgabe ist:
Use of uninitialized value $_ in print at first.pl line 49.
Ab Zeile 28 kapier ich die Sache nur noch schemenhaft, da ich natürlich alles per copy & paste gemacht hab.
Würd mich freuen, wenn mir jemand aus der Klemme helfen könnte.