将EXCEL的基础资料导入导出至SQL数据库(一般企业管理软件的数据库),一般SQL导出EXCEL相对简单,但从EXCEL导入到SQL数据库中,需求对数据的类型,数据的SQL数据库的合法性进行校验。各位前辈有没有现成的代码?请大家谈谈开发的思路。

解决方案 »

  1.   

    导入时数据类型的校验是必须,但一般ERP软件的数据库关联表比较多,不可能不止一张表存放,最好还是咨询软件供应商
      

  2.   

    导入时使用C开头的VBA函数明确数据类型,比如:CCur、CInt、CStr、CDbl等。
      

  3.   

    2楼的兄弟有没有做过数据检验的模板.就是这个?2、数据库中要使用的数据表的数据项要和EXCEL表中的一样! 
      

  4.   

    A)先对 Excel 数据进行预处理,如 3 楼所说的强制类型转换。
     然后再导入。B)先导入到一个临时表中,字段类型最好都是文本,然后在临时表中对各种设想的非法数据进行处理。
     最后将临时表中的数据用 Convert() 转化为最终的数据类型,SELECT...INTO 到永久表中。
      

  5.   

    1)Recordset.Fields(i).Type枚举sql表每个字段的类型
    2)强制转换excel的数据类型与sql的一致
    3)导入sql数据库枚举类型的程序大体如下:Type 属性范例
    该范例通过显示与雇员表所有 Field 对象的 Type 属性值对应的常量名说明 Type 属性。该过程运行时需要 FieldType 函数。Public Sub TypeX()   Dim rstEmployees As ADODB.Recordset
       Dim fldLoop As ADODB.Field
       Dim strCnn As String   ' 使用雇员表中的数据打开记录集。
       strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set rstEmployees = New ADODB.Recordset
       rstEmployees.Open "employee", strCnn, , , adCmdTable   Debug.Print "Fields in Employee Table:" & vbCr   ' 枚举雇员表的字段集合。
       For Each fldLoop In rstEmployees.Fields
          Debug.Print "  Name: " & fldLoop.Name & vbCr & _
             "  Type: " & FieldType(fldLoop.Type) & vbCr
       Next fldLoopEnd SubPublic Function FieldType(intType As Integer) As String   Select Case intType
          Case adChar
             FieldType = "adChar"
          Case adVarChar
             FieldType = "adVarChar"
          Case adSmallInt
             FieldType = "adSmallInt"
          Case adUnsignedTinyInt
             FieldType = "adUnsignedTinyInt"
          Case adDBTimeStamp
             FieldType = "adDBTimeStamp"
       End SelectEnd Function字段类型参考如下:
    Type 属性
          指示 Parameter、Field 或 Property 对象的操作类型或数据类型。设置和返回值设置或返回下列 DataTypeEnum 值之一。相应的 OLE DB 类型标识符在下表的说明栏的括号中给出。有关 OLE DB 数据类型的详细信息,请参阅第 10 章和《OLE DB 程序员参考》的附录 A。常量 说明 
    AdArray 与其他类型一起加入逻辑 OR 以指示该数据是那种类型的安全数组 (DBTYPE_ARRAY)。 
    AdBigInt 8 字节带符号的整数 (DBTYPE_I8)。 
    AdBinary 二进制值 (DBTYPE_BYTES)。 
    AdBoolean 布尔型值 (DBTYPE_BOOL)。 
    adByRef 与其他类型一起加入逻辑 OR 以指示该数据是其他类型数据的指针 (DBTYPE_BYREF)。 
    adBSTR 以空结尾的字符串 (Unicode) (DBTYPE_BSTR)。 
    adChar 字符串值 (DBTYPE_STR)。 
    adCurrency 货币值 (DBTYPE_CY)。货币数字的小数点位置固定、小数点右侧有四位数字。该值保存为 8 字节范围为 10,000 的带符号整型值。 
    adDate 日期值 (DBTYPE_DATE)。日期按双精度型数值来保存,数字全部表示从 1899 年 12 月 30 开始的日期数。小数部分是一天当中的片段时间。 
    adDBDate 日期值 (yyyymmdd) (DBTYPE_DBDATE)。 
    adDBTime 时间值 (hhmmss) (DBTYPE_DBTIME)。 
    adDBTimeStamp 时间戳(yyyymmddhhmmss 加 10 亿分之一的小数)(DBTYPE_DBTIMESTAMP). 
    adDecimal 具有固定精度和范围的精确数字值 (DBTYPE_DECIMAL)。 
    adDouble 双精度浮点值 (DBTYPE_R8)。 
    adEmpty 未指定值 (DBTYPE_EMPTY)。 
    adError 32 - 位错误代码 (DBTYPE_ERROR)。 
    adGUID 全局唯一的标识符 (GUID) (DBTYPE_GUID)。 
    adIDispatch OLE 对象上 Idispatch 接口的指针 (DBTYPE_IDISPATCH)。 
    adInteger 4 字节的带符号整型 (DBTYPE_I4)。 
    adIUnknown OLE 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN)。 
    adLongVarBinary 长二进制值(仅用于 Parameter 对象)。 
    adLongVarChar 长字符串值(仅用于 Parameter 对象)。 
    adLongVarWChar 以空结尾的长字符串值(仅用于 Parameter 对象)。 
    adNumeric 具有固定精度和范围的精确数字值 (DBTYPE_NUMERIC)。 
    adSingle 单精度浮点值 (DBTYPE_R4)。 
    adSmallInt 2 字节带符号整型 (DBTYPE_I2)。 
    adTinyInt 1 字节带符号整型 (DBTYPE_I1)。 
    adUnsignedBigInt 8 字节不带符号整型 (DBTYPE_UI8)。 
    adUnsignedInt 4 字节不带符号整型 (DBTYPE_UI4)。 
    adUnsignedSmallInt 2 字节不带符号整型 (DBTYPE_UI2)。 
    adUnsignedTinyInt 1 字节不带符号整型 (DBTYPE_UI1)。 
    adUserDefined 用户定义的变量 (DBTYPE_UDT)。 
    adVarBinary 二进制值(仅 Parameter 对象)。 
    adVarChar 字符串值(仅 Parameter 对象)。 
    adVariant 自动变体型 (DBTYPE_VARIANT)。 
    adVector 与其他类型一起加入逻辑 OR 中,指示数据是 DBVECTOR 结构(由 OLE DB 定义)。该结构含有元素的计数和其他类型 (DBTYPE_VECTOR) 数据的指针。 
    adVarWChar 以空结尾的 Unicode 字符串(仅 Parameter 对象)。 
    adWChar 以空结尾的 Unicode 字符串 (DBTYPE_WSTR)。 
    说明对 Parameter 对象,Type 属性是读/写。对其他所有对象,Type 属性是只读。