Martin,

thanks for your reply.

as to the version of unixodbc, I use what is part of SuSe 9.2:

        Name        : unixODBC       Relocations: (not relocatable)
        Version     : 2.2.9 Vendor: SUSE LINUX AG, Nuernberg, Germany
        Release     : 4 Build Date: Mo 04 Okt 2004 22:49:44

Is there a way other than recompiling to check whether threading is enabled in this build ?

Changing the connect string to

my $dbh = DBI->connect('DSN=emanuel-sbart;UID=***;PWD=***;')

        || die "can't connect to $data_source: $DBI::errstr";

as you suggested  results in the message:

        Can't connect to data source DSN=emanuel-sbart;UID=***;PWD=***;,
        no database driver specified and DBI_DSN env var not set at
        odbc-emanuel-test.pl line 17

You asked about the driver I am using:

-----------/etc/unixODBC/odbcinst.ini--------------
[AdabasD]
Description = AdabasD -Treiber
Driver = /usr/local/lib/odbclib.so

this .so is from the adabas11-06 distribution.

-------------/etc/odbc.ini
[emanuel-sbart]
Description = Adabas 11.06 on emanuel
Driver = AdabasD
Server = emanuel
Database = sbart





        -walt



Martin Evans wrote:
I might be wrong - my info is well out of date... but on Linux, Perl built
multithreaded always segfaulted with unixODBC. I think this happened even if
unixODBC was built threaded (--enable-threads=yes - the default for unixODBC's
configure but I'd check your unixODBC was built threaded). I can't remember the
exact reason I'm afraid. isql is not threaded.

The data source not found message may be related to what DBD::ODBC does.
It first tries to call SQLDriverConnect with (in your case) emanuel-sbart and
when that fails calls SQLConnect(emanuel-sbart) - you can see this in your log.
You can get around this by making the DBI connect string
"DSN=emanuel-sbart;UID=db_user;PWD=db_pass;". See

http://www.easysoft.com/products/9999/faq_answer.phtml?ID=97&product=2002

but it won't make the segfault go away. I'd rebuild your Perl without threads if
I were you.

You can also see from your log that the SQLConnect succeeeds.

BTW, you did not mention which driver you were using.

Martin

Quoting Walter Obermiller <[EMAIL PROTECTED]>:


Hi, all

I am experiencing a puzzling problem while trying to get an DBD::ODBC connection (via unixODBC) working from a client machine A (Suse linux) to a an ADABAS-D-11 database running on a remote machine (B, also Suse linux)


-------------------------- Machine A (client)
Linux 2.6.8-2
Perl : 5.008005 (i586-linux-thread-multi)
OS : linux (2.6.8.1)
DBI : 1.43
DBD::Proxy : install_driver(Proxy) failed: Can't locate RPC/PlClient.pm in @INC
DBD::ODBC : 1.06
----------------------------------------------



Connections using isql (unixODBC) from machine A to machine B run smoothly, hence I reckon, unixodbc and prima facie odbc-configuration blotches are not the problem.


When I try to trivially connect with DBD::ODBC to the very same DSN that I could connect to using isql without a problem, I get a segmentation fault.

----------trivial-connect----------------------
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect('dbi:ODBC:emanuel-sbart', '***','***') ||
                die "can't connect to $data_source: $DBI::errstr";
$rc = $dbh->disconnect;
exit();
--------------------------------

and inspection of the sql.log (of unixodbc) reveals the error message:

---------------------
Message Text = [[unixODBC][Driver Manager]Data source name not found, and no default driver specified]
[ODBC][13206][SQLError.c][424]
-------------------------------



Can anybody give me an idea which direction could be pursued to solve this problem ?

What beats me is that isql can connect to my remote database, but an
dbd::odbc connection to the same DSN utterly fails.

Any hints welcome.

    -walter



--------------sql.log--------------------------------------------------------

[ODBC][13206][__handles.c][421]
                Exit:[SQL_SUCCESS]
        

Environment = 0x82ce928

[ODBC][13206][SQLSetEnvAttr.c][182]
                Entry:
        

Environment = 0x82ce928

        

Attribute = SQL_ATTR_ODBC_VERSION

        

Value = 0x3

        

StrLen = -6

[ODBC][13206][SQLSetEnvAttr.c][349]
                Exit:[SQL_SUCCESS]
[ODBC][13206][SQLAllocHandle.c][346]
                Entry:
        

Handle Type = 2

        

Input Handle = 0x82ce928

[ODBC][13206][SQLAllocHandle.c][464]
                Exit:[SQL_SUCCESS]
        

Output Handle = 0x82ceeb8

[ODBC][13206][SQLDriverConnect.c][666]
                Entry:
        

Connection = 0x82ceeb8

        

Window Hdl = (nil)

        

Str In = [emanuel-sbart][length = 13]

        

Str Out = 0xbfffdfc0

        

Str Out Max = 2048

        

Str Out Ptr = 0xbfffdfbe

        

Completion = 0

[ODBC][13206][SQLDriverConnect.c][998]Error: IM002
[ODBC][13206][SQLError.c][424]
                Entry:
        

Connection = 0x82ceeb8

        

SQLState = 0xbfffdf60

        

Native = 0xbfffdd58

        

Message Text = 0xbfffdd60

        

Buffer Length = 511

        

Text Len Ptr = 0xbfffdd5e

[ODBC][13206][SQLError.c][461]
                Exit:[SQL_SUCCESS]
        

SQLState = IM002

        

Native = 0xbfffdd58 -> 0

        

Message Text = [[unixODBC][Driver Manager]Data source name not found,


and no default driver specified]
[ODBC][13206][SQLError.c][424]
                Entry:
        

Connection = 0x82ceeb8

        

SQLState = 0xbfffdf60

        

Native = 0xbfffdd58

        

Message Text = 0xbfffdd60

        

Buffer Length = 511

        

Text Len Ptr = 0xbfffdd5e

[ODBC][13206][SQLError.c][461]
                Exit:[SQL_NO_DATA]
[ODBC][13206][SQLConnect.c][3495]
                Entry:
        

Connection = 0x82ceeb8

        

Server Name = [emanuel-sbart][length = 13]

        

User Name = [walter][length = 6]

        

Authentication = [***][length = 3]

                UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

[ODBC][13206][SQLConnect.c][4069]
                Exit:[SQL_SUCCESS]






Reply via email to