******讨论基础资料、单据,导入导出开发的思路****** 将EXCEL的基础资料导入导出至SQL数据库(一般企业管理软件的数据库),一般SQL导出EXCEL相对简单,但从EXCEL导入到SQL数据库中,需求对数据的类型,数据的SQL数据库的合法性进行校验。各位前辈有没有现成的代码?请大家谈谈开发的思路。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 导入时数据类型的校验是必须,但一般ERP软件的数据库关联表比较多,不可能不止一张表存放,最好还是咨询软件供应商 导入时使用C开头的VBA函数明确数据类型,比如:CCur、CInt、CStr、CDbl等。 2楼的兄弟有没有做过数据检验的模板.就是这个?2、数据库中要使用的数据表的数据项要和EXCEL表中的一样! A)先对 Excel 数据进行预处理,如 3 楼所说的强制类型转换。 然后再导入。B)先导入到一个临时表中,字段类型最好都是文本,然后在临时表中对各种设想的非法数据进行处理。 最后将临时表中的数据用 Convert() 转化为最终的数据类型,SELECT...INTO 到永久表中。 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 属性是只读。 为什么Range的Selet的方法无效? datareport 怎样控制打印份数 ??? 拜托谁有时间+我的QQ,VB新手求助!! 在VB下面如何将UNICODE码和ASICII码转换? 多条记录如何实现在同一个窗口下用文本框同时提交? 救救我~~~~~~~~~~~~~ 请教:怎么在VB里拷贝文件从一个目录到另一个目录? 关于投票的问题,高手进来看看。 急啊, 救命!!!!!!!!!!!!!!!!!! 主 题:有时WINZIP 请教高手,监听计算机与下位机,如何对串口通信的数据进行解密,可以付费? vb 汉字与UTF-8编码互转函数 解释
然后再导入。B)先导入到一个临时表中,字段类型最好都是文本,然后在临时表中对各种设想的非法数据进行处理。
最后将临时表中的数据用 Convert() 转化为最终的数据类型,SELECT...INTO 到永久表中。
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 属性是只读。