免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4142 | 回复: 11
打印 上一主题 下一主题

linux开发SYBASE数据库应用一问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-30 17:00 |只看该作者 |倒序浏览
使用ESQL

用cpre预编译时,遇到
EXEC SQL SELECT *FROM tablename INTO :tablestru;
就会提示
M_STRUCT_NOTFOUND,Structure/union definition not found in scope in test.cpre,
at line: 12.

但是此变量tablestru已经定义在一个头文件abc.h中,
在主程序内#include "abc.h",
并使用
EXEC SQL BEGIN DECLARE SECTION;
TABLESTRU tablestru;
EXEC SQL END DECLARE SECTION;
进行了定义,这是怎么回事?这一写法在AIX上只要改为EXEC SQL INCLUDE "abc.h";是可以编译过的

[ 本帖最后由 susanita 于 2007-3-30 17:15 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-03-31 13:46 |只看该作者
没有人知道吗?
后来发现,如果在abc.h头文件中
typedef {
...
}TABLESTRU
这一结构,编译就会提示Structure/union definition not found in scope in test.cpre,
如果将此结构定义在main程序中,就没有问题。
是不是linux下的编译必须如此?

论坛徽章:
0
3 [报告]
发表于 2007-04-01 16:30 |只看该作者
abc.h
EXEC SQL BEGIN DECLARE SECTION;
typedef struct tagtablestru{
    char column1[10];
    char column2[10];
}TABLESTRU;
EXEC SQL END DECLARE SECTION;

#include <sybtesql.h>
#include "abc.h"

EXEC SQL INCLUDE sqlca;

int main()
{
   EXEC SQL BEGIN DECLARE SECTION;
    TABLESTRU tablestru;
   EXEC SQL END DECLARE SECTION;

    EXEC SQL SELECT * FROM  tablename  INTO :tabletru;
    printf("\n [%d]\n", sqlca.sqlcode );

    return 0;
}

请问代码有错误吗?这样写在AIX上是可以编译通过的,linux不行

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
4 [报告]
发表于 2007-04-02 12:30 |只看该作者
#include "abc.h"
应该是写 exec sql include "abc.h"

论坛徽章:
0
5 [报告]
发表于 2007-04-02 14:50 |只看该作者
如果在main程序里写EXEC SQL INCLUDE "abc.h"
#include <sybtesql.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE “abc.h";
int main()
{
   EXEC SQL BEGIN DECLARE SECTION;
    TABLESTRU tablestru;
   EXEC SQL END DECLARE SECTION;

   ..........
   return 0;
}
预编译出的错误
cpre test.cpre
M_INTERNAL_ERROR,Fatal Internal Error at Line 207 File generic/util/filestak.c:
Argument inconsistency error. Please contact a Sybase representative.

论坛徽章:
0
6 [报告]
发表于 2007-04-02 14:55 |只看该作者
是不是SYBASE的链接库不全?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
7 [报告]
发表于 2007-04-02 17:11 |只看该作者
不用.h文件,直接在main中定义一下结构试试

论坛徽章:
0
8 [报告]
发表于 2007-04-02 17:42 |只看该作者
不用.h文件,直接在main里定义struct,

编译,运行都是可以的


#include <sybtesql.h>

EXEC SQL INCLUDE sqlca;

EXEC SQL BEGIN DECLARE SECTION;
typedef struct tagtablestru{
    char column1[10];
    char column2[10];
}TABLESTRU;
EXEC SQL END DECLARE SECTION;

int main()
{
   EXEC SQL BEGIN DECLARE SECTION;
    TABLESTRU tablestru;
   EXEC SQL END DECLARE SECTION;

   。。。。/*连接数据库*/
    EXEC SQL SELECT * FROM  tablename  INTO :tabletru;
    printf("\n [%d]\n", sqlca.sqlcode );

    return 0;
}

论坛徽章:
0
9 [报告]
发表于 2007-04-02 17:43 |只看该作者
难道linux+sybase的esql编程不能用.h定义结构?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
10 [报告]
发表于 2007-04-03 08:32 |只看该作者
不会的,你执行exec sql include sqlca,不也是一个定义struct的.h
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP