局域网如何同时使用EXCEL共享的数据

kof97_wwf 2013-07-22 09:57:42
我现在编了一个小程序,用来登记和查询数据(登记好的数据和查询数据是直接录入和调用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

...全文
496 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kof97_wwf 2013-07-24
  • 打赏
  • 举报
回复
引用 15 楼 SupermanKing 的回复:
首先你的 rs.Fields(0).Name 是什么类型的字段,如果不是字符串类型的,就不能用 like。 还有,不知道你处于什么原因使用 rs.Fields(0).Name 来引用字段名,但建议你先正常的 写字段名称来试验一下。
谢谢了,我正常写字段名称就可以LIKE包含查到了,之前用rs.Fields(0).Name 是想按第一列查找,如果用rs.Fields(0).Name 是不是就不可以用包含TEXT1.text的方法来查找了?
无·法 2013-07-24
  • 打赏
  • 举报
回复
用access吧。 excel太不好用啦
现在还是人类 2013-07-24
  • 打赏
  • 举报
回复
首先你的 rs.Fields(0).Name 是什么类型的字段,如果不是字符串类型的,就不能用 like。 还有,不知道你处于什么原因使用 rs.Fields(0).Name 来引用字段名,但建议你先正常的 写字段名称来试验一下。
kof97_wwf 2013-07-24
  • 打赏
  • 举报
回复
like '%" & Text1.Text & "%'"这个之前我试过不行,不知是不是格式不对,请兄弟帮助写完整谢谢! SQL = "Select * from [Sheet1$] where " & rs.Fields(0).Name & "='" & Text1.Text & "'" 改为:。。。
现在还是人类 2013-07-24
  • 打赏
  • 举报
回复
用 like 作为查询条件 如: SQL = "Select * from 表名 where 字段名 like '%" & Text1.Text & "%'"
kof97_wwf 2013-07-24
  • 打赏
  • 举报
回复
引用 11 楼 SupermanKing 的回复:
你如果不懂如何使用 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
当然数据库还可以执行数据插入、修改、删除等操作,用起来也很简单,如:

' 删除操作
conn.execute "delete from 表1 where id=1"        ' 删除“表1”中“id”字段值为 1 的数据

' 修改数据
conn.execute "update 表1 set 字段1='aaa' where id=1" 

' 添加数据方法1(SQL语句添加法)
conn.execute "insert into 表1(字段1,字段2) values ('aaa','bbb')"

' 添加数据方法2(ADO 数据集对象添加法)
Dim rs As Object                           ' 数据集对象
Set rs = CreateObject("ADODB.Recordset")   ' 创建数据集对象
rs.open "Select * From 表名", conn, 3, 3   ' 查询指定数据表
rs.AddNew                                  ' 添加一条记录
' 设置新记录的字段数据
rs!字段名1 = "aaa"
rs!字段名2 = "bbb"
rs.UpdateBatch                             ' 更新
rs.Close                                   ' 操作完关闭
看完这里你应该对数据库操作有一定了解了,要更深入那就是去了解 SQL 语句以及安全配置问题了。
谢谢,留着慢慢学习! 现在问多个问题 SQL = "Select * from [Sheet1$] where " & rs.Fields(0).Name & "='" & Text1.Text & "'" 这句话如果想改为查询包含Text1.Text里的内容,如何改?即本来是绝对查询的,现在改为包含Text1.Text里的内容。谢谢!
kof97_wwf 2013-07-23
  • 打赏
  • 举报
回复

现在用EXCEL 发现的问题就是这个!
ah_2056 2013-07-23
  • 打赏
  • 举报
回复
引用 8 楼 kof97_wwf 的回复:
[quote=引用 7 楼 Tiger_Zhao 的回复:] 同意5楼。 数据库有现成的锁机制,可以方便处理冲突。 写中间层需要自己管理冲突,对初学者来说更难。
请兄弟帮助一下 如何用SQL SERVER 做数据库,写入、查询、修改、删除,谢了![/quote] CSDN里面一大把,你搜索就行了!!!
kof97_wwf 2013-07-23
  • 打赏
  • 举报
回复
引用 7 楼 Tiger_Zhao 的回复:
同意5楼。 数据库有现成的锁机制,可以方便处理冲突。 写中间层需要自己管理冲突,对初学者来说更难。
请兄弟帮助一下 如何用SQL SERVER 做数据库,写入、查询、修改、删除,谢了!
Tiger_Zhao 2013-07-23
  • 打赏
  • 举报
回复
同意5楼。
数据库有现成的锁机制,可以方便处理冲突。
写中间层需要自己管理冲突,对初学者来说更难。
kof97_wwf 2013-07-23
  • 打赏
  • 举报
回复
楼上的兄弟, SQL SERVER 对于初学来说不会呀!说以用现成的EXCEL,写一个中间层是不是很麻烦的,除了写中间层还有其它方法吗?
现在还是人类 2013-07-23
  • 打赏
  • 举报
回复
你如果不懂如何使用 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
当然数据库还可以执行数据插入、修改、删除等操作,用起来也很简单,如:

' 删除操作
conn.execute "delete from 表1 where id=1"        ' 删除“表1”中“id”字段值为 1 的数据

' 修改数据
conn.execute "update 表1 set 字段1='aaa' where id=1" 

' 添加数据方法1(SQL语句添加法)
conn.execute "insert into 表1(字段1,字段2) values ('aaa','bbb')"

' 添加数据方法2(ADO 数据集对象添加法)
Dim rs As Object                           ' 数据集对象
Set rs = CreateObject("ADODB.Recordset")   ' 创建数据集对象
rs.open "Select * From 表名", conn, 3, 3   ' 查询指定数据表
rs.AddNew                                  ' 添加一条记录
' 设置新记录的字段数据
rs!字段名1 = "aaa"
rs!字段名2 = "bbb"
rs.UpdateBatch                             ' 更新
rs.Close                                   ' 操作完关闭
看完这里你应该对数据库操作有一定了解了,要更深入那就是去了解 SQL 语句以及安全配置问题了。
LichKingSZ 2013-07-22
  • 打赏
  • 举报
回复
某大牛:所有的开发技术问题都可以通过添加一个中间层来解决。。。
现在还是人类 2013-07-22
  • 打赏
  • 举报
回复
引用 4 楼 kof97_wwf 的回复:
等待各位老师帮忙,谢谢
楼上的告诉你啦,让你去用 SQL SERVER,是个好的解决方案呀。 有些东西在设计时就不是为了某些处理而设计的,你硬要这么用,可能会出现很多问题,为了解决这种问题,只能去想办法改变其架构问题才有可能得到解决。但对于应用来说,自己去弄个适合这种用法的架构来改变状况,还不如用个现成具备这种能力的架构体系解决问题,所以选个支持网络的大型数据库是个很好的解决方案呀,不然你的问题会更多,开发时间会更长,技术难度会更大,当然如果你有兴趣,自己写个三层结构的服务程序也可以,你有时间和有兴趣就没问题。
kof97_wwf 2013-07-22
  • 打赏
  • 举报
回复
等待各位老师帮忙,谢谢
ah_2056 2013-07-22
  • 打赏
  • 举报
回复
用SQL SERVER吧,省去自己写个中间层。
kof97_wwf 2013-07-22
  • 打赏
  • 举报
回复
引用 1 楼 sinom 的回复:
某大牛:所有的开发技术问题都可以通过添加一个中间层来解决。。。
我是初生,不是很明,请帮助一下,谢谢!

1,217

社区成员

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

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