以 下 是 用Borland C++ 5。0 在 中 文Windows 95 下 编 造 的 产 生CREATE TABLE SQL 语 句 和 产 生SQL*Loader 数 据 文 件、 控 造 文 件 的 源 程 序load。cpp。
#include
#include
#include
#include
#include
#include
#define MAX_ROW_LENGTH 1200
#define MAX_FIELD_NUMBER 30
typedef struct head // dbf头文件构造
{ unsigned char mask ;
unsigned char date[3] ;
unsigned long record_num;
unsigned short int head_length;
unsigned short int field_length ;
} HEAD ;
typedef struct field // dbf字段构造
{ unsigned char name[11];
unsigned char type ;
unsigned long add;
unsigned char length;
unsigned char dec ;
} FIELD ;
int main(int argc,char **argv)
{ char buf[MAX_ROW_LENGTH],dbf[40],*sqlload;
unsigned int i,field_num;
HEAD *dbfhead ;
FIELD dbffield[MAX_FIELD_NUMBER];
FILE *fout, *fp;
if (argc!=2)
{ cout head_length-1)/32 -1 ; //字段个数
for( i=0; i ctl");
if ((fout=fopen(sqlload,"w")) == NULL)
{ cout txt'\n", argv[1]);
fprintf(fout,"INTO TABLE %s (\n", argv[1]);
for(i=0;i name,
dbffield[i]。add, dbffield[i]。add + dbffield[i]。length -1 );
switch (dbffield[i]。type)
{ case 'C':
case 'L': // 字符型/ 逻辑型
fprintf(fout, " CHAR");
break ;
case 'N':
if (dbffield[i]。
dec == 0 ) //整数型
fprintf(fout, "INTEGER EXTERNAL NULLIF %s = BLANKS",
dbffield[i]。name);
else //实数型
fprintf(fout, " DECIMAL EXTERNAL NULLIF %s =BLANKS",
dbffield[i]。
name );
break;
case 'D': //日期型
fprintf(fout, " DATE 'YYYYMMDD' NULLIF %s = BLANKS",
dbffield[i]。name);
break;
default:
break;
if(i 的SQL 语 句
strcpy(sqlload,argv[1]);
strcat(sqlload,"。sql");
if ((fout=fopen(sqlload,"w")) == NULL)
{ cout name);
switch (dbffield[i]。type)
{ case 'C': //字符型
fprintf(fout, " CHAR(%d)",dbffield[i]。length);
break;
case 'L': //逻辑型
fprintf(fout, " CHAR
(1)");
break;
case 'N': //数字型
if (dbffield[i]。
dec==0)
fprintf(fout," NUMBER(%d)", dbffield[i]。length) ;
else
fprintf(fout, " NUMBER(%d,%d)",。