免费注册 查看新帖 |

Chinaunix

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

Exec sql include的编译问题 ,郁闷! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-04 19:47 |只看该作者 |倒序浏览
头文件:test.h
typedef struct
{
        char c1[20];
        char c2[20];
        char c3[20];
}charc_struct;

typedef struct
{
  char c4;
  charc_struct charc;
}tvi_struct;

#include <sqltypes.h>;
#include <string.h>;

Exec Sql include sqlca.h ;

Exec Sql INCLUDE test.h;


dbtestdb.ec:

void main()
{


EXEC SQL begin declare section;      
    tvi_struct *tvi;   
EXEC SQL end declare section;


tvi_struct ss;
tvi=&amp;

$CONNECT TO :testdb@testdb;

sprintf(tvi->;charc.c1,"%s","1111-11-11";
$insert into test1 (r1,r2,r3) values(:tvi->;charc.c1,:tvi->;charc.c1,:tvi->;charc.c1);
}

编译错误:
/usr/informix/bin/esql -D NEW -D INFO -DDEBUG -I/usr/informix/incl/esql
-I/usr/informix/incl/tools -I../include -c -b elf dbtest.ec
esqlc: "dbtest.ec", line 34: Error -33200: Invalid statement on symbol 'tvi_struct'.
esqlc: "dbtest.ec", line 57: Error -33037: 'charc' is not a component of record'tvi'.
2 error(s) found
*** Error code 1 (bu21)

论坛徽章:
0
2 [报告]
发表于 2003-12-05 08:17 |只看该作者

Exec sql include的编译问题 ,郁闷!

typedef struct
{
char c4;
charc_struct charc;
}tvi_struct;


嵌套定义struct,是不是编译器不认识。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-12-05 08:56 |只看该作者

Exec sql include的编译问题 ,郁闷!

用EXEC SQL来定义那些struct,并且定义和使用在同一个文件

论坛徽章:
0
4 [报告]
发表于 2003-12-05 09:10 |只看该作者

Exec sql include的编译问题 ,郁闷!

必须要放在同一个文件中吗,这是我的一个测试程序,实际应用中这个头文件要被很多c文件共用,这样的话就很麻烦了

论坛徽章:
0
5 [报告]
发表于 2003-12-05 09:12 |只看该作者

Exec sql include的编译问题 ,郁闷!

不是嵌套的问题,我做过试验,嵌套是允许的

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-12-05 09:33 |只看该作者

Exec sql include的编译问题 ,郁闷!

如果用C的语法定义struct,那么在什么地方使用都是可以的

如果你的struct中使用了和数据库相关的东西,例如你希望struct能够按照数据库的意愿处理datetime。那么这个结构定义为E/SQL的可能对你的处理好一些。

如果你希望这个结构都能够使用,那么用C的语法。

论坛徽章:
0
7 [报告]
发表于 2003-12-05 09:42 |只看该作者

Exec sql include的编译问题 ,郁闷!

我是想用exec定义struct的,但是在头文件中直接使用exec sql 定义是不允许的,所以我才会想到用exec sql include,但是用了exec sql include后编译器还是不识别

论坛徽章:
0
8 [报告]
发表于 2003-12-05 11:36 |只看该作者

Exec sql include的编译问题 ,郁闷!

当然可以在.h文件中定义了。如:
EXEC SQL begin declare section; //开始
    ......
    ......

EXEC SQL end declare section; //结束

论坛徽章:
0
9 [报告]
发表于 2003-12-06 20:10 |只看该作者

Exec sql include的编译问题 ,郁闷!

这个问题我也碰到过,困惑了很长时间,是了很多方法,后来用了一个很怪的方法实现了,你可以试一试
两点原则,
1,不要用typedef struct, 如果要用结构名来定义变量,用宏定义
2,定义的指针变量紧跟在结构定义后
对于你的例子,可以这样:

头文件:test.h
#define TVI_STRUCT struct tvi_struct
...
struct tvi_struct
{
char c4;
charc_struct charc;
} *pTvi;

...

*.c文件:

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL INCLUDE test;
... //其他的变量定义
EXEC SQL END DECLARE SECTION;

TVI_STRUCT gTvi;
...


这个方法很不正规,但很好用...如果有其他好方法,关注中

论坛徽章:
0
10 [报告]
发表于 2007-10-18 16:47 |只看该作者
a.c :

main()
{
   exec sql include sqlca;
   printf("hello.\n");
}

     
test@test:/u/test>gcc -o a a.c
a.c: In function `main':
a.c:3: error: `exec' undeclared (first use in this function)
a.c:3: error: (Each undeclared identifier is reported only once
a.c:3: error: for each function it appears in.)
a.c:3: error: syntax error before "sql"

OS:linux
请大侠们指教.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP