errCode=0;//错误信息的默认值 switch(finfo.m_nType) { case dbText://Text; see MFC class CString strtmp.Format(" VARCHAR2(%d)",finfo.m_lSize); //dbText型的数据转换为VARCHAR2 break; case dbBoolean:// Yes/No, same as TRUE/FALSE strtmp=_T(" NUMBER(1,0)"); break;
case dbByte:// Byte strtmp=_T(" NUMBER(3,0)");//Byte型的数据可以表示3位数,所以必须使用NUMBER(3,0) break;
case dbInteger:// Short strtmp=_T(" NUMBER(5,0)");//与Byte型的数据同理 break;
case dbLong:// Long strtmp=_T(" NUMBER(10,0)");//同上 break;
case dbCurrency:// Currency; see MFC class COleCurrency errCode=1;//还无法转换 break;
case dbSingle:// Single strtmp=_T(" NUMBER(15,5)");//自定的精度,可以根据单精度数据、或者系统使用的数据的实际情况修改 break;
case dbDouble:// Double strtmp=_T(" NUMBER(15,5)");//与上面类似 break;
case dbDate:// Date/Time; see MFC class COleDateTime strtmp=_T(" DATE"); break;
case dbLongBinary:// errCode=1; break;
case dbMemo:// Memo; see MFC class CString strtmp=_T(" VARCHAR(300)");//我自己目前使用到的数据最多为300 break;
case dbGUID:// errCode=1; break; } strsql+=strtmp;//构造完整的字段信息,字段名加上字段类型的说明 return strsql; }
在oracle重建表吧
怎么发,不好贴
2、Oracle方面使用oo4o,很方便,使用DAO也可以
3、读取Access的表定义信息,然后根据这些信息构造一个Create Table的sql语句,用于在Oracle中创建一个新的表,这里注意Access里面的数据类型和Oracle的数据类型的转换关系;可以自己定义,如数字型的转到number型的,文本和备注的转到Varchar2的
4、最后是读取Access表的每一条记录,然后根据每个字段的数据构造一个insert into的sql语句,添加记录;具体的语句可以在sqlplus里面试试,成功了就可以拿来用总的思路是使用sql语句来实现Oracle中的建表、插入数据等等功能,具体的对于表的约束则没有办法实现,还有一些数据类型我也不知道该怎样来写,因为我也是刚刚学的Oracle,不知道怎么处理:如BLOB、嵌套表等等请大家指点,可惜我过几天要上班去了,也就很可能放弃编程了,呵呵,sign
CString MakeInsertClausePartFromVariant(const COleVariant &var)
{
CString strRet(_T(""));
//这一部分要注意,在Sql语句中有些数据如字符串的要加单引号,数值的则不需要
//如果是空数据,不管类型都要用两个单引号('' 空字符)表示 int i(0); switch(var.vt)//根据COleVariant包含的数据类型做相应的转换
{
case VT_EMPTY:
case VT_NULL:
strRet=_T("''");//空数据返回空字符
break; case VT_I2://short
strRet.Format(_T("%d"),V_I2(&var));
break; case VT_I4://long
strRet.Format(_T("%d"),V_I4(&var));
break; case VT_R4://float
strRet.Format(_T("%f"),(double)V_R4(&var));
break; case VT_R8://double
strRet.Format(_T("%f"),V_R8(&var));
break; case VT_CY:
strRet=COleCurrency(var).Format();
break; case VT_DATE://日期时间型的返回标准的'yyyy-mm-dd hh:mm:ss'形式的数据
strRet=COleDateTime(var).Format();//_T("%m%d%y"));
strRet="to_date('"+strRet+"','yyyy-mm-dd HH24:MI:SS')"; break; case VT_BSTR://BSTR,要去掉回车、换行符,添加'
//strRet=V_BSTR(&var);
strRet=var.pbVal;
strRet="'"+strRet+"'";
for(i=0;i<strRet.GetLength();i++)
{
if(strRet.GetAt(i)=='\n' || strRet.GetAt(i)=='\r') strRet.SetAt(i,' ');
}
for(i=0;i<strRet.GetLength();i++)
{
if(strRet.GetAt(i)=='\'')
{
strRet.Insert(i,"'");
i++;
}
}
break;
case VT_DISPATCH://IDispatch
strRet=_T("VT_DISPATCH");
break;
case VT_ERROR://SCODE
strRet=_T("VT_ERROR");
break;
case VT_BOOL://VARIANT_BOOL
strRet=V_BOOL(&var)?_T("1"):_T("0");//_T("TRUE"):_T("FALSE");
break;
case VT_VARIANT://VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
strRet=_T("VT_VARIANT");
break;
case VT_UNKNOWN:////IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN.
strRet=_T("VT_UNKNOWN");
break;
case VT_I1://char
strRet=_T("VT_I1");
break; case VT_UI1://Byte
strRet.Format(_T("%d"),(unsigned short)V_UI1(&var));
break;
case VT_UI2://unsigned short
strRet=_T("VT_UI2");
break;
case VT_UI4://unsigned long
strRet=_T("VT_UI4");
break;
case VT_I8://double FAR* pdblVal; // VT_BYREF|VT_R8.
strRet=_T("VT_I8");
break;
case VT_INT://int
strRet=_T("VT_INT");
break;
case VT_UINT://unsigned int
strRet=_T("VT_UINT");
break;
case VT_VOID://void FAR* byref; // Generic ByRef.
strRet=_T("VT_VOID");
break; case VT_HRESULT://
strRet=_T("VT_HRESULT");
break;
case VT_PTR://
strRet=_T("VT_PTR");
break; case VT_SAFEARRAY://
strRet=_T("VT_SAFEARRAY");
break;
case VT_CARRAY://
strRet=_T("VT_CARRAY");
break; case VT_USERDEFINED://
strRet=_T("VT_USERDEFINED");
break;
case VT_LPSTR://
strRet=_T("VT_LPSTR");
break; case VT_LPWSTR://
strRet=_T("VT_LPWSTR");
break;
case VT_FILETIME://
strRet=_T("VT_FILETIME");
break; case VT_BLOB://
strRet=_T("VT_BLOB");
break;
case VT_STREAM://
strRet=_T("VT_STREAM");
break; case VT_STORAGE://
strRet=_T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT://
strRet=_T("VT_STREAMED_OBJECT");
break; case VT_STORED_OBJECT://
strRet=_T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT://
strRet=_T("VT_BLOB_OBJECT");
break; case VT_CF://
strRet=_T("VT_CF");
break;
case VT_CLSID://
strRet=_T("VT_CLSID");
break; case VT_VECTOR://
strRet=_T("VT_VECTOR");
break;
case VT_ARRAY://
strRet=_T("VT_ARRAY");
break;
case VT_BYREF://
strRet=_T("VT_BYREF");
break;
case VT_RESERVED://
strRet=_T("VT_RESERVED");
break;
}
return strRet;
}
{
CString strsql(_T("")),strtmp(_T(""));
strsql="\""+finfo.m_strName+"\"";//构造创建表的某个字段信息中的字段名
//每个字段名都用双引号避免和Oracle的保留字冲突,如上所示
strsql.TrimRight();
strsql.MakeUpper();//为了看起来方便,都转换为大写了
errCode=0;//错误信息的默认值 switch(finfo.m_nType)
{
case dbText://Text; see MFC class CString
strtmp.Format(" VARCHAR2(%d)",finfo.m_lSize);
//dbText型的数据转换为VARCHAR2
break; case dbBoolean:// Yes/No, same as TRUE/FALSE
strtmp=_T(" NUMBER(1,0)");
break;
case dbByte:// Byte
strtmp=_T(" NUMBER(3,0)");//Byte型的数据可以表示3位数,所以必须使用NUMBER(3,0)
break;
case dbInteger:// Short
strtmp=_T(" NUMBER(5,0)");//与Byte型的数据同理
break;
case dbLong:// Long
strtmp=_T(" NUMBER(10,0)");//同上
break;
case dbCurrency:// Currency; see MFC class COleCurrency
errCode=1;//还无法转换
break;
case dbSingle:// Single
strtmp=_T(" NUMBER(15,5)");//自定的精度,可以根据单精度数据、或者系统使用的数据的实际情况修改
break;
case dbDouble:// Double
strtmp=_T(" NUMBER(15,5)");//与上面类似
break;
case dbDate:// Date/Time; see MFC class COleDateTime
strtmp=_T(" DATE");
break;
case dbLongBinary://
errCode=1;
break;
case dbMemo:// Memo; see MFC class CString
strtmp=_T(" VARCHAR(300)");//我自己目前使用到的数据最多为300 break;
case dbGUID://
errCode=1;
break;
} strsql+=strtmp;//构造完整的字段信息,字段名加上字段类型的说明 return strsql;
}