October 10, 2014
On Friday, 10 October 2014 at 01:33:23 UTC, Sergey wrote:
> Well, thanks for the explanation, now I understand more at the expense of Microsoft.
> It is a pity that it is not possible to write a client on D for mssql now.
> I liked the language D.
>
> Thank you all ...
>
> P.s.
> I work in a company where a very large database, and very stability is important, data integrity, etc. And mysql or MariaDB not suitable for these tasks. Maybe in the future turn out to use PostgreSQL.

If you want stability, you're a lot better off using tested C bindings than a lightly-tested native D binding. One of the advantages of D's interoperability with C libraries is that you don't have to rewrite code. A bigger advantage is that you can take advantage of all the testing that has been done on those C libraries.
October 10, 2014
On 10/10/14 09:40, ketmar via Digitalmars-d wrote:

> topicstarter. the word "Debian" has very defined meaning.

Point taken, missed that :)

-- 
/Jacob Carlborg
October 10, 2014
On Fri, 10 Oct 2014 16:21:12 +0200
Jacob Carlborg via Digitalmars-d <digitalmars-d@puremagic.com> wrote:

> On 10/10/14 09:40, ketmar via Digitalmars-d wrote:
> > topicstarter. the word "Debian" has very defined meaning.
> Point taken, missed that :)

that's why i switched to maillist. nice archives, nice threading, nice searching and subject text in each line. ;-)


October 10, 2014
On 2014-10-10 16:35, ketmar via Digitalmars-d wrote:

> that's why i switched to maillist. nice archives, nice threading, nice
> searching and subject text in each line. ;-)

I have that as well, in Thunderbird. I just somehow filtered out "Debian", perhaps due to the parentheses, perhaps a Lisp filter :)

-- 
/Jacob Carlborg
October 14, 2014
I try to do in this:
D version: http://pastebin.com/7tGyytDh
Tds file:  http://pastebin.com/JCA8XQH0
C version: http://pastebin.com/FWJM4B6X

First I checked the C version.

When I did this:
$ gcc -o connect_mssql connect_mssql.c
I got these errors:

/tmp/ccmW3YHR.o: In function `main':
connect_mssql.c:(.text+0x18): undefined reference to `dbinit'
connect_mssql.c:(.text+0x50): undefined reference to `dblogin'
connect_mssql.c:(.text+0xaf): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0xce): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0xed): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0x12d): undefined reference to `dbsetlname'
connect_mssql.c:(.text+0x14c): undefined reference to `tdsdbopen'
connect_mssql.c:(.text+0x19b): undefined reference to `dbuse'
connect_mssql.c:(.text+0x1dd): undefined reference to `dbloginfree'
connect_mssql.c:(.text+0x1f4): undefined reference to `dbcmd'
connect_mssql.c:(.text+0x203): undefined reference to `dbsqlexec'
connect_mssql.c:(.text+0x245): undefined reference to `dbresults'
connect_mssql.c:(.text+0x277): undefined reference to `dbbind'
connect_mssql.c:(.text+0x2a9): undefined reference to `dbbind'
connect_mssql.c:(.text+0x2e4): undefined reference to `dbnextrow'
connect_mssql.c:(.text+0x2f8): undefined reference to `dbfreebuf'
connect_mssql.c:(.text+0x307): undefined reference to `dbclose'
connect_mssql.c:(.text+0x30c): undefined reference to `dbexit'
collect2: error: ld returned 1 exit status

And then I added this: "-l sybdb" and it works.
$ gcc -o connect_mssql connect_mssql.c -l sybdb
$ ./connect_mssql
(I got some data from sql server)

Then I tried to do it on D:
$ dmd test_tds_connect.d
And I received similar errors:

test_tds_connect.o: In function `_Dmain':
test_tds_connect.d:(.text._Dmain+0x64): undefined reference to `dbinit'
test_tds_connect.d:(.text._Dmain+0x88): undefined reference to `dblogin'
test_tds_connect.d:(.text._Dmain+0xc4): undefined reference to `dbsetluser'
test_tds_connect.d:(.text._Dmain+0xdb): undefined reference to `dbsetlpwd'
test_tds_connect.d:(.text._Dmain+0xf2): undefined reference to `dbsetlapp'
test_tds_connect.d:(.text._Dmain+0x12c): undefined reference to `dbsetlhost'
test_tds_connect.d:(.text._Dmain+0x140): undefined reference to `dbopen'
test_tds_connect.d:(.text._Dmain+0x18c): undefined reference to `dbuse'
test_tds_connect.d:(.text._Dmain+0x1df): undefined reference to `dbloginfree'
test_tds_connect.d:(.text._Dmain+0x1f0): undefined reference to `dbcmd'
test_tds_connect.d:(.text._Dmain+0x1fe): undefined reference to `dbsqlexec'
test_tds_connect.d:(.text._Dmain+0x22b): undefined reference to `dbresults'
test_tds_connect.d:(.text._Dmain+0x243): undefined reference to `dbbind'
test_tds_connect.d:(.text._Dmain+0x25b): undefined reference to `dbbind'
test_tds_connect.d:(.text._Dmain+0x273): undefined reference to `dbbind'
test_tds_connect.d:(.text._Dmain+0x281): undefined reference to `dbnextrow'
test_tds_connect.d:(.text._Dmain+0x2d4): undefined reference to `dbfreebuf'
test_tds_connect.d:(.text._Dmain+0x2df): undefined reference to `dbclose'
test_tds_connect.d:(.text._Dmain+0x2e4): undefined reference to `dbexit'
collect2: error: ld returned 1 exit status
--- errorlevel 1

I need to add sybdb when building on D?
How to do it?

Thanks in advance.
October 14, 2014
On Tuesday, 14 October 2014 at 04:46:19 UTC, Sergey wrote:
> I try to do in this:
> D version: http://pastebin.com/7tGyytDh
> Tds file:  http://pastebin.com/JCA8XQH0
> C version: http://pastebin.com/FWJM4B6X
>
> First I checked the C version.
>
> When I did this:
> $ gcc -o connect_mssql connect_mssql.c
> I got these errors:
>
> /tmp/ccmW3YHR.o: In function `main':
> connect_mssql.c:(.text+0x18): undefined reference to `dbinit'
> connect_mssql.c:(.text+0x50): undefined reference to `dblogin'
> connect_mssql.c:(.text+0xaf): undefined reference to `dbsetlname'
> connect_mssql.c:(.text+0xce): undefined reference to `dbsetlname'
> connect_mssql.c:(.text+0xed): undefined reference to `dbsetlname'
> connect_mssql.c:(.text+0x12d): undefined reference to `dbsetlname'
> connect_mssql.c:(.text+0x14c): undefined reference to `tdsdbopen'
> connect_mssql.c:(.text+0x19b): undefined reference to `dbuse'
> connect_mssql.c:(.text+0x1dd): undefined reference to `dbloginfree'
> connect_mssql.c:(.text+0x1f4): undefined reference to `dbcmd'
> connect_mssql.c:(.text+0x203): undefined reference to `dbsqlexec'
> connect_mssql.c:(.text+0x245): undefined reference to `dbresults'
> connect_mssql.c:(.text+0x277): undefined reference to `dbbind'
> connect_mssql.c:(.text+0x2a9): undefined reference to `dbbind'
> connect_mssql.c:(.text+0x2e4): undefined reference to `dbnextrow'
> connect_mssql.c:(.text+0x2f8): undefined reference to `dbfreebuf'
> connect_mssql.c:(.text+0x307): undefined reference to `dbclose'
> connect_mssql.c:(.text+0x30c): undefined reference to `dbexit'
> collect2: error: ld returned 1 exit status
>
> And then I added this: "-l sybdb" and it works.
> $ gcc -o connect_mssql connect_mssql.c -l sybdb
> $ ./connect_mssql
> (I got some data from sql server)
>
> Then I tried to do it on D:
> $ dmd test_tds_connect.d
> And I received similar errors:
>
> test_tds_connect.o: In function `_Dmain':
> test_tds_connect.d:(.text._Dmain+0x64): undefined reference to `dbinit'
> test_tds_connect.d:(.text._Dmain+0x88): undefined reference to `dblogin'
> test_tds_connect.d:(.text._Dmain+0xc4): undefined reference to `dbsetluser'
> test_tds_connect.d:(.text._Dmain+0xdb): undefined reference to `dbsetlpwd'
> test_tds_connect.d:(.text._Dmain+0xf2): undefined reference to `dbsetlapp'
> test_tds_connect.d:(.text._Dmain+0x12c): undefined reference to `dbsetlhost'
> test_tds_connect.d:(.text._Dmain+0x140): undefined reference to `dbopen'
> test_tds_connect.d:(.text._Dmain+0x18c): undefined reference to `dbuse'
> test_tds_connect.d:(.text._Dmain+0x1df): undefined reference to `dbloginfree'
> test_tds_connect.d:(.text._Dmain+0x1f0): undefined reference to `dbcmd'
> test_tds_connect.d:(.text._Dmain+0x1fe): undefined reference to `dbsqlexec'
> test_tds_connect.d:(.text._Dmain+0x22b): undefined reference to `dbresults'
> test_tds_connect.d:(.text._Dmain+0x243): undefined reference to `dbbind'
> test_tds_connect.d:(.text._Dmain+0x25b): undefined reference to `dbbind'
> test_tds_connect.d:(.text._Dmain+0x273): undefined reference to `dbbind'
> test_tds_connect.d:(.text._Dmain+0x281): undefined reference to `dbnextrow'
> test_tds_connect.d:(.text._Dmain+0x2d4): undefined reference to `dbfreebuf'
> test_tds_connect.d:(.text._Dmain+0x2df): undefined reference to `dbclose'
> test_tds_connect.d:(.text._Dmain+0x2e4): undefined reference to `dbexit'
> collect2: error: ld returned 1 exit status
> --- errorlevel 1
>
> I need to add sybdb when building on D?
> How to do it?
>
> Thanks in advance.

Wrong, I need to have:
$ dmd test_tds_connect.d tds.d

test_tds_connect.o: In function `_Dmain':
tds.d:(.text._Dmain+0x64): undefined reference to `dbinit'
tds.d:(.text._Dmain+0x88): undefined reference to `dblogin'
tds.d:(.text._Dmain+0x140): undefined reference to `dbopen'
tds.d:(.text._Dmain+0x18c): undefined reference to `dbuse'
tds.d:(.text._Dmain+0x1df): undefined reference to `dbloginfree'
tds.d:(.text._Dmain+0x1f0): undefined reference to `dbcmd'
tds.d:(.text._Dmain+0x1fe): undefined reference to `dbsqlexec'
tds.d:(.text._Dmain+0x22b): undefined reference to `dbresults'
tds.d:(.text._Dmain+0x243): undefined reference to `dbbind'
tds.d:(.text._Dmain+0x25b): undefined reference to `dbbind'
tds.d:(.text._Dmain+0x273): undefined reference to `dbbind'
tds.d:(.text._Dmain+0x281): undefined reference to `dbnextrow'
tds.d:(.text._Dmain+0x2d4): undefined reference to `dbfreebuf'
tds.d:(.text._Dmain+0x2df): undefined reference to `dbclose'
tds.d:(.text._Dmain+0x2e4): undefined reference to `dbexit'
test_tds_connect.o: In function `dbsetluser':
tds.d:(.text.dbsetluser+0x18): undefined reference to `dbsetlname'
test_tds_connect.o: In function `dbsetlpwd':
tds.d:(.text.dbsetlpwd+0x18): undefined reference to `dbsetlname'
test_tds_connect.o: In function `dbsetlapp':
tds.d:(.text.dbsetlapp+0x18): undefined reference to `dbsetlname'
test_tds_connect.o: In function `dbsetlhost':
tds.d:(.text.dbsetlhost+0x18): undefined reference to `dbsetlname'
collect2: error: ld returned 1 exit status
--- errorlevel 1




October 14, 2014
On 14/10/14 08:11, Sergey wrote:

> Wrong, I need to have:
> $ dmd test_tds_connect.d tds.d

You can use "rdmd" to compile and run an application:

$ rdmd test_tds_connect.d

It will automatically find all (D) dependencies for "test_tds_connect" and compile those as well. But you still need to link with the C library, as in the C example.

$ rdmd -L-lsybdb test_tds_connect.d

"-L" is the linker flag.

-- 
/Jacob Carlborg
October 14, 2014
On Tue, 14 Oct 2014 08:34:36 +0200
Jacob Carlborg via Digitalmars-d <digitalmars-d@puremagic.com> wrote:

> On 14/10/14 08:11, Sergey wrote:
> 
> > Wrong, I need to have:
> > $ dmd test_tds_connect.d tds.d
> 
> You can use "rdmd" to compile and run an application:
> 
> $ rdmd test_tds_connect.d
> 
> It will automatically find all (D) dependencies for "test_tds_connect" and compile those as well. But you still need to link with the C library, as in the C example.
> 
> $ rdmd -L-lsybdb test_tds_connect.d
> 
> "-L" is the linker flag.

also, rdmd has flag -build-only, which build binary and places it in the current directory. so rdmd can be used as build tool for simple projects.


October 15, 2014
Yes, it works now:
$ rdmd -L-lsybdb test_tds_connect.d
(If somehow get rid of "-L-lsybdb". Maybe add it somewhere in the code ...?)

I got some data from the server, and it is certainly:
005����������������������������������������������... etc.

I've written before transcoding function, and I need to get a byte string for this. So how to do it?

Now it's like:
DBCHAR[255] table_field;
dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(BYTE*)&table_field);

But I need to may be:
ubyte[] ubyte_value = [];
dbbind(dbconn, 1, NTBSTRINGBIND, 0, ubyte_value);
(it does not work of course)

Thanks in advance.

October 15, 2014
On Wed, 15 Oct 2014 01:48:58 +0000
Sergey via Digitalmars-d <digitalmars-d@puremagic.com> wrote:

> Now it's like:
> DBCHAR[255] table_field;
> dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(BYTE*)&table_field);
> 
> But I need to may be:
> ubyte[] ubyte_value = [];
> dbbind(dbconn, 1, NTBSTRINGBIND, 0, ubyte_value);
> (it does not work of course)

cast to the rescue! any pointer is an array too. just cast it! `cast(ubyte[])table_field`, for example.