免费注册 查看新帖 |

Chinaunix

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

郁闷啊,我的ESQL/C的程序总是 core dump [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-07 14:21 |只看该作者 |倒序浏览
偶初用informix 及 esql/c,我的例子程序client.ec编译通过,可总是core dump,不知道是不是哪里配置有问题,急、气死我了

HP-UX 11i +server + esql/c,其实我安装这个server只是为了esql能用,我要连接的是远程的informix数据库。
以下是相关文件的配置信息:
  .porfile(环境变量)
  INFORMIXDIR=/informix
  INFORMIXSERVER=/nsmp_online_net

  $INFORMIXDIR/etc/sqlhosts:
  nsmp_online     onipcshm        RDB          sqlexec
  nsmp_online_net onsoctcp      RDB         sqlexec_net

  /etc/services:
  sqlexec         9002/tcp          #RDB
  sqlexec_net     9002/tcp       #RDB

  /etc/hosts:
  139.100.168.120 RDB

makefile:
INFORMIX_HOME=/informix
INCL_I=$(INFORMIX_HOME)/incl/esql
LIB_H_CC=-lnsl -lm -lc -lsec -lcl
LIB_I=$(INFORMIX_HOME)/lib
LIB_I_CC=-L$(INFORMIX_HOME)/lib -lixasf -L$(INFORMIX_HOME)/lib/esql -lsql -lixgls -ltos -ltgen -ltos $(INFORMIX_HOME)/lib/esql/checkapi.o
BIN_I=$(INFORMIX_HOME)/bin
CC=/usr/bin/cc
CCFLAGS=-Aa +DAportable -Wl, -w

ESQLS = \
        client.ec

CSRC = \
        client.c

OBJS = $(CSRC:.c=.o)

EXES = \
        client

all: $(CSRC) $(EXES)



client.c:client.ec
        $(BIN_I)/esql -c client.ec -I$(INCL_I)

client:
        $(CC)  $(CCFLAGS) -o client client.c -I$(INCL_I) $(LIB_I_CC)

clean:
        rm -rf $(OBJS) $(CSRC) client

client.ec:

#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;

EXEC SQL include sqlca;
EXEC SQL include sqlda;
EXEC SQL include varchar;
EXEC SQL include sqltypes;

EXEC SQL BEGIN DECLARE SECTION;  
        char db_user[20];  /* 用户名   */
        char db_pass[20];  /* 用户口令 */
        char db_serv[20];  /* 数据库名 */

        int Var_on_ERRCODE;
        char Var_is_TYPE_ID[4 + 1];
        char Var_is_DEVICENUM[15 + 1];
        char Var_os_LASTDATE[8 + 1];
        float Var_on_BALANCE;
        float Var_on_LATEFEE;
        float Var_on_DEBT;
EXEC SQL END   DECLARE SECTION;

void main()
{
        strcpy(db_serv, "nsmp_online_net";
        strcpy(db_user, "informix";
        strcpy(db_pass, "informix";

        EXEC SQL CONNECT to :db_serv user:db_user using:db_pass;

   if ((sqlca.sqlcode) == 0)
   {
        printf("Connect to database ...\n";
   }
   else
   {
        printf("Connect failed ...\n";
        exit(1);
   }

        EXEC SQL EXECUTE PROCEDURE P_TEL_BALANCE(:Var_is_DEVICENUM , :Var_is_TYPE_ID)
                INTO :Var_on_DEBT , :Var_on_LATEFEE , :Var_on_BALANCE , :Var_os_LASTDATE , :Var_on_ERRCODE;

        if(sqlca.sqlcode != 0)
        {
                printf("call store procedure failed.\n";
        }

        /*EXEC SQL COMMIT;*/
        EXEC SQL DISCONNECT current;       

        if(sqlca.sqlcode != 0)
        {
                printf("disconnect failed.\n";
        }
        else
        {
            printf("%d\n",Var_on_ERRCODE);
        }
            
    exit(0);
}

程序client每次执行到EXEC SQL CONNECT to...时,系统报错:bus error(coredump),如果我把EXEC SQL CONNECT to...更换为EXEC SQL  DATABASE...时,程序继续执行,但是执行到EXEC SQL EXECUTE PROCEDURE ...时,系统报错:bus error(coredump)。我用dbaccess连接远程数据库是成功的。

   
  麻烦各位老大们帮我看一下,还缺少什么配置,或者哪里有配置有误的,或者编译时连接的库文件有问题...,多谢,多谢...

论坛徽章:
0
2 [报告]
发表于 2004-08-07 16:13 |只看该作者

郁闷啊,我的ESQL/C的程序总是 core dump

我把makefile中连接的库文件修改:
LIB_I_CC=-L$(INFORMIX_HOME)/lib -lixasf -L$(INFORMIX_HOME)/lib/esql \
                -lixsql -lixgls -lixgen -lixos -lixglx $(INFORMIX_HOME)/lib/esql/checkapi.o

现在执行EXEC SQL CONNECT to ...的时候,不再报错:bus error(coredump),但是连接失败sqlcode=-329,是不是还有什么环境变量没有配置。目前,我配置了两个环境变量INFORMIXDIR, INFORMIXSERVER。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP