Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Accessing old DBM file with DBI - "write permission"?

by punch_card_don (Curate)
on Mar 05, 2013 at 17:35 UTC ( #1021876=perlquestion: print w/ replies, xml ) Need Help??
punch_card_don has asked for the wisdom of the Perl Monks concerning the following question:

Mercurial Monks,

I'm having a little trouble with accessing an old DBM file using DBI.

We have an old DBM file:

data.pag data.dir
I simply want to see what's in it. Thought the DBI would be a good way, so:
#!/usr/bin/perl -w use strict; use warnings; use DBI; use CGI; use CGI::Carp qw(fatalsToBrowser); # start error output BEGIN { use CGI::Carp qw(carpout); carpout(*STDOUT); } print "Content-type:text/html\n\n"; my $db_name = 'data'; my $dbh = DBI->connect('dbi:DBM(RaiseError=1):'); my $sqlSelect = "SELECT * FROM $db_name"; my $sth = $dbh->prepare($sqlSelect) || die "Cannot prepare: " . $dbh-> +errstr(); $sth->execute() or die "Cannot execute: " . $sth->errstr(); while (my @data = $sth->fetchrow_array()) { print "<br>"; for my $i (0 .. $#data) { print ", $data[$i]\n"; } } $sth->finish;
But what I get is
Software error: DBD::DBM::st execute failed: Execution ERROR: No write permission to sdbm file at /bla/bla/bla/DBD/ +DBM.pm line 422. . at /bla/bla/bla/DBI/DBD/SqlEngine.pm line 1234. [for Statement "SELECT * FROM pmb_passwords_dbm"] at dumpmydbm.pl lin +e 26.
For the record - both the files are chmod'd 755.

Now, I was previously getting the error "no lck file" - so I simply created an empty data.lck file and that seemed to shut that up.

What's up?

Thanks.




Time flies like an arrow. Fruit flies like a banana.

Comment on Accessing old DBM file with DBI - "write permission"?
Select or Download Code
Replies are listed 'Best First'.
Re: Accessing old DBM file with DBI - "write permission"?
by punch_card_don (Curate) on Mar 05, 2013 at 18:38 UTC
    On the other hand, this works:
    #!/usr/bin/perl -w use warnings ; use strict ; use DB_File ; my %h; unlink "data" ; tie %h, "DB_File", "data", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cann +ot open file 'data': $!\n"; print "Content-type:text/html\n\n"; foreach my $key (sort keys %h) { print "<br>$key -> $h{$key}\n"; }
    But I get an empty result, no output. (Possible that's what's in the file, I suppose, but seems odd for a 65kb file.)



    Time flies like an arrow. Fruit flies like a banana.

      Maybe you could try to create an empty DBM file and see how big it is on your system.

        In themeantime, I found a filepath that was wrong - so now this version works perfectly. Outputs 200 lines of pairs, as sort of expected.

        So, my needs have been solved - just the mystery of the DBI version for information left.




        Time flies like an arrow. Fruit flies like a banana.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1021876]
Approved by ww
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (11)
As of 2015-07-28 18:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (258 votes), past polls