网站首页|中心简介|课程详解|师资力量|新闻动态|招生问答|就业广场|在线报名|学员天地|网络学院|在线留言|证书查询
大兴北大青鸟logo
北大青鸟教程网
学院首页|网络安全|操作系统|服务器|数据库|编程开发|组网建网|网络应用|网页设计|办公软件|注册表|黑客攻防
WIN XP  |  WIN 2000/2003  |  LINUX/UNIX  |  TCP/IP  |  IPV6  |  APACHE  |  DHCP  |  SENDMAIL  |  WLAN
局域网  |  广域网  |  综合布线  |  网络存储  |  入侵检测  |  防火墙  |  交换机  |  病毒防治
北大青鸟大兴中心QQ在线咨询 北大青鸟大兴中心QQ在线咨询 北大青鸟大兴中心QQ在线咨询 北大青鸟大兴中心QQ在线咨询 北大青鸟大兴中心QQ在线咨询
田老师
李老师
王老师
谈老师
臧老师
   当前位置:主页>网络学院>数据库>Sybase教程>>Sybase ESQLC Precompiler11.1 for UnixWare存在的BUG



 Sybase ESQLC Precompiler11.1 for UnixWare存在的BUG

文章来源:http://www.bdqnht.com/ 文章作者:北大青鸟 发布时间:2007-12-19

前段时间在将原先linux环境下的程序移到unixware下时发现了一些问题,主要是涉及操作数据库时直接将表中的一条记录select到与之对应的结构中时预编译器报错。下面是用于测试的程序和现象。

测试程序:
aaa.cp
#include <sybfront.h>; 
#include <sybdb.h>;

EXEC SQL include sqlca;

long SQLCODE;

EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL WHENEVER SQLWARNING CONTINUE;
EXEC SQL WHENEVER NOT FOUND CONTINUE;

#ifndef SQLMESSAGE
#define SQLMESSAGE  sqlca.sqlerrm.sqlerrmc
#endif

EXEC SQL BEGIN DECLARE SECTION;
struct aaa {
    int i;
    char s[5];
    double d;
};
EXEC SQL END DECLARE SECTION;

main()
{
EXEC SQL BEGIN DECLARE SECTION;
字串6

    struct aaa aaa;
EXEC SQL END DECLARE SECTION;

    if( ConnectDB( "sa", "", NULL ) < 0 )
    {
        printf( "connect DB error!\n" );
        exit( -1 );
    }

    memset( &aaa, 0, sizeof(aaa) );

    EXEC SQL select * into :aaa from aaa;
    if( SQLCODE != 0 )
    {
        printf( "select error! SQLCODE[%d] %s\n", SQLCODE, SQLMESSAGE );
        CloseDB(); 字串8
        exit( -1 );
    }

    printf( "i=[%d]\n", aaa.i );
    printf( "s=[%s]\n", aaa.s );
    printf( "d=[%.2lf]\n", aaa.d );

    CloseDB();
}
字串7


其中ConnectDB()、CloseDB()是外部自定义的函数。

对以上代码编译、执行,无任何问题。

下面是使用多个结构的情况,对结构定义部分进行了修改,增加了一个新的结构定义。其它代码未动

EXEC SQL BEGIN DECLARE SECTION;

struct aaa {
    int i;
    char s[5];
    double d;
};

struct bbb{
    int a;
    char b[5];
    char c[30];
    double d;
};

EXEC SQL END DECLARE SECTION;

字串1



再次编译,问题出现了!
cc -c -g  -I/home/sybase/include aaa.c
UX:acomp: WARNING: "aaa.cp", line 68: improper member use: a
UX:acomp: WARNING: "aaa.cp", line 68: improper member use: b
UX:acomp: WARNING: "aaa.cp", line 68: improper member use: c

将两个结构定义更换位置:

EXEC SQL BEGIN DECLARE SECTION;

struct bbb{
    int a;
    char b[5];
    char c[30];
    double d;
};

struct aaa {
    int i;
    char s[5];
    double d;
};

EXEC SQL END DECLARE SECTION; 字串8
字串1

然后重新编译,一切OK!

可见在使用struct时,cpre用到的是在“EXEC SQL END DECLARE SECTION”语句之前的最后定义的结构。

换一种定义方法:

EXEC SQL BEGIN DECLARE SECTION;

typedef struct aaa {
    int i;
    char s[5];
    double d;
} AAA;

typedef struct bbb{
    int a;
    char b[5];
    char c[30];
    double d;
} BBB;

EXEC SQL END DECLARE SECTION;
字串8


修改程序中对结构的引用

EXEC SQL BEGIN DECLARE SECTION;
    AAA aaa;
EXEC SQL END DECLARE SECTION;

字串5



然后重新编译程序,一切正常。


由以上测试可知,在Sybase ESQL/C Precompiler/11.1 for UnixWare(EBF9076)环境下,使用结构的形式操作数据表存在问题。变通的方法是将struct作为自定义的数据类型(typedef)。

鉴于sybase已经于2003年停止了对unixware下版本的支持,建议大家还是尽量避免继续在sco平台(openserver、unixware)下进行sybase的开发!


  注:本站资源收集均来子互联网,如有侵权请告知,我们将第一时间删除.
  
上一篇:Sybase for linux安装步骤   下一篇:sybase整库复制步骤

::免费IT讲座::

时间:周六、日 下午14:00
地点:北大青鸟大兴校区
讲座内容:
     1、职业规划篇。
     2、日常实用技术讲座

主讲师:
     高级金牌讲师
 
大兴校区电话:69203100
 马甸校区电话:82011433
 
             免费订座报名

::免费讲座报名::
姓  名:
性  别:
学  历:
Q  Q:
电  话:
我是从:
知道的



北大青鸟|网络工程师|北京北大青鸟
  友情链接:北大青鸟集团 印度APTECH公司 北大青鸟APTECH公司 北京大学 北大青鸟马甸校区 上海北大青鸟 深圳北大青鸟 无锡北大青鸟 厦门北大青鸟 深圳北大青鸟 邵阳北大青鸟 北大青鸟镇江学府 深圳北大青鸟 徐州北大青鸟
中心图片
中心外景 前台接待区 网络教学区 路由及交换设备 机房环境 项目实践 职业规划师为同学解惑 学员积极回答问题 学员合影 学生宿舍 全国十佳中心奖杯 全国十佳中心奖牌 杰出贡献中心奖杯
  网站地图 | 联系我们 | 诚聘英才 | 在线留言 | 加入收藏 | 设为首页
 

版权所有 © 2004-2008 北京网络时尚信息技术有限公司
北大青鸟双合华腾网络工程师培训中心
大兴校区:大兴黄村长途汽车站东北角
招生热线:010-69203100/01 邮政编码:102600
马甸校区:北三环中路马甸桥东北角商房大厦(国美电器)626
招生热线:010-82011433/32 邮政编码:100029

网络工程师培训 网络工程师 北大青鸟培训 北大青鸟培训中心 网络培训
北大青鸟 北大青鸟网络工程师 北京北大青鸟 电脑培训 计算机培训
北大青鸟图标