我copy了一段.pc的代码生成了一个.pc文件,然后利用pro c/c++进行预编译,但发现没有生成c/c++代码,pro c/c++对话窗口的最左侧列表出现错误图标。请问用pro*c开发的完整过程是怎样的,能够提供一个简单的访问数据库并查询数据的例子程序吗?以下是从网上copy的代码测试的:/* exam01.pc 开发Oracle接口程序举例 */
/* 说明:本程序介绍用PROC开发Oracle库接口的编程特点。通过向AUTHS
* 表输入作家代码,查询作家姓名及工资。运行前应建表、插入数据并提交。*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* 包含SQL通讯区,它用于处理错误。*/
#include <sqlca.h>
void connect(); /* 连接到Oracle Server */
void disconnect(); /* 断开到Oracle Server的连接 */
void sql_error(char *); /* 处理错误句柄 */
void select(); /* 查询子程序 */
extern sqlglm(char *,int *,int *);
/* 主程序 */
void main()
{
  /* 安装错误处理句柄 */
  EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle错误--\n");
  /* 连接到数据库 */
  connect();
  /* 执行查询 */
  select();
  /* 断开数据库连接 */
  disconnect();
}/* 子程序 */
/* 连接子程序 connect() */
void connect()
{
  EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[10], password[10], server[10];
  EXEC SQL END DECLARE SECTION;
  /* 输入用户名、口令以及服务器名 */
  printf("\n输入用户名:");
  gets(username.arr);
  username.len=(unsigned short)strlen((char *)username.arr);
  printf("\n输入口令:");
  gets(password.arr);
  password.len=(unsigned short)strlen((char *)password.arr);
  printf("\n输入服务器名:");
  gets(server.arr);
  server.len=(unsigned short)strlen((char *)server.arr);
  /* 连接到Oracle服务器上 */
  EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
  printf("\n以用户%s成功地连接到了服务器%s上!\n", username.arr, server.arr);
}
/* 断开连接子程序 disconnect() */
void disconnect()
{
  char temp;
  printf("\n是否在断开连接前提交所有事务? (Y/N)");
  scanf("%c", &temp);
  fflush(stdin);
  if(temp !='Y' && temp != 'y')
  {
   /* 回退事务,断开连接。 */
   EXEC SQL ROLLBACK WORK RELEASE;
   printf("\n回退事务,断开连接,退出程序!\n\n");
  }
  else
  {
   /* 提交事务,断开连接。 */
   EXEC SQL COMMIT WORK RELEASE;
   printf("\n提交事务,断开连接,退出程序!\n\n");
   exit(1);
  }
}
/* 查询子程序 select()
* 首先输入作家代码,然后查询作家姓名和工资。*/
void select()
{
  EXEC SQL BEGIN DECLARE SECTION;
  char author_code[8], name[10];
  float salary;
  short salary_ind;
  EXEC SQL END DECLARE SECTION;
  printf("\n输入作家代码: ");
  gets(author_code);
  /* 查询作家姓名和工资 */
  EXEC SQL SELECT *
  FROM bob.bob_phoneorder;
  /* 根据指示变量的值来确定该作家的工资是否为空。*/
  if (salary_ind ==0)
  {
   printf("\n作家代码\t作家姓名\t作家工资\n");
   printf("--------\t--------\t--------\n");
   printf("%8s\t%8s\t%8.2f\n", author_code, name, salary);
  }
  else
  {
   printf("作家%s的工资未录入,为空值!\n", name);
  }
}
/* 错误处理子程序 sql_error() */
void sql_error(char *msg)
{
  char err_msg[128];
  size_t buf_len, msg_len;
  /* 出现SQL错误,继续往下执行。 */
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  printf("\n%s\n", msg);
  buf_len=sizeof(err_msg);
  /* 调用函数sqlglm()获得错误消息。 */
  sqlglm(err_msg, &buf_len, &msg_len);
  printf("%.*s\n", msg_len, err_msg);
  /* 回退事务,断开连接,退出程序。 */
  EXEC SQL ROLLBACK RELEASE;
  exit(EXIT_FAILURE);

解决方案 »

  1.   

    应该在VC的开发环境中,配置一些相应的设置。
    具体的是,
    1,指定执行文件路径,要加入%oracle_home%\bin(%oracle_home%指的是Oracle的安装目录),例如D;\Oracle\ora92\bin.
    2,指定头文件的路径,要Include两个头文件的路径,例如,(1.)D;\Oracle\ora92\precomp\public.(2.)D;\Oracle\ora92\oci\include1,2都是在VC中的工具->选择->目录标签中的s显示的目录为设置.
    3,生成应用程序,创建工程->选择WIN32 console application,生成一个空的PROJECT
      

  2.   

    4,在SOURCE FILE中添加.PC文件,和同名的.c文件.
    5,添加SQLLIB库,该文件位于D;\Oracle\ora92\precomp\lib中,就是加入orasql9.lib
    6,指定定制建立选项proc $(InputDir)\$(InputName)  $(InputDir)\$(InputName).c
    就是在.PC文件中鼠标右键,在SETTING菜单项中的C 命令键入(proc $(InputDir)\$(InputName)) O 输出键入($(InputDir)\$(InputName).c)可以进行调试了基本的操作就这些就看哥们你的悟性了.
      

  3.   

    非常感谢,昨天在家试的时候第4和6步有点出于,我没有建一个同名的.c文件,以为会自动生成,setting没有设置,今天下班后回家再试下
      

  4.   

    hehe,果然ok,非常感谢这位仁兄,接分