Schrift
[thread]12520[/thread]

DBI:Xbase unter Windows defekt?



<< >> 4 Einträge, 1 Seite
Gast Gast
 2008-09-19 22:36
#114801 #114801
Hi,
ich versuche mit dem Perl-Modul DBI:Xbase eine dbase Datei einzulesen.
Unter Windows mit dem Modul über ActiveState ist das nicht ans laufen zu bekommen. Mein Code läuft unter Linux einwandfrei.
Den Fehler den ich bekomme:
Code: (dl )
1
2
3
4
5
6
7
> "perl" dbase_test.pl
Scalar value @fret[$i-1] better written as $fret[$i-1] at C:/Perl/site/lib/XBase.pm line 498.
Scalar value @fret[$i-1] better written as $fret[$i-1] at C:/Perl/site/lib/XBase.pm line 500.
Scalar value @fret[$i-1] better written as $fret[$i-1] at C:/Perl/site/lib/XBase.pm line 503.
Useless use of hash element in void context at C:/Perl/site/lib/XBase.pm line 537.
Useless use of private variable in void context at C:/Perl/site/lib/XBase.pm line 537.
Can't locate object method "new" via package "XBase" at C:/Perl/site/lib/DBD/XBase.pm line 327.


In der XBase.pm steht in einer Funktion wo der Fehler auftritt dann z.B. sowas:
Code (perl): (dl )
1
2
3
4
5
# The following function DOES NOT WORK and just represents a stupid snapshot
# of my code to atleast write into existing records :-)
# Left here since I was too lazy to remove it.

sub set_field {


Kennt jemand das Problem, bzw. wie es zu beheben ist? Ich glaub fast es ist mittlerweile nicht mehr ratsam Perl zu verwenden...
renee
 2008-09-19 23:41
#114802 #114802
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*) Wie sieht Dein Code aus?
*) Warum sollte es nicht mehr ratsam sein Perl zu verwenden?
*) Ich würde vielleicht keine Module verwenden, die schon 12 Jahre alt sind
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/
Gast Gast
 2008-09-20 04:27
#114805 #114805
Cpan sagt, das Modul ist von "24-Jan-1996 05:48". Das ist sehr alt!
DBD::Xbase ist von "21-Nov-2003 14:14"

Sachen wie: "@fret[$i-1]=Xbase::read_memo($self, $memo);"
macht man nicht so. (wenn man das überhaupt jemals so gemacht hat)

Ohne die Verwendung von "warnings" sollte es ohne störende Ausgaben funktionieren bis zum Aufruf DBD::Xbase->new funktionieren.

Wie es aussieht greift DBD::Xbase.pm auf Xbase.pm zurück ...

Und irgend was macht auch das Script nicht so ganz richtig. Denn die Funktion "new" gibt es seit mindestens 2000 nicht mehr im Modul DBD::Xbase
Darum schlägt auch der Aufruf fehl, und das Script bricht ab.

Das Script und die Pakete brauchen scheinbar mal eine Überholung...
Alternativ könne man auch eine ältere Version von Perl benutzen ...
Gast Gast
 2008-09-20 13:57
#114813 #114813
Hi,
hier mal mein Testprogramm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;
use DBI;
use XBase;

#my $dbf_directory = '/home/thomas/dbase';
my $dbf_directory = 'H:/db';
my $data_source_name = 'DBI:XBase:' . $dbf_directory;

my $dbh = DBI->connect($data_source_name) or die $DBI::errstr;

my $select_sth = $dbh->prepare('SELECT * FROM SUBBLK.DBF')
or die $dbh->errstr;

$select_sth->execute or die $select_sth->errstr;

while(my @row = $select_sth->fetchrow_array) {
        for (my $i = 0; $i < 25; $i++)  {
                print "$i: $row[$i] \n";
        }
}


Ich habe auf Windows wie auf Linux die Perl-Version 5.8.8. Unter Windows habe ich das Modul über ppm, unter Linux (Debian) über apt installiert.

Die Dateien /DBD/XBase.pm sind auf beiden Systemen identisch, die XBase.pm im übergeordneten Verzeichnis sehen völlig anders aus.

Ich habe mal stumpf die XBase.pm von meinem Linux auf Windows kopiert, und siehe da, es funktioniert!
Kann man das irgendwo melden, dass bei ppm mit diesem Modul irgendwas nicht stimmt?
<< >> 4 Einträge, 1 Seite



View all threads created 2008-09-19 22:36.