Skip to Content.
Sympa Menu

freetds - Re: iodbc and freetds

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: yan AT cbmi.upmc.edu
  • To: TDS Development Group <freetds AT franklin.oit.unc.edu>
  • Subject: Re: iodbc and freetds
  • Date: Mon, 30 Aug 1999 00:39:23 -0400 (EDT)


Brian,

Again, thanks so much for all of your help!! I'll give it
a try.


Yantiff

On Sun, 29 Aug 1999, Brian Bruns wrote:

> Ok...everything is working well then it appears, only the first query
> you sent didn't return any rows.
>
> And I think I see the problem. 'use <database>' is the first result set
> and returns no rows. the tdstest app is not built to loop on result set,
> thus the second query never gets processed.
>
> Now that you know that you have basic connectivity, move to either dblib
> or ctlib. The reason is that TDS is a support layer for the other
> libraries (the other libraries call libtds). They are more full featured
> and have an API that will not change. The libtds library could and
> probably will change over time and has pretty minimal features. So
> unless you intend on creating a API layer, I'd steer clear of it.
>
> Info on dblib and ctlib is available online at sybooks.sybase.com, and I
> believe if you dig around MS's site there is still some dblib info there
> as well. Not all of the functions are implemented by FreeTDS, however a
> fairly good subset of it is.
>
> Or if you are doing perl, then grab DBD::Sybase or Sybperl and give it a
> go. (Sybperl is dblib and ctlib for Perl, DBD::Sybase is a DBI driver
> written over ctlib).
>
> Cheers,
>
> Brian
>
> On Sun, 29 Aug 1999 yan AT cbmi.upmc.edu wrote:
>
> > Brian,
> >
> > Yep. I configured it with --with=tdsver=4.2. I'll try the
> > select db_name(). Running the same code I just sent you with only
> > changing " tds_submit_query(tds,"select db_name()"); " gives the following
> > output:
> >
> > gmake tdstest
> > gcc -DPACKAGE=\"freetds\" -DVERSION=\"0.45\" -DSTDC_HEADERS=1
> > -DHAVE_SYS_WAIT_H=1 -DHAVE_UNISTD_H=1 -DRDS_BIGENDIAN=1
> > -DHAVE_STRFTIME=1 -I. -I. -I/usr/local/freetds/include -g -O2
> > -DHW_LITTLE_ENDIAN -DS42 -c tdstest.c
> > /bin/sh ../libtool --mode=link gcc -g -O2 -DHW_LITTLE_ENDIAN -DTDS42 -o
> > tdstest tdstest.o debug.o -Lsr/local/freetds/lib -lsocket -ltds
> > gcc -g -O2 -DHW_LITTLE_ENDIAN -DTDS42 -o tdstest tdstest.o debug.o
> > -L/usr/local/freetds/lib -lsocket -ds
> > > ./tdstest
> > col 0
> > Type: 39
> > Name:
> > Offset: 1
> > col 0 is master
> > rc: -2
> > > uname -a
> > SunOS grill 5.6 Generic sun4m sparc SUNW,SPARCstation-20
> >
> >
> > Again. Thank you so much for your help in this regard. Any tips or
> > flaming (in regard to any dumb mistakes on my part) :-) will be happily
> > accepted.
> >
> > Yantiff
> >
> > On Sun, 29 Aug 1999, Brian Bruns wrote:
> >
> > >
> > > Hmmm...2 is TDS_NO_MORE_RESULTS which is a normal end of processing type
> > > of thing. Could you throw a smipler query at it...something like
> > > 'select
> > > db_name()' and see what happens. Also I'm assuming you configure'd with
> > > --with-tdsver=4.2 ?
> > >
> > > brian
> > >
> > > On Sun, 29 Aug 1999 yan AT cbmi.upmc.edu wrote:
> > >
> > > > Brian,
> > > >
> > > > Sorry about that...
> > > > Here it is:
> > > >
> > > > I modified the code a bit to see what tds_submit_query is
> > > > returning; otherwise the program just runs without returning anything.
> > > >
> > > > > gmake tdstest
> > > > gcc -DPACKAGE=\"freetds\" -DVERSION=\"0.45\" -DSTDC_HEADERS=1
> > > > -DHAVE_SYS_WAIT_H=1 -DHAVE_UNISTD_H=1 -DWORDS_BIGENDIAN=1
> > > > -DHAVE_STRFTIME=1 -I. -I. -I/usr/local/freetds/include -g -O2
> > > > -DHW_LITTLE_ENDIAN -DTDS42 -c tdstest.c
> > > > /bin/sh ../libtool --mode=link gcc -g -O2 -DHW_LITTLE_ENDIAN -DTDS42
> > > > -o
> > > > tdstest tdstest.o debug.o -L/usr/local/freetds/lib -lsocket -ltds
> > > > gcc -g -O2 -DHW_LITTLE_ENDIAN -DTDS42 -o tdstest tdstest.o debug.o
> > > > -L/usr/local/freetds/lib -lsocket -ltds
> > > > > ./tdstest
> > > > rc: 2
> > > >
> > > >
> > > > #include <stdio.h>
> > > > #include <tds.h>
> > > >
> > > >
> > > > static char software_version[] = "$Id: tdstest.c,v 1.5 1999/06/13
> > > > 00:07:17 camber Exp $";
> > > > static void *no_unused_var_warn[] = {software_version,
> > > > no_unused_var_warn};
> > > >
> > > >
> > > > char *value_as_string(
> > > > TDSSOCKET *tds,
> > > > int col_idx)
> > > > {
> > > > static char result[256];
> > > > const int type =
> > > > tds->res_info->columns[col_idx]->column_type;
> > > > const char *row = tds->res_info->current_row;
> > > > const int offset =
> > > > tds->res_info->columns[col_idx]->column_offset;
> > > > const void *value = (row+offset);
> > > >
> > > > switch(type)
> > > > {
> > > > case SYBVARCHAR:
> > > > {
> > > > strncpy(result, (char *)value, sizeof(result)-1);
> > > > result[sizeof(result)-1] = '\0';
> > > > break;
> > > > }
> > > > case SYBINT4:
> > > > {
> > > > sprintf(result, "%d", *(int *)value);
> > > > break;
> > > > }
> > > > default:
> > > > {
> > > > strcpy(result, "NotImp");
> > > > break;
> > > > }
> > > > }
> > > > return result;
> > > > } /* value_as_string() */
> > > >
> > > >
> > > > int main()
> > > > {
> > > > TDSLOGIN *login;
> > > > TDSSOCKET *tds;
> > > > int rc;
> > > > int i;
> > > >
> > > > login = tds_alloc_login();
> > > > tds_set_passwd(login,"byteme4");
> > > > tds_set_user(login,"sa");
> > > > tds_set_app(login,"sqsh");
> > > > tds_set_host(login,"grill.cis.pitt.edu");
> > > > tds_set_library(login,"TDS-Library");
> > > > tds_set_server(login,"color");
> > > > tds_set_charset(login,"iso_1");
> > > > tds_set_language(login,"us_english");
> > > > tds_set_packet(login,512);
> > > >
> > > > if (!(tds = tds_connect(login))) {
> > > > fprintf(stderr, "Login Failed!\n");
> > > > exit(1);
> > > > }
> > > >
> > > > /* tds_submit_query(tds,"select db_name() dbname, user_name()
> > > > username"); */
> > > > /* tds_submit_query(tds,"select idx from groups"); */
> > > > tds_submit_query(tds,"use pharos select id from users where
> > > > id='shaykin'");
> > > > rc=tds_process_result_tokens(tds);
> > > > if (rc==TDS_SUCCEED)
> > > > {
> > > > for (i=0; i<tds->res_info->num_cols; i++)
> > > > {
> > > > printf("col %d\n Type: %d\n Name: %s\n Offset: %d\n",
> > > > i,
> > > > tds->res_info->columns[i]->column_type,
> > > > tds->res_info->columns[i]->column_name,
> > > > tds->res_info->columns[i]->column_offset);
> > > > }
> > > >
> > > > while ((rc=tds_process_row_tokens(tds))==TDS_SUCCEED)
> > > > {
> > > > for (i=0; i<tds->res_info->num_cols; i++)
> > > > {
> > > > printf("col %i is %s\n", i, value_as_string(tds, i));
> > > > }
> > > > }
> > > > }
> > > > printf("rc: %d\n", rc);
> > > > return 0;
> > > > }
> > > >
> > > >
> > > >
> > > > On Sun, 29 Aug 1999, Brian Bruns wrote:
> > > >
> > > > >
> > > > > What kind of error messages or incorrect behaviour are you seeing?
> > > > > And on
> > > > > which boxes? There are some issues running certain things on
> > > > > Solaris (the
> > > > > the other message that just went out to the list). Are you trying
> > > > > to run
> > > > > DBD::Sybase, Sybperl, PHP? Which version of FreeTDS are you
> > > > > running? (I
> > > > > would highly recomend the snapshot).
> > > > >
> > > > > Brian
> > > > >
> > > > > On Sun, 29 Aug 1999 yan AT cbmi.upmc.edu wrote:
> > > > >
> > > > > > Brian,
> > > > > >
> > > > > > Thank you for the advice. I am still having the same problem
> > > > > > accessing my SQL 6.5 database from my Solaris 2.6 box. I tested
> > > > > > the code
> > > > > > on my linux box and am having the same problem. I can give you
> > > > > > access to
> > > > > > the database and if this would help you trace the problem (to the
> > > > > > actual
> > > > > > sun box). I compiled freetds successfully and ran the samples
> > > > > > for
> > > > > > tds successfully on my box. Here is the code and the interface
> > > > > > configuration I am using:
> > > > > >
> > > > > > #include <stdio.h>
> > > > > > #include <tds.h>
> > > > > >
> > > > > >
> > > > > > static char software_version[] = "$Id: tdstest.c,v 1.5
> > > > > > 1999/06/13
> > > > > > 00:07:17 camber Exp $";
> > > > > > static void *no_unused_var_warn[] = {software_version,
> > > > > > no_unused_var_warn};
> > > > > >
> > > > > >
> > > > > > char *value_as_string(
> > > > > > TDSSOCKET *tds,
> > > > > > int col_idx)
> > > > > > {
> > > > > > static char result[256];
> > > > > > const int type =
> > > > > > tds->res_info->columns[col_idx]->column_type;
> > > > > > const char *row = tds->res_info->current_row;
> > > > > > const int offset =
> > > > > > tds->res_info->columns[col_idx]->column_offset;
> > > > > > const void *value = (row+offset);
> > > > > >
> > > > > > switch(type)
> > > > > > {
> > > > > > case SYBVARCHAR:
> > > > > > {
> > > > > > strncpy(result, (char *)value, sizeof(result)-1);
> > > > > > result[sizeof(result)-1] = '\0';
> > > > > > break;
> > > > > > }
> > > > > > case SYBINT4:
> > > > > > {
> > > > > > sprintf(result, "%d", *(int *)value);
> > > > > > break;
> > > > > > }
> > > > > > default:
> > > > > > {
> > > > > > strcpy(result, "NotImp");
> > > > > > break;
> > > > > > }
> > > > > > }
> > > > > > return result;
> > > > > > } /* value_as_string() */
> > > > > >
> > > > > >
> > > > > > int main()
> > > > > > {
> > > > > > TDSLOGIN *login;
> > > > > > TDSSOCKET *tds;
> > > > > > int rc;
> > > > > > int i;
> > > > > >
> > > > > > login = tds_alloc_login();
> > > > > > tds_set_passwd(login,"byteme4");
> > > > > > tds_set_user(login,"sa");
> > > > > > tds_set_app(login,"sqsh");
> > > > > > tds_set_host(login,"color");
> > > > > > tds_set_library(login,"TDS-Library");
> > > > > > tds_set_server(login,"pharos");
> > > > > > tds_set_charset(login,"iso_1");
> > > > > > tds_set_language(login,"us_english");
> > > > > > tds_set_packet(login,512);
> > > > > >
> > > > > > if (!(tds = tds_connect(login))) {
> > > > > > fprintf(stderr, "Login Failed!\n");
> > > > > > exit(1);
> > > > > > }
> > > > > >
> > > > > > /* tds_submit_query(tds,"select db_name() dbname, user_name()
> > > > > > username"); */
> > > > > > /* tds_submit_query(tds,"select idx from groups"); */
> > > > > > tds_submit_query(tds,"use pharos select id from users where
> > > > > > id='shaykin'");
> > > > > > while ((rc=tds_process_result_tokens(tds))==TDS_SUCCEED)
> > > > > > {
> > > > > > for (i=0; i<tds->res_info->num_cols; i++)
> > > > > > {
> > > > > > printf("col %d\n Type: %d\n Name: %s\n Offset:
> > > > > > %d\n",
> > > > > > i,
> > > > > > tds->res_info->columns[i]->column_type,
> > > > > > tds->res_info->columns[i]->column_name,
> > > > > > tds->res_info->columns[i]->column_offset);
> > > > > > }
> > > > > >
> > > > > > while ((rc=tds_process_row_tokens(tds))==TDS_SUCCEED)
> > > > > > {
> > > > > > for (i=0; i<tds->res_info->num_cols; i++)
> > > > > > {
> > > > > > printf("col %i is %s\n", i, value_as_string(tds, i));
> > > > > > }
> > > > > > }
> > > > > > }
> > > > > > return 0;
> > > > > > }
> > > > > >
> > > > > > Interfaces
> > > > > >
> > > > > > JDBC
> > > > > > query tcp ether 192.138.151.39 4444
> > > > > > master tcp ether 192.138.151.39 4444
> > > > > >
> > > > > > myserver
> > > > > > query tcp ether 127.0.0.1 4000
> > > > > > master tcp ether 127.0.0.1 4000
> > > > > >
> > > > > > myserver2
> > > > > > query tcp ether 127.0.0.1 4001
> > > > > > master tcp ether 127.0.0.1 4001
> > > > > > color
> > > > > > query tcp ether 136.142.141.13 1433
> > > > > > pharos tcp ether 136.142.141.13 1433
> > > > > >
> > > > > >
> > > > > > The password and username will work for testing purposes.
> > > > > > The SQL database I am trying to access is pharos and I can access
> > > > > > it from
> > > > > > my DBI:odbc perl scripts on a win32 platform (configured with
> > > > > > odbc32
> > > > > > client). Any tips would be profusely welcomed.
> > > > > >
> > > > > >
> > > > > > Yantiff
> > > > > >
> > > > > > On Sun, 29 Aug 1999, Brian Bruns wrote:
> > > > > >
> > > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > The obdc library is extremely alpha quality (if that) right
> > > > > > > now. I
> > > > > > > wouldn't recommend using it. There is another group that
> > > > > > > created an ODBC
> > > > > > > driver on top of libtds and we will be merging that back into
> > > > > > > the main
> > > > > > > library soon instead of the ODBC driver that is presently
> > > > > > > there. (The new
> > > > > > > one will use unixODBC instead of iODBC for a driver manager).
> > > > > > >
> > > > > > > I would reccomend using dblib or ctlib for the time being if
> > > > > > > that is an
> > > > > > > option for you.
> > > > > > >
> > > > > > > Brian
> > > > > > >
> > > > > > > On Sun, 29 Aug 1999 yan AT cbmi.upmc.edu wrote:
> > > > > > >
> > > > > > > > To nay of you that have done this,
> > > > > > > >
> > > > > > > >
> > > > > > > > I compiled the iodbc-2.12.and successfully compiled
> > > > > > > > the
> > > > > > > > libtdsodbc.so etc. libraries. However, I cannot find any
> > > > > > > > sample code that
> > > > > > > > shows me how to use it. Could anyone provide me with simple
> > > > > > > > code that
> > > > > > > > does freetdsodbc or instructions on how to do so?
> > > > > > > >
> > > > > > > > Yantiff
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > ---
> > > > > > > You are currently subscribed to freetds as: yan AT cbmi.upmc.edu
> > > > > > > To unsubscribe, forward this message to $subst('Email.Unsub')
> > > > > > >
> > > > > >
> > > > > > ---
> > > > > > You are currently subscribed to freetds as: camber AT ais.org
> > > > > > To unsubscribe, forward this message to $subst('Email.Unsub')
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > ---
> > > > > You are currently subscribed to freetds as: yan AT cbmi.upmc.edu
> > > > > To unsubscribe, forward this message to $subst('Email.Unsub')
> > > > >
> > > >
> > > > ---
> > > > You are currently subscribed to freetds as: camber AT ais.org
> > > > To unsubscribe, forward this message to $subst('Email.Unsub')
> > > >
> > > >
> > >
> > >
> > > ---
> > > You are currently subscribed to freetds as: yan AT cbmi.upmc.edu
> > > To unsubscribe, forward this message to $subst('Email.Unsub')
> > >
> >
> > ---
> > You are currently subscribed to freetds as: camber AT ais.org
> > To unsubscribe, forward this message to $subst('Email.Unsub')
> >
> >
>
>
> ---
> You are currently subscribed to freetds as: yan AT cbmi.upmc.edu
> To unsubscribe, forward this message to $subst('Email.Unsub')
>




Archive powered by MHonArc 2.6.24.

Top of Page