Re: Problem with freebcp and fixed text output

rodrigo lopez <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
Para freebcp el TAB = \n

tray this:


Format file:
10.0
4
1       SYBCHAR 0       3       "\t"      1       term_code
2       SYBCHAR 0       6       "\t"      2       cbs_term_code
3       SYBCHAR 0       10      "\t"      3       description
4       SYBCHAR 0       24      "\n"    4       last_update_date

y funciona!! = ITS WORKS!!


Rodrigo Antonio López Olivares 

Ingeniero en Informática 

Licenciado en ciencias de la ingeniería.

UTEM 

Cel: 06-2142337

--- El mié 5-ago-09, [email protected] <[email protected]> escribió:

De: [email protected] <[email protected]>
Asunto: FreeTDS Digest, Vol 79, Issue 4
A: [email protected]
Fecha: miércoles, 5 agosto, 2009, 2:20 pm

Send FreeTDS mailing list submissions to
    [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
    http://lists.ibiblio.org/mailman/listinfo/freetds
or, via email, send a message with subject or body 'help' to
    [email protected]

You can reach the person managing the list at
    [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of FreeTDS digest..."


Today's Topics:

   1. Problem with freebcp and fixed text output (Modesto Sevilla)
   2. Host process hard coded to 37876 for Sybase (Wood, David)
   3. Re: Building Sybperl against FreeTDS on Fedora (James K. Lowden)


----------------------------------------------------------------------

Message: 1
Date: Tue, 04 Aug 2009 16:37:39 -0700
From: Modesto Sevilla <[email protected]>
Subject: [freetds] Problem with freebcp and fixed text output
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed


Hello,
  I am evaluating freebcp as a replacement to bcp (Sybase) while 
connecting to MS Sql Server 2008.  My problem is that when I bcp out a 
table even if I specify a format file, the output does not come out in 
fixed length as it did with bcp. 

Here is an example:

Table:
create table testbcp
(
        term_code               char(3)         NOT NULL,
        cbs_term_code           char(6)         NOT NULL,
        description             char(10)        NULL,
        last_update_date        datetime        NULL
)

Format file:
10.0
4
1       SYBCHAR 0       3       ""      1       term_code
2       SYBCHAR 0       6       ""      2       cbs_term_code
3       SYBCHAR 0       10      ""      3       description
4       SYBCHAR 0       24      "\n"    4       last_update_date

Output when calling freebcp testbcp out testbcp.dat -f testbcp.fmt -S 
SERVER -U USERNAME -P PW

093200901TESTING DE
094200902TEST2009-08-04 16:28:11.780
092200906NO DESC2009-08-04 16:28:11.780

But it should be fixed length like this:
093200901TESTING DE
094200902TEST             2009-08-04 16:28:11.780
092200906NO DESC     2009-08-04 16:28:11.780

For some reason it is not padding with spaces according to the format 
file like the Sybase bcp tool does.
Can anyone help me?





------------------------------

Message: 2
Date: Wed, 5 Aug 2009 00:50:22 -0400
From: "Wood, David" <[email protected]>
Subject: [freetds] Host process hard coded to 37876 for Sybase
To: <[email protected]>
Message-ID:
    <[email protected]>
Content-Type: text/plain;    charset="us-ascii"

Hello,

 

It seems host process is currently hard coded to 37876 if using TDS <= 5
(eg Sybase):

% grep 37876 src/tds/login.c

        tds_put_login_string(tds, "37876", TDS_MAX_LOGIN_STR_SZ);
/* host process */

 

% tsql -Ufoo -SSYB1 -Pbar

...

1> select hostprocess from sysprocesses where spid = @@spid

2> go

hostprocess

37876

^Z

 

% ps -ef | grep tsql | grep -v grep

   woodd  2990  2832   0 00:38:09 pts/140     0:00 tsql -Ufoo -SSYB1
-Pbar

 

After applying the patch below:

 

% tsql -Ufoo -SSYB1 -Pbar

...

1> select hostprocess from sysprocesses where spid = @@spid

2> go

hostprocess

23294 

^Z

 

% ps -ef | grep tsql | grep -v grep

   woodd 23294 23233   0 00:41:47 pts/17      0:00 tsql -Ufoo -SSYB1
-Pbar

 

Context diff against CVS:

 

*** login.c     Wed Aug  5 00:45:23 2009

--- login_patched.c     Wed Aug  5 00:44:22 2009

***************

*** 29,34 ****

--- 29,38 ----

  #include <stdlib.h>

  #endif /* HAVE_STDLIB_H */

 

+ #ifdef HAVE_LIMITS_H

+ #include <limits.h>

+ #endif /* HAVE_LIMITS_H */

+

  #include <assert.h>

 

  #if HAVE_STRING_H

***************

*** 593,599 ****

        tds_put_login_string(tds,
tds_dstr_cstr(&connection->client_host_name), TDS_MAX_LOGIN_STR_SZ);  /*
client host name */

        tds_put_login_string(tds, tds_dstr_cstr(&connection->user_name),
TDS_MAX_LOGIN_STR_SZ); /* account name */

        tds_put_login_string(tds, tds_dstr_cstr(&connection->password),
TDS_MAX_LOGIN_STR_SZ);  /* account password */

!       tds_put_login_string(tds, "37876", TDS_MAX_LOGIN_STR_SZ);
/* host process */

  #ifdef WORDS_BIGENDIAN

        if (tds->emul_little_endian) {

                tds_put_n(tds, le1, 6);

--- 597,605 ----

        tds_put_login_string(tds,
tds_dstr_cstr(&connection->client_host_name), TDS_MAX_LOGIN_STR_SZ);  /*
client host name */

        tds_put_login_string(tds, tds_dstr_cstr(&connection->user_name),
TDS_MAX_LOGIN_STR_SZ); /* account name */

        tds_put_login_string(tds, tds_dstr_cstr(&connection->password),
TDS_MAX_LOGIN_STR_SZ);  /* account password */

!       char pbuf[PID_MAX+1];

!       sprintf(pbuf, "%d", (int) getpid());

!       tds_put_login_string(tds, pbuf, TDS_MAX_LOGIN_STR_SZ);  /* host
process */

  #ifdef WORDS_BIGENDIAN

        if (tds->emul_little_endian) {

                tds_put_n(tds, le1, 6);

 

David

 



------------------------------

Message: 3
Date: Wed, 5 Aug 2009 06:02:27 -0400
From: "James K. Lowden" <[email protected]>
Subject: Re: [freetds] Building Sybperl against FreeTDS on Fedora
To: FreeTDS Development Group <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=US-ASCII

Ed Avis wrote:
> 
> %configure \
>         --disable-dependency-tracking \
>         --disable-rpath \
>         %{!?_with_static: --disable-static} \
>         --with-tdsver="4.2" \
>         --with-unixodbc="%{_prefix}" \
>         --enable-msdblib \
>         --enable-sybase-compat \
>         --with-gnutls
> 
> Now, I do want to use FreeTDS to connect to an MSSQL server, so do I
> need to keep that flag in there?

http://www.freetds.org/userguide/config.htm#EVERYONE

As the UG says, these flags provide a small degree of compatibility.  In
the case of msdblib, it adjusts the date structure; sybase-compat adds a
symbol.  

So, no, you don't need --enable-msdblib to connect to a Microsoft server;
you need it only if you're working with code that expects Microsoft's
db-lib conventions.  (That's why it's calls msdblib and not, say, ms-tds.)
 Sybperl, on the contrary, expects Sybase db-lib conventions.  

> If so, I guess Sybperl needs patching to build against a FreeTDS
> configured this way.  I might go through the Sybperl source and add
> various #ifdef MSDBLIB sections.  Does that sound a reasonable way to
> proceed?

Well, it *could* be.  Easiest is to rebuild FreeTDS without those two
flags.  Modifying Sybperl might possibly be of some service, in that it
would facilitate using Fedora as-is, or even potentially using Microsoft's
library.  

HTH.

--jkl


------------------------------

_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds


End of FreeTDS Digest, Vol 79, Issue 4
**************************************



      ____________________________________________________________________________________
¡Obtén la mejor experiencia en la web!
Descarga gratis el nuevo Internet Explorer 8. 
http://downloads.yahoo.com/ieak8/?l=e1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.