一个关于从Excel向SQL导入数据的问题

snowerhuayun 2004-02-03 09:17:21
我用 CommonDialog 找到我要向SQL里导入数据的Excel,请问我下面该怎么做
...全文
65 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoki 2004-02-03
  • 打赏
  • 举报
回复
'当然,你也可以定义两个连接分别到sqlserver与excel文件,然后定义两个纪录集打开对应的表,你就可以相互赋值从而达到导入的目的,这种速度会慢些,优点是excel文件不需要存在同一个电脑上(上述方法需要)
'引用Microsoft Activex Data Object2.x Library 与 Microsoft Excel Object9.0(或以上) Library
Dim cnSqlserver As ADODB.Connection
Dim cnExcel As ADODB.Connection
Dim rsExcel As ADODB.Recordset
Dim rsSqlserver As ADODB.Recordset

Set cnExcel = New ADODB.Connection
cnExcel.CursorLocation = adUseClient
'连接到Excel
cnExcel.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=Excel 8.0;Persist Security Info=true"

Set cnSqlserver = New ADODB.Connection
cnSqlserver.CursorLocation = adUseClient
'连接到Sqlserver
cnSqlserver.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=Excel 8.0;Persist Security Info=true"

Set rsExcel = New ADODB.Recordset
'打开Excel中的源表
rsExcel.Open "table1", cnExcel, adOpenKeyset, adLockOptimistic

Set rsSqlserver = New ADODB.Recordset
'打开Sqlserver的目的表
rsSqlserver.Open "select * from table2 where 1=2", cnSqlserver, adOpenKeyset, adLockOptimistic, adCmdText

Do While Not rsExcel.EOF
'将源表中的纪录赋给目的表
rsSqlserver.AddNew
rsSqlserver!ID = rsExcel!ID
rsSqlserver!Name = rsExcel!Name
'...
'...
'...
rsSqlserver.Update
rsExcel.MoveNext
Loop
rsExcel.Close
rsSqlserver.Close
Set rsExcel = Nothing
Set rsSqlserver = Nothing
cnExcel.Close
cnSqlserver.Close
Set cnExcel = Nothing
Set cnSqlserver = Nothing
yoki 2004-02-03
  • 打赏
  • 举报
回复
'当然,你也可以定义两个连接分别到sqlserver与excel文件,然后定义两个纪录集打开对应的表,你就可以相互赋值从而达到导入的目的,这种速度会慢些,优点是excel文件不需要存在同一个电脑上(上述方法需要)
'引用Microsoft Activex Data Object2.x Library 与 Microsoft Excel Object9.0(或以上) Library
Dim cnSqlserver As ADODB.Connection
Dim cnExcel As ADODB.Connection
Dim rsExcel As ADODB.Recordset
Dim rsSqlserver As ADODB.Recordset

Set cnExcel = New ADODB.Connection
cnExcel.CursorLocation = adUseClient
'连接到Excel
cnExcel.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=Excel 8.0;Persist Security Info=true"

Set cnSqlserver = New ADODB.Connection
cnSqlserver.CursorLocation = adUseClient
'连接到Sqlserver
cnSqlserver.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=Excel 8.0;Persist Security Info=true"

Set rsExcel = New ADODB.Recordset
'打开Excel中的源表
rsExcel.Open "table1", cnExcel, adOpenKeyset, adLockOptimistic

Set rsSqlserver = New ADODB.Recordset
'打开Sqlserver的目的表
rsSqlserver.Open "select * from table2 where 1=2", cnSqlserver, adOpenKeyset, adLockOptimistic, adCmdText

Do While Not rsExcel.EOF
'将源表中的纪录赋给目的表
rsSqlserver.AddNew
rsSqlserver!ID = rsExcel!ID
rsSqlserver!Name = rsExcel!Name
'...
'...
'...
rsSqlserver.Update
rsExcel.MoveNext
Loop
rsExcel.Close
rsSqlserver.Close
Set rsExcel = Nothing
Set rsSqlserver = Nothing
cnExcel.Close
cnSqlserver.Close
Set cnExcel = Nothing
Set cnSqlserver = Nothing
yoki 2004-02-03
  • 打赏
  • 举报
回复
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.xls;Extended Properties=Excel 8.0"

’如果这张表不存在,你可以使用如下代码:

strSQL = "SELECT * INTO [odbc;Driver={SQL Server};Server=sha-kennyhao-01;Database=Northwind;UID=sa;PWD=;].Customers2 FROM [Sheet1$]"

cn.Execute strSQL, , adExecuteNoRecords

如果表已经存在,您需要添加进数据库,可以使用如下代码:

strSQL = "INSERT INTO [odbc;Driver={SQL Server};Server=sha-kennyhao-01;Database=Northwind;UID=sa;PWD=;].Customers2 SELECT * FROM [Sheet1$]"cn.Execute strSQL, , adExecuteNoRecords
yoki 2004-02-03
  • 打赏
  • 举报
回复
上述方法一行一行添加速度太慢,建议用

--table1已经存在:
insert into table1
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

--table1不存在
SELECT * into table1
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
wangfub 2004-02-03
  • 打赏
  • 举报
回复
全部程序:
Private Sub subIncome()
Dim rs As New ADODB.Recordset
Dim str1 As String
Dim getrow As Integer
Dim TExcel As Excel.Application

If Text1.Text <> "" Then

Set TExcel = CreateObject("excel.application")
TExcel.Workbooks.Open (Cd.FileName)'Cd为CommonDialog

rs.Open "select * from 数据库表名", gConnforSQL, adOpenKeyset, adLockOptimistic

Dim str As String

Dim j As Integer
getrow = TExcel.Worksheets(1).UsedRange.Rows.Count'得到的行数

With rs
For j = 1 To getrow
.AddNew
.Fields("数据库中的字段") = CInt(TExcel.Sheets(1).Cells(j, 1).Value)
.Update
Next
End With
rs.Close
TExcel.Workbooks.Close
TExcel.Quit'这句最重要否则不退出vb程序不能在Windows中打开excel
Else
MsgBox "请输入要导入的excel文件", vbOKOnly, "系统提示"
Cmdview.SetFocus
End If

End Sub
zhangying7725 2004-02-03
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2520/2520299.xml?temp=.4417078
zhangying7725 2004-02-03
  • 打赏
  • 举报
回复
在csdn上有很多原来高手写的答复,你自己搜索一下呀!

用image类型

方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str

2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x) -- 必须的,且不是null
insert 表名 values(2,0x) -- 必须的,且不是null
go

3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\d.xls','where 编号=2','I' --注意条件是 编号=2

go

4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go

如果报textcopy不是可执行文件的话,你就到
C:\Program Files\Microsoft SQL Server\MSSQL\Binn
目录下拷备 textcopy.exe到:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn
zhangying7725 2004-02-03
  • 打赏
  • 举报
回复
引用:

http://www.csdn.net/develop/read_article.asp?id=18623

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

Dim TExcel As Excel.Application
Set TExcel = CreateObject("excel.application")
dim Rs as adodb.recordset

TExcel.Workbooks.Open("c:\temp.xls")
rs.field("商品名").value= TExcel.Sheets(1).Cells(1, 6).Value

上面就把temp这个Excel文件里面sheets1里面的a,6写入数据库了!
hfy2003 2004-02-03
  • 打赏
  • 举报
回复
1,把exlel当作数据库来读
定义函数如下:
Public Function Read_Excel(ByVal sFile As String) As ADODB.Recordset

On Error GoTo fix_err
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sconn As String

rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic

sconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFile
rs.Open "SELECT * FROM [sheet1$]", sconn
Set Read_Excel = rs
Set rs = Nothing
Exit Function
fix_err:
Debug.Print Err.Description + " " + _
Err.Source, vbCritical, "Import"
Err.Clear
End Function

只要调用此含数即可:
Private Sub Command5_Click()

Set rsyl = Read_Excel("d:\a.xls")
Set TDBGrid2.DataSource = rsyl
End Sub
loveisbug 2004-02-03
  • 打赏
  • 举报
回复
hehe

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧