不知道你看过没有http://www.oradb.net/tran/ora2access.htm

解决方案 »

  1.   

    我就是照这个来做的,但是提示[ORACLE][ODBC][ORA]ORA-01401:数据域的插入值过大,查了一下,发现里面的数字字段要转成文字才行.不知有没有甚么其它办法可以直接导出的
      

  2.   

    如果数据表不多,数据量不在,不建义直接导入,会有问题发生。
    在oracle重建表吧
      

  3.   

    但是我需要表里面的资料啊,如果直接在Oracle里面建表,数据怎么导进去呢
      

  4.   

    to:lyhcuckoo(cuckoo)
    怎么发,不好贴
      

  5.   

    1、Access方面用DAO,因为这样数据字段信息都可以得到
    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
      

  6.   

    现在我使用这个方法编了一个小程序,可以处理包括Oracle、sqlserver、Access的数据,具体用到的是MFC的编程,这里我把几个构造sql语句的函数贴出来给大家批评指教根据创建DAO读出的COleVariant数据构造相应的Insert语句的一部分,如一个文本型的数据(“hello”)返回 'hello'
    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;
    }
      

  7.   

    下面这个函数是根据每个字段的属性构造Create语句的相应的部分,如一个200字节的文本字段SNAME,返回"SNAME" VARCHAR2(200)CString MakeSqlPartFromDaoFieldinfo(CDaoFieldInfo& finfo,int &errCode)
    {
    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;
    }
      

  8.   

    另外,哪位仁兄告诉我oo4o访问嵌套表的方法,让我这两天好赶快把东西做完吧,谢谢了