查看: 5061|回复: 10
[PRO*C]
ProC中函数返回一个结构体时出错,请各位高手帮忙看一下!谢了
电梯直达
发表于 2004-10-18 16:01
|
只看该作者
|倒序浏览
|阅读模式
part.c: In function `main':
part.c:222: warning: assignment makes pointer from integer without a cast
part.c: At top level:
part.c:310: warning: type mismatch with previous implicit declaration
part.c:222: warning: previous implicit declaration of `getPathNameTbl'
part.c:310: warning: `getPathNameTbl' was previously implicitly declared to retu
rn `int'
part.c: In function `getPathNameTbl':
part.c:313: warning: assignment from incompatible pointer type
part.c:325: `file_type1' undeclared (first use in this function)
part.c:325: (Each undeclared identifier is reported only once
part.c:325: for each function it appears in.)
part.c:328: incompatible types in assignment
part.c:333:39: warning: unknown escape sequence: '\216'
part.c:340: incompatible types in assignment
part.c:346: incompatible types in assignment
part.c:351: incompatible types in assignment
part.c:356: incompatible types in assignment
part.c:361: incompatible types in assignment
part.c:366: incompatible types in assignment
part.c:371: incompatible types in assignment
part.c:385: dereferencing pointer to incomplete type
part.c:386: dereferencing pointer to incomplete type
part.c:387: dereferencing pointer to incomplete type
part.c:389: warning: return from incompatible pointer type
part.c:395:45: warning: unknown escape sequence: '\216'
楼主|
发表于 2004-10-18 17:23
|
只看该作者
#include
#include
#include
#include
EXEC ORACLE OPTION (ORACA=YES);
EXEC ORACLE OPTION (RELEASE_CURSOR=YES);
typedef char asciz[80];
EXEC SQL TYPE asciz IS STRING(80) REFERENCE;
int main(tblType)
char *tblType;
{
EXEC SQL BEGIN DECLARE SECTION;
char *wk_strUser;
char *wk_strPwd;
char *wk_strDBName;
EXEC SQL END DECLARE SECTION;
asciz inpra_path;
asciz inpra_txtname;
asciz inpra_emp;
int outpra_path;
#define MAX 80
struct result
{
char file_path[MAX];
char file_name[MAX];
char table_name[MAX];
};
struct result *ret_info;
wk_strUser = getenv("MK_ORACLE_USR"
;
printf("USERNAME=%s\n",wk_strUser);
wk_strPwd = getenv("MK_ORACLE_PWD"
;
printf("PASSWORD=%s\n",wk_strPwd);
wk_strDBName = getenv("MK_ORACLE_SID"
;
printf("SID=%s\n",wk_strDBName);
if (DbLogin(wk_strUser,wk_strPwd,wk_strDBName)!=0)
{
return(1);
exit(1);
}
EXEC SQL WHENEVER SQLERROR DO sql_error();
oraca.orastxtf = ORASTFERR;
ret_info= getPathNameTbl();
sprintf(inpra_path,"%s",ret_info.file_path);
sprintf(inpra_txtname,"%s",ret_info.file_name);
sprintf(inpra_emp,"%s",ret_info.table_name);
EXEC SQL EXECUTE
BEGIN
GCYKGBM00B(:inpra_path, :inpra_txtname, :inpra_emp,
utpra_path);
end;
END-EXEC;
DbLogout();
exit(0);
}
struct result * getPathNameTbl()
{
char file_name1[MAX],file_path1[MAX],table_name1[MAX];
struct resultn *ret_info;
ret_info = (struct result *)malloc(sizeof(struct result));
memset(file_path1,0,MAX);
memset(file_name1,0,MAX);
memset(table_name1,0,MAX);
char wk_ErrorFlag[1];
char wk_eEroorNo[3];
char wk_ErrorInfo[256];
char *file_type;
file_type1=getenv("wk_FileType"
;
printf("\n %s \n",file_type);
if ((file_path1=getenv("GC_ENV_GBSSSEND_DIR"
)==NULL)
{
strcpy(wk_ErrorFlag,"1"
;
strcpy(wk_eEroorNo,"004"
;
strcpy(wk_ErrorInfo,"路径名未能取得"
;
}
else
{
if (strcmp(file_type1,"GCYKSHOHIN_SEND"
==0)
{
file_name1 =getenv("GC_ENV_YKSHOHIN_SEND"
;
strcpy(table_name1,"GCM_SHOHIN");
}
else if (strcmp(file_type1,"GCYKSSV_TORIKUMI_SEND")==0)
{
file_name1=getenv("GCYKSSV_TORIKUMI_SEND");
strcpy(table_name1,"GCM_TORIKUMI");
}
else if (strcmp(file_type1,"GCYKSSV_HINBETSU_SEND")==0)
{
file_name1=getenv("GCYKSSV_HINBETSU_SEND");
strcpy(table_name1,"GCM_SSV_HINBETSU");
}
else if (strcmp(file_type1,"GCYKPOS_VCD_SEND")==0)
{
file_name1=getenv("GCYKPOS_VCD_SEND");
strcpy(table_name1,"GCM_POS_VCD");
}
else if (strcmp(file_type1,"GCYKSSV_SAGYO_SEND")==0)
{
file_name1=getenv("GCYKSSV_SAGYO_SEND");
strcpy(table_name1,"GCM_GAISHO_SAGYO");
}
else if (strcmp(file_type1,"GCYKYOTO_SEND")==0)
{
file_name1=getenv("GCYKYOTO_SEND");
strcpy(table_name1,"GCM_YOTO");
}
else if (strcmp(file_type1,"GCYKHAISO_SEND")==0)
{
file_name1=getenv("GCYKHAISO_SEND");
strcpy(table_name1,"GCM_HAISO");
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"005");
strcpy(wk_ErrorInfo,"ファイル類型の引数不正確");
}
}
if (file_name1!=NULL)
{
strcpy(ret_info->file_path,file_path1);
strcpy(ret_info->file_name,file_name1);
strcpy(ret_info->table_name,table_name1);
return (ret_info);
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"006");
strcpy(wk_ErrorInfo,"文件名未能取得");
}
}
int DbLogin(userid,passwd,conect)
char *userid;
char *passwd;
char *conect;
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20];
char password[20];
char dbstring[20];
EXEC SQL END DECLARE SECTION;
sprintf(username,"%s",userid);
sprintf(password,"%s",passwd);
if ( conect == NULL )
{
EXEC SQL CONNECT :username IDENTIFIED BY
assword;
}
else
{
sprintf(dbstring,"%s",conect);
EXEC SQL CONNECT :username IDENTIFIED BY
assword using :dbstring;
}
if( QueryCondition()!=0 ) return(1);
return(0);
}
楼主|
发表于 2004-10-18 17:26
|
只看该作者
改成上面的代码后,现在报错这样了!
part.c: In function `main':
part.c:208: warning: assignment makes pointer from integer without a cast
part.c: At top level:
part.c:229: warning: type mismatch with previous implicit declaration
part.c:208: warning: previous implicit declaration of `get_path'
part.c:229: warning: `get_path' was previously implicitly declared to return `in
t'
part.c: In function `get_path':
part.c:247: incompatible types in assignment
part.c:252:39: warning: unknown escape sequence: '\216'
part.c:260: incompatible types in assignment
part.c:266: incompatible types in assignment
part.c:271: incompatible types in assignment
part.c:276: incompatible types in assignment
part.c:281: incompatible types in assignment
part.c:286: incompatible types in assignment
part.c:291: incompatible types in assignment
part.c:316:45: warning: unknown escape sequence: '\216'
发表于 2004-10-19 08:46
|
只看该作者
get_path, where, please give the full source.
楼主|
发表于 2004-10-19 08:56
|
只看该作者
#include
#include
#include
#include
#include
#define MAX 80
struct result
{
char file_path[MAX];
char file_name[MAX];
char table_name[MAX];
};
int sql_error()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
DbRollback();
return(1);
exit(1);
}
int main()
{
char *wk_strUser;
char *wk_strPwd;
char *wk_strDBName;
VARCHAR inpra_path[MAX];
VARCHAR inpra_txtname[MAX];
VARCHAR inpra_emp[MAX];
struct result *pp;
wk_strUser = getenv("MK_ORACLE_USR"
;
printf("USERNAME=%s\n",wk_strUser);
wk_strPwd = getenv("MK_ORACLE_PWD"
;
printf("PASSWORD=%s\n",wk_strPwd);
wk_strDBName = getenv("MK_ORACLE_SID"
;
printf("SID=%s\n",wk_strDBName);
if (DbLogin(wk_strUser,wk_strPwd,wk_strDBName)!=0)
{
return(1);
exit(1);
}
EXEC SQL WHENEVER SQLERROR DO sql_error();
oraca.orastxtf = ORASTFERR;
pp= get_path();
strcpy(inpra_path.arr,pp->file_path);
inpra_path.len=strlen(inpra_path.arr);
strcpy(inpra_txtname.arr,pp->file_name);
inpra_txtname.len=strlen(inpra_txtname.arr);
strcpy(inpra_emp.arr,pp->table_name);
inpra_emp.len=strlen(inpra_emp.arr);
printf("%s\n",inpra_path);
printf("%s\n",inpra_txtname);
printf("%s\n",inpra_emp);
DbLogout();
puts("\nHave a good day!\n"
;
return (1);
exit(0);
}
struct result * get_path()
{
char file_name1[MAX],file_path1[MAX],table_name1[MAX];
struct result *ret_info;
ret_info = (struct result *)malloc(sizeof(struct result));
memset(file_path1,0,MAX);
memset(file_name1,0,MAX);
memset(table_name1,0,MAX);
char wk_ErrorFlag[1];
char wk_eEroorNo[3];
char wk_ErrorInfo[256];
char *file_type;
file_type=getenv("wk_FileType"
;
printf("\n %s \n",file_type);
if ((file_path1=getenv("GC_ENV_GBSSSEND_DIR"
)==NULL)
{
strcpy(wk_ErrorFlag,"1"
;
strcpy(wk_eEroorNo,"004"
;
strcpy(wk_ErrorInfo,"路径名未能取得"
;
exit (1);
}
else
{
if (strcmp(file_type,"GCYKSHOHIN_SEND"
==0)
{
file_name1 =getenv("GC_ENV_YKSHOHIN_SEND");
strcpy(table_name1,"GCM_SHOHIN");
/*sprintf(dbstring,"%s",conect);*/
}
else if (strcmp(file_type,"GCYKSSV_TORIKUMI_SEND")==0)
{
file_name1=getenv("GCYKSSV_TORIKUMI_SEND");
strcpy(table_name1,"GCM_TORIKUMI");
}
else if (strcmp(file_type,"GCYKSSV_HINBETSU_SEND")==0)
{
file_name1=getenv("GCYKSSV_HINBETSU_SEND");
strcpy(table_name1,"GCM_SSV_HINBETSU");
}
else if (strcmp(file_type,"GCYKPOS_VCD_SEND")==0)
{
file_name1=getenv("GCYKPOS_VCD_SEND");
strcpy(table_name1,"GCM_POS_VCD");
}
else if (strcmp(file_type,"GCYKSSV_SAGYO_SEND")==0)
{
file_name1=getenv("GCYKSSV_SAGYO_SEND");
strcpy(table_name1,"GCM_GAISHO_SAGYO");
}
else if (strcmp(file_type,"GCYKYOTO_SEND")==0)
{
file_name1=getenv("GCYKYOTO_SEND");
strcpy(table_name1,"GCM_YOTO");
}
else if (strcmp(file_type,"GCYKHAISO_SEND")==0)
{
file_name1=getenv("GCYKHAISO_SEND");
strcpy(table_name1,"GCM_HAISO");
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"005");
strcpy(wk_ErrorInfo,"ファイル類型の引数不正確");
exit (1);
}
}
printf("\n%s\n",file_name1);
if (file_name1!=NULL)
{
strcpy(ret_info->file_path,file_path1);
strcpy(ret_info->file_name,file_name1);
strcpy(ret_info->table_name,table_name1);
return (ret_info);
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"006");
strcpy(wk_ErrorInfo,"文件名未能取得");
exit(1);
}
}
int DbLogin(userid,passwd,conect)
char *userid;
char *passwd;
char *conect;
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20];
char password[20];
char dbstring[20];
EXEC SQL END DECLARE SECTION;
sprintf(username,"%s",userid);
sprintf(password,"%s",passwd);
if ( conect == NULL )
{
EXEC SQL CONNECT :username IDENTIFIED BY
assword;
}
else
{
sprintf(dbstring,"%s",conect);
EXEC SQL CONNECT :username IDENTIFIED BY
assword using :dbstring;
}
if( QueryCondition()!=0 ) return(1);
return(0);
}
int DbLogout()
{
EXEC SQL COMMIT WORK RELEASE;
return(0);
}
int DbCommit()
{
EXEC SQL COMMIT WORK;
return(0);
}
int DbRollback()
{
EXEC SQL ROLLBACK WORK;
return(0);
}
int QueryCondition()
{
int i;
char *p;
if( sqlca.sqlcode!=0 && sqlca.sqlcode!=1403 && sqlca.sqlcode!=-1405 )
{
i=(int)sqlca.sqlerrm.sqlerrml;
p=sqlca.sqlerrm.sqlerrmc;
sqlca.sqlerrm.sqlerrmc[i-1]='\0';
if( sqlca.sqlcode==-1012 )
{
return(1);
}
else
{
return(1);
}
}
else
{
return(0);
}
}
发表于 2004-10-19 09:56
|
只看该作者
#include
#include
#include
#include
#include
#define MAX 80
EXEC SQL BEGIN DECLARE SECTION
struct result
{
char file_path[MAX];
char file_name[MAX];
char table_name[MAX];
};
struct result *pp;
char *wk_strUser;
char *wk_strPwd;
char *wk_strDBName;
VARCHAR inpra_path[MAX];
VARCHAR inpra_txtname[MAX];
VARCHAR inpra_emp[MAX];
EXEC SQL END DECLARE SECTION;
struct result *get_path()
{
char file_name1[MAX],file_path1[MAX],table_name1[MAX];
struct result *ret_info;
ret_info = (struct result *)malloc(sizeof(struct result));
memset(file_path1,0,MAX);
memset(file_name1,0,MAX);
memset(table_name1,0,MAX);
char wk_ErrorFlag[1];
char wk_eEroorNo[3];
char wk_ErrorInfo[256];
char *file_type;
file_type=getenv("wk_FileType"
;
printf("\n %s \n",file_type);
if ((file_path1=getenv("GC_ENV_GBSSSEND_DIR"
)==NULL)
{
strcpy(wk_ErrorFlag,"1"
;
strcpy(wk_eEroorNo,"004"
;
strcpy(wk_ErrorInfo,"路径名未能取得"
;
exit (1);
}
else
{
if (strcmp(file_type,"GCYKSHOHIN_SEND"
==0)
{
file_name1 =getenv("GC_ENV_YKSHOHIN_SEND"
;
strcpy(table_name1,"GCM_SHOHIN"
;
/*sprintf(dbstring,"%s",conect);*/
}
else if (strcmp(file_type,"GCYKSSV_TORIKUMI_SEND"
==0)
{
file_name1=getenv("GCYKSSV_TORIKUMI_SEND"
;
strcpy(table_name1,"GCM_TORIKUMI");
}
else if (strcmp(file_type,"GCYKSSV_HINBETSU_SEND")==0)
{
file_name1=getenv("GCYKSSV_HINBETSU_SEND");
strcpy(table_name1,"GCM_SSV_HINBETSU");
}
else if (strcmp(file_type,"GCYKPOS_VCD_SEND")==0)
{
file_name1=getenv("GCYKPOS_VCD_SEND");
strcpy(table_name1,"GCM_POS_VCD");
}
else if (strcmp(file_type,"GCYKSSV_SAGYO_SEND")==0)
{
file_name1=getenv("GCYKSSV_SAGYO_SEND");
strcpy(table_name1,"GCM_GAISHO_SAGYO");
}
else if (strcmp(file_type,"GCYKYOTO_SEND")==0)
{
file_name1=getenv("GCYKYOTO_SEND");
strcpy(table_name1,"GCM_YOTO");
}
else if (strcmp(file_type,"GCYKHAISO_SEND")==0)
{
file_name1=getenv("GCYKHAISO_SEND");
strcpy(table_name1,"GCM_HAISO");
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"005");
strcpy(wk_ErrorInfo,"ファイル類型の引数不正確");
exit (1);
}
}
printf("\n%s\n",file_name1);
if (file_name1!=NULL)
{
strcpy(ret_info->file_path,file_path1);
strcpy(ret_info->file_name,file_name1);
strcpy(ret_info->table_name,table_name1);
return (ret_info);
}
else
{
strcpy(wk_ErrorFlag,"1");
strcpy(wk_eEroorNo,"006");
strcpy(wk_ErrorInfo,"文件名未能取得");
exit(1);
}
}
int DbLogin(char *userid, char *passwd, char *conect)
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20];
char password[20];
char dbstring[20];
EXEC SQL END DECLARE SECTION;
sprintf(username,"%s",userid);
sprintf(password,"%s",passwd);
if ( conect == NULL )
{
EXEC SQL CONNECT :username IDENTIFIED BY assword;
}
else
{
sprintf(dbstring,"%s",conect);
EXEC SQL CONNECT :username IDENTIFIED BY assword using :dbstring;
}
if( QueryCondition()!=0 )
return(1);
return(0);
}
int DbLogout()
{
EXEC SQL COMMIT WORK RELEASE;
return(0);
}
int DbCommit()
{
EXEC SQL COMMIT WORK;
return(0);
}
int DbRollback()
{
EXEC SQL ROLLBACK WORK;
return(0);
}
int QueryCondition()
{
int i;
char *p;
if( sqlca.sqlcode!=0 && sqlca.sqlcode!=1403 && sqlca.sqlcode!=-1405 )
{
i=(int)sqlca.sqlerrm.sqlerrml;
p=sqlca.sqlerrm.sqlerrmc;
sqlca.sqlerrm.sqlerrmc[i-1]='\0';
if( sqlca.sqlcode==-1012 )
{
return(1);
}
else
{
return(1);
}
}
else
{
return(0);
}
}
int sql_error()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
DbRollback();
return(1);
exit(1);
}
int main()
{
wk_strUser = getenv("MK_ORACLE_USR");
printf("USERNAME=%s\n",wk_strUser);
wk_strPwd = getenv("MK_ORACLE_PWD");
printf("PASSWORD=%s\n",wk_strPwd);
wk_strDBName = getenv("MK_ORACLE_SID");
printf("SID=%s\n",wk_strDBName);
if (DbLogin(wk_strUser,wk_strPwd,wk_strDBName)!=0)
{
return(1);
exit(1);
}
EXEC SQL WHENEVER SQLERROR DO sql_error();
oraca.orastxtf = ORASTFERR;
pp= get_path();
strcpy(inpra_path.arr,pp->file_path);
inpra_path.len=strlen(inpra_path.arr);
strcpy(inpra_txtname.arr,pp->file_name);
inpra_txtname.len=strlen(inpra_txtname.arr);
strcpy(inpra_emp.arr,pp->table_name);
inpra_emp.len=strlen(inpra_emp.arr);
printf("%s\n",inpra_path.arr);
printf("%s\n",inpra_txtname.arr);
printf("%s\n",inpra_emp.arr);
DbLogout();
puts("\nHave a good day!\n");
return (1);
exit(0);
}
发表于 2004-10-19 10:49
|
只看该作者
楼上的130行一些assword修改完后,precompile后出现struct的问题
Syntax error at line 10, column 1, file d:\gino\egh\personal\pc\test.pc:
struct result
1
(1) PCC-S-02201, Encountered the symbol "struct" when expecting one of the following:
;
The symbol ";" was substituted for "struct" to continue.
(1) PCC-F-02102, Fatal error while doing C preprocessing
发表于 2004-10-19 11:03
|
只看该作者
这些语法的ERRORS, 是原楼主的贴子的问题。
以下解决了:
if ( conect == NULL )
{
EXEC SQL CONNECT :username IDENTIFIED BY
assword;
}
else
{
sprintf(dbstring,"%s",conect);
EXEC SQL CONNECT :username IDENTIFIED BY
assword using :dbstring;
}
发表于 2004-10-19 11:45
|
只看该作者
抱歉,关于楼上说的,我知道,我也修正完毕了,可是目前是出现在STRUCT的问题
ERROR MESSAGE:
Syntax error at line 10, column 1, file d:\gino\egh\personal\pc\test.pc:
struct result
1
(1) PCC-S-02201, Encountered the symbol "struct" when expecting one of the following:
;
The symbol ";" was substituted for "struct" to continue.
(1) PCC-F-02102, Fatal error while doing C preprocessing