Skip to Content.
Sympa Menu

freetds - RE: [freetds] Problem with data type conversions and FreeTDS

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: James Vanns <jimv AT canterbury.ac.uk>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Problem with data type conversions and FreeTDS
  • Date: Wed, 30 Jul 2003 13:54:01 -0000

The latest source 0.61 and when connecting protocol version 8.0

The static is there because I're turning a reference to a local
variable. The variable won't exist outside the function scope because
the stack for the function is nuked on function exit.

str.clear () is there just to make sure the static variables contents
have been wiped. I know it's reassigned to so clear() isn't really
needed but that's not the issue here!

OK const_cast not necessary anymore! I think it was on a previous
version!

Any ideas about the real problem!? How I retrieve the 'real' data of
unique identifiers and other binary objects for that matter?

The is_blob_type() doesn't seem to be doing what I think it should!

Cheers for the prompt reply!

Jim

On Wed, 2003-07-30 at 14:27, ZIGLIO Frediano wrote:
> >
> > Hi all,
> >
>
> Hi!
>
> > I had a friend create a table on his M$ SQL server 2000 with
> > just one row and as many columns as data types. He filled
> > each field with a different value corresponding to data type. E.g.
> >
> > bigint, bit, char, datetime, float, money, nvarchar, unique
> > 1111119,1,c,30/04/2003 13:00:19,23.45, 123.45, hello,
> > {F44A-etc-...blah}
> >
> > Note the Unique identifier in the above example is not the
> > real value I just couldn't be bothered to write it out in full!
> >
> > Anyway using the code snippet below works great except when
> > trying to convert and print the unique ID. What should I be
> > doing to allow all data types to be printed successfully as
> > with tsql and sqsh?
> >
> > <snip>
> >
>
> Wow... C++ !!!
>
> > const string& tds::connection::print_field (const int &column) {
>
> string tds::connection::print_field (const int column) {
> (return value, not input reference)
>
> > static string str;
>
> string str;
> ??? why static ???
>
> > unsigned char *row = results->current_row;
> > const int type = results->columns[column]->column_type;
> > const int offset = results->columns[column]->column_offset;
> > const int size = results->columns[column]->column_cur_size;
> > const int conversion_type = tds_get_conversion_type (type, size);
> >
> > str.clear ();
> >
>
> remove str.clear(); line
>
> > if (tds_get_null (const_cast <unsigned char *> (row), column))
>
> row is already unsigned char *, cast unneeded
>
> > str = "NULL";
> > else {
> > CONV_RESULT convert;
> > unsigned char *value = &(row[offset]);
> >
> > if (is_blob_type (type))
> > value = (unsigned char*) ((TDSBLOBINFO *) value)->textvalue;
> >
> > if (tds_convert (context, conversion_type, (TDS_CHAR
> > *) value,
> > size, SYBVARCHAR, &convert) < 0)
> > throw tds::error ("Failed to convert row type at
> > column.");
> >
>
> Seem correct...
>
> > str = convert.c;
> > free (convert.c);
> > }
> >
> > return str;
> > }
> >
> > </snip>
> >
> > I have tried printing both the C++ tds::string and the
> > converted value* both fail.
> >
> > Can anyone help! Plleasse!!
> >
>
> What version of FreeTDS are you using ??
>
> > Many thanks
> >
> > James Vanns
> >
>
> freddy77
> _______________________________________________
> FreeTDS mailing list
> FreeTDS AT lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
--
James Vanns BSc (Hons) MCP
Linux Systems Administrator
Software Engineer (Linux / C & C++)
Canterbury Christ Church University College
Public Key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x24045370






Archive powered by MHonArc 2.6.24.

Top of Page