1

我正在使用带有 CS_VERSION_100 的 sybase 15/12.5

当我尝试使用 ct_param 时出现错误:

An illegal value of 0 was placed in the status field of the CS_DATAFMT structure.

但是,我创建了我的结构。

CS_DATAFMT datafmt;
strcpy(datafmt.name, "@interface");
datafmt.namelen = 11;
datafmt.datatype=CS_INT_TYPE;
datafmt.maxlength=4;
datafmt.status=CS_INPUTVALUE;
datafmt.locale = NULL;
datafmt.format = 0;
datafmt.scale = -99999;
datafmt.count = 1;
datafmt.usertype=0;

ct_param(command, &datafmt, /* value 300 */, 4, 0)

当我使用 varchar 执行此操作时,它返回 1(真),但它当然告诉我我正在尝试将 varchar 参数放在 int 参数的位置。我更改为上一个版本,现在似乎 sybase 从 maxlength 获取状态值。现在它告诉我该值为 4。如果我将 maxlength 更改为 256,它可以工作...

4

2 回答 2

0

看起来您正在设置一个返回变量 - 根据The Fine Manual ,您需要使用 CS_RETURN 作为 datafmt.status,而不是 CS_INPUTVALUE

于 2013-03-26T02:17:35.060 回答
0

问题是,我正在为 64 位编译,并且每个 64 位的 sybase 程序都需要一个 -DSYB_LP64。然后我用 64 位编译,但 sybase 类型是 32 位,然后结构就乱了。

于 2013-04-23T14:10:15.283 回答