October 15, 2014
Do you mean:
ubyte[] ubyte_value = [];
dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(ubyte[])ubyte_value);

This error is:
test_tds_connect.d(84): Error: function tds.dbbind (tds_dblib_dbprocess* dbproc, int column, int vartype, int varlen, ubyte* varaddr) is not callable using argument types (tds_dblib_dbprocess*, int, int, int, ubyte[])

October 15, 2014
On Wed, 15 Oct 2014 02:37:23 +0000
Sergey via Digitalmars-d <digitalmars-d@puremagic.com> wrote:

> Do you mean:
> ubyte[] ubyte_value = [];
> dbbind(dbconn, 1, NTBSTRINGBIND, 0, cast(ubyte[])ubyte_value);
of course not. cast your DBCHAR array from the first example *after* you called 'dbbind'.


October 15, 2014
Exactly, it's just, sorry... :)

Well, now everything works, thanks!
Now I will test and then will create a convenient wrapper.
October 15, 2014
On 2014-10-15 03:48, Sergey wrote:
> 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

pragma(lib, "sybdb");

But that won't work with GDC. I'm not sure if it works with LDC.

-- 
/Jacob Carlborg
October 15, 2014
On Wednesday, 15 October 2014 at 06:20:50 UTC, Jacob Carlborg wrote:
> On 2014-10-15 03:48, Sergey wrote:
>> 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
>
> pragma(lib, "sybdb");
>
> But that won't work with GDC. I'm not sure if it works with LDC.

Yes, it works on the DMD, thanks !!!
Now it is universally! I love it!

Now just:
$ rdmd test_tds_connect.d
October 17, 2014
When I get the data from MsSQL, I use this function to convert to Unicode:

char[] CP1251_TO_UTF8(char[] char_par) {
	ubyte[] ubyte_str = cast(ubyte[])char_par;
	int[] int_array = [0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F];
	char[] char_var = [];
	for (int i=0; i<ubyte_str.length; i++) {
		std.utf.encode(char_var, int_array[ubyte_str[i]]);
		}
	return char_var;
	}


And it works well.
But if I need to make a request with the condition, such as:
    "select some_field from some_table where some_field = 'некоторый текст'"
so I have to do conversion in cp1251 and send it on line here:
     dbcmd(dbconn, "select some_field from some_table where some_field = 'значение'" .ptr);

How best to do this?

Or if I already have a byte string in cp1251 how to translate it into a normal string?

ubyte[] cp1251_ubyte_str = [115, 101, 108, 101, 99, 116, 32, 115, 111, 109, 101, 95, 102, 105, 101, 108, 100, 32, 102, 114, 111, 109, 32, 115, 111, 109, 101, 95, 116, 97, 98, 108, 101, 32, 119, 104, 101, 114, 101, 32, 115, 111, 109, 101, 95, 102, 105, 101, 108, 100, 32, 61, 32, 39, 167, 173, 160, 231, 165, 173, 168, 165, 39];

Thanks in advance.
October 17, 2014
Any help?
October 17, 2014
Sorry, everything turned out simply, I'm very inattentive ...
October 17, 2014
On 2014-10-17 07:24, Sergey wrote:

> Or if I already have a byte string in cp1251 how to translate it into a
> normal string?

Doesn't Sql Server uses UC2?

-- 
/Jacob Carlborg
October 21, 2014
On Friday, 17 October 2014 at 15:57:36 UTC, Jacob Carlborg wrote:
> On 2014-10-17 07:24, Sergey wrote:
>
>> Or if I already have a byte string in cp1251 how to translate it into a
>> normal string?
>
> Doesn't Sql Server uses UC2?

I finished two functions: utf8 -> sp1251 and sp1251 -> utf8, and it works well for me.

What about the date format?
I am getting from the sql server with the date field with this value:
Jan 22 2007 12:00:00:000AM

And it is the same on .d program and in .c program. Unfortunately, while I could not find how to change the date format in the example: DD.MM.YYYY.
1 2 3 4
Next ›   Last »