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

Yes .... I have to execute a perl script(Unix/Windows) to update in SQL database. I have a limitation that, I can only use DBD::DBM to run the query. As i haven't worked with DBM files, I want to know how to execute with DBM Module. I have written a sample script, but i'm receiving error as \.Usr.lck : No such directory or file exist. DO i need to place the SQL files in some folder or Do i have to use it in some other way? Could you please elaborate me out.

#!/usr/bin/perl -w use strict; use DBI; my $dbh=DBI->connect('dbi:DBM:f_dir=D:\Perl\site\lib\DBD\usr.sql') or die "Can't connect to $DBI::errstr"; my $sql = "SELECT USERNAME FROM USERS"; my $sth = $dbh->prepare($sql) or die "Can't prepare statement: $DBI::errstr"; $sth->execute(); print $sth; $dbh->disconnect;

Replies are listed 'Best First'.
Re^3: DBI::DBM - How to use this for SQL connection
by stefbv (Priest) on Apr 06, 2011 at 07:43 UTC

    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;

      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.