局域网如何同时使用EXCEL共享的数据
我现在编了一个小程序,用来登记和查询数据(登记好的数据和查询数据是直接录入和调用EXCEL里)。现在有一个问题就是如果有一台电脑在使用查询模块,其它机打开查询模块时,说EXCEL数据在使用,就出错了,现在请各位老师帮助一下,局域网如何同时使用EXCEL共享的数据?谢谢!
我的代码下,请老师帮助修改一下:
Dim cnn As Object, rs As Object
Private Sub Command2_Click()
Dim SQL$, f$
If Text1.Text = "" Then Exit Sub
On Error Resume Next
Set rs = cnn.Execute("[Sheet1$]")
SQL = "Select * from [Sheet1$] where " & rs.Fields(0).Name & "='" & Text1.Text & "'"
Set rs = CreateObject("ADODB.recordset")
rs.Open SQL, cnn, 1, 3
With ListView1
.ListItems.Clear
For i = 1 To rs.RecordCount
.ListItems.Add , , rs.Fields(0).Value
For j = 1 To rs.Fields.Count - 1
.ListItems(i).SubItems(j) = rs.Fields(j).Value
Next j
rs.MoveNext
Next i
End With
End Sub
Private Sub Form_Initialize()
Dim SQL$, i&, ii&, j&, a
f = "D:\数据.xls"
If Dir(f) = "" Then
MsgBox "连接错误!", vbCritical
Exit Sub
End If
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider = Microsoft.Jet.Oledb.4.0;Extended Properties =Excel 8.0;Data Source =" & f
Set rs = CreateObject("ADODB.recordset")
SQL = "Select * from [Sheet1$]"
rs.Open SQL, cnn, 1, 3
With ListView1
.ColumnHeaders.Clear
.View = lvwReport
.FullRowSelect = True
.GridLines = True
For i = 0 To rs.Fields.Count - 1
If i > 0 Then
.ColumnHeaders.Add , , rs.Fields(i).Name, 800, lvwColumnCenter
Else
.ColumnHeaders.Add , , rs.Fields(i).Name, 800
End If
Next i
End With
End Sub
Private Sub Form_Terminate()
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
Excel 数据库 共享
[解决办法]
你如果不懂如何使用 SQL Server,要了解如何使用也是很简单的呀。
要做的基本事情就是去安装一个 SQL Server,然后在SQL Server 里建立数据库和数据表,
如果这些都不会你就网上搜或是看 SQL Server 的帮助吧。
之后就是用 VB 的外接程序通过向导生成相关程序,你可以点击 VB 的“外接程序”菜单,然后选择“外接程序管理器”,然后把“数据窗体向导”设置为启动/加载,确定后再点击“外接程序”菜单,就可以看到“数据窗体向导”的菜单项了,然后你可以通过向导去连接你的数据库,向导完成后会生成相关的窗口代码,你可以观察代码去了解如何访问数据库的。
我只是告诉你个学习方法,当然,SQL Server 数据库实际用起来可以很简单,如:
Private Sub Command1_Click()
Dim conn As Object ' 数据库连接对象
Dim rs As Object ' 数据集对象
' 先创建连接对象
Set conn = CreateObject("ADODB.Connection")
' 先连接 SQL Server 数据库
' 数据库连接语句很简单,格式如下:
' PROVIDER=MSDASQL;DRIVER={SQL SERVER};SERVER=服务器名或IP地址;UID=用户帐号;PWD=用户密码;DATABASE=数据库名称;
conn.open "PROVIDER=MSDASQL;DRIVER={SQL SERVER};SERVER=localhost;UID=sa;PWD=123456;DATABASE=yourdb;"
' 当然你也可以做一下校验判断连接是否成功,这里我就不做了,直接进入下一步
' 创建数据集对象
Set rs = CreateObject("ADODB.Recordset")
' 现在可以正式查询数据库了,要说明的是这里用的 3,1 是只读方式进行操作,要读写可以改为 3,3,当然还有别的方式
' 具体的你就参考 MSDN 中 ADO 对象的说明吧,不过这两种是比较常用的方式
rs.open "Select * From 表名", conn, 3, 1
' 完成查询过程后可以通过循环语句把数据读出来
Do While Not rs.EOF ' 如果不是最后一条就一直循环
Print rs!字段名1 & vbTab & rs!字段名2
rs.MoveNext ' 将当前操作记录移动到下一条
Loop
rs.Close ' 操作完关闭
Set rs = Nothing ' 释放数据集对象
conn.Close ' 关闭连接对象
Set conn = Nothing ' 释放连接对象
End Sub
' Module1.bas 文件内容
Public conn As Object
Private Sub Command1_Click()
Dim rs As Object ' 数据集对象
' 创建数据集对象
Set rs = CreateObject("ADODB.Recordset")
rs.open "Select * From 表名", conn, 3, 1
Do While Not rs.EOF ' 如果不是最后一条就一直循环
Print rs!字段名1 & vbTab & rs!字段名2
rs.MoveNext ' 将当前操作记录移动到下一条
Loop
rs.Close ' 操作完关闭
Set rs = Nothing ' 释放数据集对象
End Sub