in reply to Re^2: DBI::DBM - How to use this for SQL connection
in thread DBI::DBM - How to use this for SQL connection

For testing better use the default current working directory. Anyway the Perl dir from your example is not a good choice. ("f_dir" expects a path to the "database").

A quick example (not a style guide!):

The first script will create 3 files: "users.dir", "users.lck" and "users.pag", in the current dir.

The dbm-create.pl script example:

#!/usr/bin/perl -w use strict; use DBI; my $dbh = DBI->connect('dbi:DBM:') or die "Can't connect to $DBI::errstr"; my $sql_create = 'CREATE TABLE users ( username TEXT, phone TEXT )'; $dbh->do($sql_create); $dbh->do( "INSERT INTO users VALUES ('user1', '123-321123')" ); $dbh->disconnect;

The dbm-select.pl script example:

#!/usr/bin/perl -w use strict; use DBI; my $dbh = DBI->connect('dbi:DBM:') or die "Can't connect to $DBI::errstr"; my $sql = "SELECT username, phone FROM users"; my $sth = $dbh->prepare($sql) or die "Can't prepare statement: $DBI::errstr"; $sth->execute(); while ( my $rec = $sth->fetchrow_hashref('NAME_lc') ) { print $rec->{username}, ' : ', $rec->{phone}, "\n"; } $dbh->disconnect;

Replies are listed 'Best First'.
Re^4: DBI::DBM - How to use this for SQL connection
by Anonymous Monk on Apr 06, 2011 at 08:48 UTC

    Thanks for the info.. But i already have a database authenticated. When i open a .sql file, it goes for server check with windows authentication, then the shows the query results.

    So do i need to provide any information on server info in .SQL file or perl script?

    And as per the ur info and also the error i get, can i run my select query directly. Bcos, i receive the error usr.lck does not exist. Does it mean, i need to create these 3 files first using create query(my table is already there in DB)?

    From ur DBM Select script, i don't see the .sql file or Database reference in the script. As my perl & .sql are in same folder, is above script fine to be run with same code u provided

      Usualy files with '.sql' extension are plain text files containing SQL commands. Regarding DBD::DBM, there is no server involved in the process, just "DBM files stored in binary format".

      So if you have files named usr.* you ca try using 'usr' as the table name.

        Thanks really for ur help. As when i open my file, it opens up with SQL with some particular Server, so only i asked this. Still i find a error when i run my Select DBM perl directly : DBD::DBM::st execute failed: Cannot open .\users.lck: No such file or directory at D:/Perl/site/lib/DBD/File.pm line 574. for Statement "SELECT COUNT(*) FROM users" at H:\job\modules.pl line 13. DBI::st=HASH(0x1c10300)

        following is the code i'm using

        #!/usr/bin/perl -w use strict; use DBI; my $dbh = DBI->connect('dbi:DBM:server=RS-ERDSG06:f_ext=.sql') or die "Can't connect to $DBI::errstr"; my $sql = "SELECT COUNT(*) FROM users"; my $sth = $dbh->prepare($sql) or die "Can't prepare statement: $DBI::errstr"; $sth->execute(); print $sth, "\n"; $dbh->disconnect;