Chinaunix

标题: Exec sql include的编译问题 ,郁闷! [打印本页]

作者: txks    时间: 2003-12-04 19:47
标题: Exec sql include的编译问题 ,郁闷!
头文件: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)
作者: fush76    时间: 2003-12-05 08:17
标题: Exec sql include的编译问题 ,郁闷!
typedef struct
{
char c4;
charc_struct charc;
}tvi_struct;


嵌套定义struct,是不是编译器不认识。
作者: 蓝色键盘    时间: 2003-12-05 08:56
标题: Exec sql include的编译问题 ,郁闷!
用EXEC SQL来定义那些struct,并且定义和使用在同一个文件
作者: txks    时间: 2003-12-05 09:10
标题: Exec sql include的编译问题 ,郁闷!
必须要放在同一个文件中吗,这是我的一个测试程序,实际应用中这个头文件要被很多c文件共用,这样的话就很麻烦了
作者: txks    时间: 2003-12-05 09:12
标题: Exec sql include的编译问题 ,郁闷!
不是嵌套的问题,我做过试验,嵌套是允许的
作者: 蓝色键盘    时间: 2003-12-05 09:33
标题: Exec sql include的编译问题 ,郁闷!
如果用C的语法定义struct,那么在什么地方使用都是可以的

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

如果你希望这个结构都能够使用,那么用C的语法。
作者: txks    时间: 2003-12-05 09:42
标题: Exec sql include的编译问题 ,郁闷!
我是想用exec定义struct的,但是在头文件中直接使用exec sql 定义是不允许的,所以我才会想到用exec sql include,但是用了exec sql include后编译器还是不识别
作者: hzhrh    时间: 2003-12-05 11:36
标题: Exec sql include的编译问题 ,郁闷!
当然可以在.h文件中定义了。如:
EXEC SQL begin declare section; //开始
    ......
    ......

EXEC SQL end declare section; //结束
作者: 大奔原    时间: 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;
...


这个方法很不正规,但很好用...如果有其他好方法,关注中
作者: liang_li_yun    时间: 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
请大侠们指教.
作者: liang_li_yun    时间: 2007-10-18 16:49
exec sql指令的使用与那些环境有关系呢?请高人指点?
作者: liang_li_yun    时间: 2007-10-18 16:57
exec sql指令的使用与那些环境有关系呢?请高人指点?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2