- 论坛徽章:
- 0
|
偶初用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连接远程数据库是成功的。
麻烦各位老大们帮我看一下,还缺少什么配置,或者哪里有配置有误的,或者编译时连接的库文件有问题...,多谢,多谢... |
|