Function GetConnStr () As String
Dim strCn As String
Dim server As String
Dim database As String
Dim user As String
Dim pwd As String
Dim obj As Object
Set obj = Sheets("Ctrl")
server = obj.Range("DBServer").Text
database = obj.Range("Database").Text
user = obj.Range("User").Text
pwd = obj.Range("Password").Text
strCn = "driver=DRIVER={MySql ODBC 5.1 Driver};" _
& "server=" & server _
& ";Uid=" & user _
& ";Pwd=" & pwd _
& ";Database=" & database
GetConnStr = strCn
'"Provider=MSDAORA.1;Data Source=ORCL;User ID=scott;Password=tiger;Persist Security Info=True"
End Function
Function InitFirstRow (sheet As Object)
' set font, interior, first row's style
Dim obj As Object
Set obj = sheet.Cells.Font
obj.Name = "Calibri"
obj.Size = 12
Set obj = sheet.Rows("1:1")
obj.RowHeight = 37
obj.Font.Bold = True
obj.AutoFilter
obj.WrapText = True
obj.Interior.ColorIndex = 37
obj.Interior.Pattern = xlSolid
sheet.Activate
With ActiveWindow
.SplitColumn = 2
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
End Function
Function GetDataRowCount (sheet As Object) As Integer
Dim obj As Object
Set obj = sheet.Cells
Dim i As Integer
i = 0
Do
If obj.Range("A1").Offset(i).Text = "" Then Exit Do
i = i + 1
Loop
GetDataRowCount = i
End Function
Sub CreateResourceTab ()
Dim conn As New ADODB.Connection ' 定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim strCn As String, strSql As String
strSql = "create table Resource(ID int,EnglishName varchar(40),StartDate varchar(20),AssignedSOW varchar(100),TL varchar(40),Status varchar(200));"
strCn = GetConnStr()
conn.Open strCn
If conn Is Nothing Then
MsgBox "连接失败" & conn.Errors(0).Description
Return
End If
conn.Execute strSql
conn.Close
End Sub
Sub ReadData ()
Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表
Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strCn As String, strSql As String '字符串变量
strCn = GetConnStr()
'下面的语句将读取数据表数据,并将它保存到excel工作表中:画两张表想像一下,工作表为一张两维表,记录集也是一张两维表
strSql = "select * from Resource" '定义SQL查询命令字符串
cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn
rs.Open strSql, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
Set sht = ThisWorkbook.Worksheets("DesTab") '把sht指向当前工作簿的sheet1工作表
' delete all data
sht.Cells.Delete Shift:=xlUp
sht.Cells(1, 1) = "No."
sht.Cells(1, 2) = "English Name"
sht.Cells(1, 3) = "Start Date"
sht.Cells(1, 4) = "Assigned SOW"
sht.Cells(1, 5) = "TL"
sht.Cells(1, 6) = "Status"
i = 2
Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列操作
sht.Cells(i, 1) = rs("ID") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列
sht.Cells(i, 2) = rs("EnglishName") '把当前字段2的值保存到sheet1工作表的第i行第2列
sht.Cells(i, 3) = rs("StartDate")
sht.Cells(i, 4) = rs("AssignedSOW")
sht.Cells(i, 5) = rs("TL")
sht.Cells(i, 6) = rs("Status")
rs.MoveNext '把指针移向下一条记录
i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行
Loop '循环
rs.Close '关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数
InitFirstRow sht
Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
sht.Activate
ThisWorkbook.Save
MsgBox "Read " & (i - 2) & " records"
End Sub
Sub SaveData ()
Dim i As Integer, j As Integer ' i,j为整数变量;
Dim sht As Worksheet ' sht 为excel工作表对象变量,指向某一工作表
Dim cn As New ADODB.Connection ' 定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim strCn As String, strSql As String ' 字符串变量
strCn = GetConnStr()
Set sht = ThisWorkbook.Worksheets("SrcTab") '把sht指向当前工作簿的sheet1工作表
sht.ClearArrows
cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn
j = GetDataRowCount(sht)
For i = 2 To j '循环开始, 构造SQL命令
strSql = "insert into Resource(ID, EnglishName, StartDate, AssignedSOW, TL, Status) " _
& "values( " _
& sht.Cells(i, 1) _
& ",'" & sht.Cells(i, 2) _
& "','" & sht.Cells(i, 3) _
& "','" & sht.Cells(i, 4) _
& "','" & sht.Cells(i, 5) _
& "','" & sht.Cells(i, 6) & "');"
' 执行SQL
cn.Execute strSql
Next
cn.Close '关闭数据库链接,释放资源
MsgBox "Insert " & (j - 1) & " records"
End Sub
Sub DeleteData ()
Dim cn As New ADODB.Connection ' 定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim strCn As String, strSql As String ' 字符串变量
strSql = "delete from Resource" '定义SQL查询命令字符串
strCn = GetConnStr()
cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn
cn.Execute strSql
cn.Close
End Sub
Public Function Conn_SqlServer (ByVal serverIP As String, _
userid As String, _
password As String, _
database As String) As Connection
Dim sConStr As String
sConStr = "driver=sql server;" _
& "server=" & serverIP _
& ";Uid=" & userid _
& ";Pwd=" & password _
& ";Database=" & database
Dim conn As New ADODB.Connection
conn.Open sConStr
If conn Is Nothing Then
MsgBox "连接已关闭"
Exit Function
Else
MsgBox "连接成功"
Conn_SqlServer = conn
End If
End Function
Public Function closeConnection (ByVal conn As Connection)
If conn Is Nothing Then
MsgBox "连接已关闭"
Else
conn.Close
MsgBox "连接关闭成功"
End If
End Function
Sub TestConn()
Dim conn As New ADODB.Connection
conn = Conn_SqlServer("Y012593/sqlexpress", "sa", "!sa2010", "happy")
Call closeConnection(conn)
End Sub
Sub TestOracleConnect ()
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strSql As String
strSql = "select sysdate from dual"
Set cn = New ADODB.Connection
cn.Open "Provider=MSDAORA.1;Data Source=ORCL;User ID=scott;Password=tiger;Persist Security Info=True"
If cn Is Nothing Then
MsgBox "连接已关闭"
Return
End If
rs.Open strSql, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
strSql = rs("sysdate") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列
MsgBox "连接成功,当前时间为: " & strSql
rs.Close '关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数
cn.Close
End Sub
在Excel在用ADO读写数据库
最新推荐文章于 2021-04-11 08:49:46 发布