file1:(rundb.cc)
#include "database.cc"
#include <iostream>
#include <string>
int main(int argc,char *argv[])
{

DB connect();
}file2:(database.pc)
#include <iostream>
#include <string.h>
#define SQLNOTFOUND 1403EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
EXEC SQL END DECLARE SECTION;
class DB{
public:
void connect();
void select();
void insert();
//void updata();

private:
EXEC SQL BEGIN DECLARE SECTION;
char username[50];
char cat_id[50];
struct obj_struct{
char obj_id[50];
char obj_desc[50];
}obj;
struct attr_struct{
char attr_id[50];
char attr_name[50];
char attr_value[50];
}attr;
EXEC SQL END DECLARE SECTION;
};
void DB::connect(&int argc,&char *argv[])
{
if(argc==1)
{
printf("请输入用户,密码");
exit(0);
}
strcpy(username,argv[1]);

EXEC SQL CONNECT:username;
printf("连接ORACLE@:%d",username);
}
void DB::select()
{
EXEC SQL SELECT CAT_ID,OBJ_ID,OBJ_DESC
INTO :cat_id,:obj.obj_id,:obj.obj_desc
FROM OBJ_TAB;
EXEC SQL COMMIT WORK RELEASE; 
}
void DB::insert()
{
EXEC SQL INSERT INTO OBJ_TAB(CAT_ID,OBJ_ID,OBJ_DESC)
VALUES(:cat_id,:obj.obj_id,:obj.obj_desc);  
EXEC SQL COMMIT WORK RELEASE; 
}
//void DB::updata(){;}

解决方案 »

  1.   

    database.pc能通过proc生成database.cc文件
    但是编译.cc的时候总是有一个错误("database.cc", line 329.1: 1540-0063 (S) The text "{" is unexpected.)
    找了半天找不出来郁闷了半天了
      

  2.   

    编译器是:
    c for aix compiler ,version 5
      

  3.   

    DB connect();应该是 DB.connect();吧???
    估计是你的makefile有问题,请参看我的
    include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
    CC = $(COMPILER)/bin/xlCORALIBPATH=$(ORACLE_HOME)/lib32
    ORALIBS=-lclntsh
    PRODLIBHOME64=$(PRODHOME)lib64
    PRECOMPHOME=$(ORACLE_HOME)/precomp/publicPROCPPFLAGS= code=cpp
    NETWORKHOME=$(ORACLE_HOME)/network/
    PLSQLHOME=$(ORACLE_HOME)/plsql/I_SYM=-ISTLINCLUDE = -I $(COMPILER)/include
    INCLUDE=$(I_SYM). $(I_SYM)$(PLSQLHOME)public $(I_SYM)$(NETWORKHOME)public $(I_SYM)$(PRECOMPHOME)CFLAGS= -c -lct -lcs -ltcl -lcomn -lintl -lm -bquietLIBHOME=$(ORACLE_HOME)/lib64/getMonth: getMonthproc getMonthCo getMonthbuild
    getMonthproc:
            proc $(PROCPPFLAGS) cpp_suffix=cc $(PROCPLSFLAGS) iname=getMonth.cpp parse=none
    getMonthCo:
            $(CC) $(INCLUDE) $(STLINCLUDE) $(CFLAGS) getMonth.cc
    getMonthbuild:
            $(CC) getMonth.o $(COMMONOBJ) -L $(ORALIBPATH) $(ORALIBS) -o bin/getMonth
      

  4.   

    不是makefile的问题
    另外DB connect(); 是调用DB类的connect()方法
    PS:我刚毕业工作,这些都是新学的,所以比较嫩一些
      

  5.   

    我试着编译一下,问题很多啊
    1.
    class DB{
    public:
    void connect();
    这里应改为 void connect(int argc,char *argv[]);
    2.void DB::connect(&int argc,&char *argv[])
    这里应改为void DB::connect(int argc,char *argv[]),就是把int和char前面的'&'去掉
    还有很多错误,你慢慢看吧
      

  6.   

    按照你的指导,已经能生成database.o 和rundb.o 了但是xlC rundb.o -o rundb 一直通过不了系统提示是: 
    ld: 0711-317 ERROR: Undefined symbol: .sqlcxt
    PS:其实我是想把database做成一个类,用rundb完成对他的调用,不知道这样的方式实现合适不;现在错误这么多,我都不知道我的想法是不是正确的了
      

  7.   

    "按照你的指导,已经能生成database.o 和rundb.o 了但是xlC rundb.o -o rundb 一直通过不了系统提示是: 
    ld: 0711-317 ERROR: Undefined symbol: .sqlcxt"这个问题解决了
      

  8.   

    能生成执行文件了,但是问题还是不少;我先说下我的思路:
    第一步. 2个文件,一个是database.pc(pro*c),经过proc XXXXX后生成database.cc文件(这个过程不知道叫什么)
    第二步. 把database.cc改名字为database.h(我也不清楚是否一定要改名,请原谅我的无知)
    第三步. 另外一个文件是包含main()函数的,叫rundb.cc,包含头文件(#include <database.h>)
    第四步,makefile,生成执行文件rundb:
    xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
    xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $* 
    第五步. 运行rundb,但是没有返回信息
      

  9.   

    我把database.pc  rundb.cc  makefile 都放上来吧,问题应该不少,第一次做;只求大体思路没错就安心了
      

  10.   

    database.pc#include <stdio.h>
    #include <iostream>
    #include <string>
    #define SQLNOTFOUND 1403EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
    char username[50];
    char cat_id[50];
    struct obj_struct{
    char obj_id[50];
    char obj_desc[50];
    }obj;
    struct attr_struct{
    char attr_id[50];
    char attr_name[50];
    char attr_value[50];
    }attr;
    EXEC SQL END DECLARE SECTION;
    class DB{
    public:
    void connect(int &argc,char &*argv[]);
    void select();
    void insert();
    //void updata();

    private:
    EXEC SQL BEGIN DECLARE SECTION;
    char username[50];
    char cat_id[50];
    struct obj_struct{
    char obj_id[50];
    char obj_desc[50];
    }obj;
    struct attr_struct{
    char attr_id[50];
    char attr_name[50];
    char attr_value[50];
    }attr;
    EXEC SQL END DECLARE SECTION;
    };
    void DB::connect(int &argc,char &*argv[])
    {
    if(argc==1)
    {
    printf("请输入用户,密码");
    exit(0);
    }
    strcpy(username,argv[1]);

    EXEC SQL CONNECT:username;
    printf("连接ORACLE@:%s",username);
    if(sqlca.sqlcode<0)
       {
          printf("数据库连接出错,错误信息:%s.\n",sqlca.sqlerrm.sqlerrmc);
          exit(0);
        }
    }
    void DB::select()
    {
    EXEC SQL SELECT CAT_ID,OBJ_ID,OBJ_DESC
    INTO :cat_id,:obj.obj_id,:obj.obj_desc
    FROM OBJ_TAB;
    EXEC SQL COMMIT WORK RELEASE; 
    }
    void DB::insert()
    {
    EXEC SQL INSERT INTO OBJ_TAB(CAT_ID,OBJ_ID,OBJ_DESC)
    VALUES(:cat_id,:obj.obj_id,:obj.obj_desc);  
    EXEC SQL COMMIT WORK RELEASE; 
    }
      

  11.   

    第一步. 2个文件,一个是database.pc(pro*c),经过proc XXXXX后生成database.cc文件(这个过程不知道叫什么)
    第二步. 把database.cc改名字为database.h(我也不清楚是否一定要改名,请原谅我的无知)
    第三步. 另外一个文件是包含main()函数的,叫rundb.cc,包含头文件(#include <database.h>)
    第四步,makefile,生成执行文件rundb:
    xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
    xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $* 
    第五步. 运行rundb,但是没有返回信息1.proc 生成.cc文件叫做预编译,是为了让c++编译器理解里面的代码
    2.一般都把声明放在.h文件里,而实现放在.cpp里
    3.这一步也没什么问题
    4.
    5.你的程序设计思路没问题,就是不大了解c++程序,希望你好好看看c++基础的书
      

  12.   

    rundb.cc :#include "database.h"
    #include <iostream>
    int main(int argc,char *argv[])
    {

    DB connect(int &argc,char &*argv[]);
    }makefile:include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
    ORALIBPATH=$(ORACLE_HOME)/lib32
    ORALIBS=-lclntsh -lpthread
    PRODLIBHOME64=$(PRODHOME)lib64
    PRECOMPHOME=$(ORACLE_HOME)/precomp/publicPROCPPFLAGS= code=cpp
    NETWORKHOME=$(ORACLE_HOME)/network/
    PLSQLHOME=$(ORACLE_HOME)/plsql/I_SYM=-ISTLINCLUDE = -I $(COMPILER)/include
    INCLUDE=$(I_SYM). $(I_SYM)$(PLSQLHOME)public $(I_SYM)$(NETWORKHOME)public $(I_SYM)$(PRECOMPHOME)CFLAGS= -c -lct -lcs -ltcl -lcomn -lintl -lmLIBHOME=$(ORACLE_HOME)/lib64/rundb: xlC $(INCLUDE) $(STLINCLUDE) $(CFLAGS) $*.cc
    xlC $*.o -L $(ORALIBPATH) $(ORALIBS) -o $*
      

  13.   

    int main(int argc,char *argv[])
    {

    DB connect(int &argc,char &*argv[]);
    }这个调用有问题,应该是:DB connect(argc,argv);
      

  14.   

    我就是在迷惑怎么把mian()函数的参数 传递到被调函数connect
      

  15.   

    还有两个地方要改:
    void connect(int &argc,char &*argv[]);->void connect(int argc,char *argv[]);
    void DB::connect(int &argc,char &*argv[])->void DB::connect(int argc,char *argv[])
      

  16.   

    void connect(int &argc,char &*argv[])
    恩,&*这样的写法不对;不过我觉得重点是怎么把main函数参数传递给connect
    或者把连接数据库的功能直接放到main()函数里
      

  17.   

    DB connect(argc,argv);
    这样就可以传了
    还有疑问的话我还是建议你好好看c++关于函数传参的章节
      

  18.   

    "rundb.cc", line 7.12: 1540-0218 (S) The call does not match any parameter list
    for "DB::DB".
    make: The error code from the last command is 1.
      

  19.   

    int main(int argc,char *argv[])
    {DB connect();
    }
    改成这样:
    int main(int argc,char *argv[])
    {
    DB tmpdb;
    temdb.connect();
    }
    --不过我有点奇怪,DB类没有构造函数???
      

  20.   

    int main(int argc,char *argv[])
    {DB connect(argc,argv);
    }
    改成这样:
    int main(int argc,char *argv[])
    {
    DB tmpdb;
    temdb.connect(argc,argv);
    }
      

  21.   

    插播一条广告,小店新开张,优惠出售各种手工艺品,欢迎大家选购,是各位帅哥送女朋友、老婆、情人(OR各位美女送男朋友、老公、情人)的不二选择
    http://shop33881320.taobao.com/
      

  22.   

    void DB::insert(int argc,char *argv[])
    { EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
    VALUES(:argv[2],:argv[3],:argv[4]);
    EXEC SQL insert into obj_tab(cat_id,obj_id,obj_desc)
    VALUES('11','22','33');
    EXEC SQL COMMIT WORK RELEASE;
    }始终插不进去~~  =。=    不知道什么原因?