Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3303|回复: 8

[已解决]求助读取ACCESS数据库路径是否能变更路径。

[复制链接]
发表于 2014-1-23 19:40 | 显示全部楼层 |阅读模式
本帖最后由 qinhuan66 于 2014-1-23 21:09 编辑

求助读取ACCESS数据库路径是否能变更路径。
意思是ACCESS数据库能否存放在个人信息文件夹内,不要存放在单位文件夹内)现在不存放在单位文件夹出错。
在此非常感谢hwc2ycy版主提供的全部代码。谢谢hwc2ycy老师
个人信息.rar (241.85 KB, 下载次数: 5)
 楼主| 发表于 2014-1-23 20:02 | 显示全部楼层
还发现一个问题,就是重复姓名和单位名称时只提取第一个人而已。没有选择性
例如 ;
2014-01-23-182654.png
回复

使用道具 举报

发表于 2014-1-23 20:37 | 显示全部楼层
这个选择性,你应该能做出来吧?
adorst有movenext,moveprevious方法。
回复

使用道具 举报

发表于 2014-1-23 20:38 | 显示全部楼层
文件的保存位置可以通过对话框来选择。
回复

使用道具 举报

发表于 2014-1-23 20:57 | 显示全部楼层    本楼为最佳答案   
  1. Const adUseClient = 3
  2. Const adModeShareDenyWrite = 8
  3. Const adModeReadWrite = 3
  4. Const adModeRead = 1

  5. Dim AdoConn As Object, AdoRst As Object
  6. Dim strFullName$
  7. Sub Main()
  8.     Dim strSql$
  9.     Dim strMsg$
  10.     Dim i As Integer
  11.     If Len(strFullName) = 0 Then
  12.         With Application.FileDialog(msoFileDialogFilePicker)
  13.             .AllowMultiSelect = False
  14.             '.Filters.Add("Access数据库文件", ".mdb")
  15.            ' .Filters.Add
  16.             .InitialFileName = ThisWorkbook.Path
  17.             If .Show Then
  18.                 strFullName = .SelectedItems(1)
  19.             Else
  20.                 MsgBox "请选择要打开的数据库"
  21.                 Exit Sub
  22.             End If
  23.         End With
  24.     End If
  25.     If Len(Dir(strFullName)) = 0 Then
  26.         MsgBox strFullName & "不存在"
  27.         Exit Sub
  28.     End If
  29.             
  30.     If Len([c2].Value) = 0 Or Len([b3].Value) = 0 Then
  31.         MsgBox "信息不完整"
  32.         Exit Sub
  33.     End If
  34.     If Not OpenConnect(strFullName, "695360052") Then
  35.         Exit Sub
  36.     End If
  37.     strSql = "select * from 个人信息 where 单位名称='" & [c2].Value & "' and 姓名='" & [b3].Value & "'"
  38.     If Not RunSql(strSql) Then
  39.         Exit Sub
  40.     End If
  41.     With AdoRst
  42.         If .RecordCount < 1 Then
  43.             MsgBox "无符合条件的记录"
  44.             .Close
  45.             Exit Sub
  46.         End If
  47.         Do
  48.             i = i + 1
  49.             Range("j2").Value = .Fields("单位性质").Value    '单位性质
  50.             Range("n2").Value = .Fields("参保类别").Value   '参保类别
  51.             Range("h3").Value = .Fields("身份证号").Value    '身份证号
  52.             Range("q2").Value = .Fields("参保时间").Value    '时间
  53.             Range("q3").Value = .Fields("参加工作时间").Value    '参加工作时间
  54.             Range("t3").Value = .Fields("联系地址").Value    '地址
  55.             strMsg = [b3].Value & " 一共有 " & .RecordCount & " 条记录"
  56.             strMsg = strMsg & ",这是第 " & i & "  条记录" & vbCr
  57.             strMsg = strMsg & "点击 是 显示下一条记录,否 退出"
  58.             If MsgBox(strMsg, vbYesNo) = vbNo Then
  59.                 Exit Sub
  60.             End If
  61.             .movenext
  62.         Loop While Not .EOF
  63.     End With
  64.     MsgBox "已经到最后一条记录"
  65.     Set AdoRst = Nothing
  66. End Sub

  67. Function OpenConnect(strFullName As String, Optional dbpasswd As String = "") As Boolean
  68.     Dim StrConn$
  69.     On Error GoTo ErrorHandler
  70.     If AdoConn Is Nothing Then
  71.         Set AdoConn = CreateObject("ADODB.Connection")
  72.     Else
  73.         OpenConnect = True
  74.         Exit Function
  75.     End If

  76.     Select Case Application.Version
  77.         Case "14.0", "12.0"
  78.             StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source='" & _
  79.                       strFullName & "';Jet OLEDB:Database Password='" & dbpasswd & "';"
  80.         Case Else
  81.             StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  82.                       "Data Source='" & strFullName & "';Jet OLEDB:Database Password='" & dbpasswd & "';"
  83.     End Select

  84.     With AdoConn
  85.         .CommandTimeout = 5
  86.         .ConnectionTimeout = 5
  87.         .CursorLocation = adUseClient
  88.         .Mode = adModeRead
  89.         .ConnectionString = StrConn
  90.         .Open
  91.     End With

  92.     OpenConnect = True
  93.     Exit Function

  94. ErrorHandler:
  95.     MsgBox Err.Number & vbCrLf & Err.Description
  96.     Set AdoRst = Nothing
  97.     Set AdoConn = Nothing

  98. End Function

  99. Function RunSql(sql As String) As Boolean
  100.     On Error GoTo ErrorHandler
  101.     Set AdoRst = AdoConn.Execute(sql)
  102.     RunSql = True
  103.     Exit Function
  104. ErrorHandler:
  105.     MsgBox Err.Number & vbCrLf & Err.Description
  106. End Function
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!太好了谢谢了版主。

查看全部评分

回复

使用道具 举报

发表于 2014-1-23 21:13 | 显示全部楼层
  1. Sub Main()
  2.     Dim strSql$
  3.     Dim strMsg$
  4.     Dim i As Integer
  5.     If Len(strFullName) = 0 Then
  6.         With Application.FileDialog(msoFileDialogFilePicker)
  7.             .AllowMultiSelect = False
  8.             '.Filters.Add("Access数据库文件", ".mdb")
  9.             ' .Filters.Add
  10.             .InitialFileName = ThisWorkbook.Path
  11.             If .Show Then
  12.                 strFullName = .SelectedItems(1)
  13.             Else
  14.                 MsgBox "请选择要打开的数据库"
  15.                 Exit Sub
  16.             End If
  17.         End With
  18.     Else

  19.         If MsgBox("当前文件为" & strFullName & vbCr & "需要重新选择嘛?", vbYesNo) = vbYes Then
  20.             Set AdoConn = Nothing
  21.             With Application.FileDialog(msoFileDialogFilePicker)
  22.                 .AllowMultiSelect = False
  23.                 .InitialFileName = ThisWorkbook.Path
  24.                 If .Show Then
  25.                     strFullName = .SelectedItems(1)
  26.                 Else
  27.                     MsgBox "请选择要打开的数据库"
  28.                     Exit Sub
  29.                 End If
  30.             End With
  31.         End If
  32.     End If


  33.     If Len(Dir(strFullName)) = 0 Then
  34.         MsgBox strFullName & "不存在"
  35.         Exit Sub
  36.     End If

  37.     If Len([c2].Value) = 0 Or Len([b3].Value) = 0 Then
  38.         MsgBox "信息不完整"
  39.         Exit Sub
  40.     End If
  41.     If Not OpenConnect(strFullName, "695360052") Then
  42.         Exit Sub
  43.     End If
  44.     strSql = "select * from 个人信息 where 单位名称='" & [c2].Value & "' and 姓名='" & [b3].Value & "'"
  45.     'strSql = "select * from 个人信息 where 姓名='" & [b3].Value & "'"
  46.     If Not RunSql(strSql) Then
  47.         Exit Sub
  48.     End If
  49.     With AdoRst
  50.         If .RecordCount < 1 Then
  51.             MsgBox "无符合条件的记录"
  52.             .Close
  53.             Exit Sub
  54.         End If
  55.         Do
  56.             i = i + 1
  57.             Range("j2").Value = .Fields("单位性质").Value    '单位性质
  58.             Range("n2").Value = .Fields("参保类别").Value   '参保类别
  59.             Range("h3").Value = .Fields("身份证号").Value    '身份证号
  60.             Range("q2").Value = .Fields("参保时间").Value    '时间
  61.             Range("q3").Value = .Fields("参加工作时间").Value    '参加工作时间
  62.             Range("t3").Value = .Fields("联系地址").Value    '地址
  63.             strMsg = [b3].Value & " 一共有 " & .RecordCount & " 条记录"
  64.             strMsg = strMsg & ",这是第 " & i & "  条记录" & vbCr
  65.             strMsg = strMsg & "点击 是 显示下一条记录,否 退出"
  66.             If MsgBox(strMsg, vbYesNo) = vbNo Then
  67.                 Exit Sub
  68.             End If
  69.             .movenext
  70.         Loop While Not .EOF
  71.     End With
  72.     MsgBox "已经到最后一条记录"
  73.     Set AdoRst = Nothing
  74. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-1-23 21:15 | 显示全部楼层
其余的代码不变,就换这一个主过程,另外,顶部加strFullName的声明。
回复

使用道具 举报

发表于 2014-1-23 21:23 | 显示全部楼层
可以做成是上一条,否下一条,取消退出。
这样机动更强。
回复

使用道具 举报

 楼主| 发表于 2014-1-23 21:59 | 显示全部楼层
hwc2ycy 发表于 2014-1-23 21:23
可以做成是上一条,否下一条,取消退出。
这样机动更强。

唉老师就是专业,我怎么没有想到呢?我新开一个贴,你帮我弄弄行吗?谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 18:07 , Processed in 0.188304 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表