Office中国论坛/Access中国论坛
标题: querytable 的数据源路径 [打印本页]
作者: wu8313 时间: 2005-3-23 07:33
标题: querytable 的数据源路径
这是一段在excel中作querytable的代码:
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DBQ=photo.mdb;DefaultDir=;Driver={Microsoft Access Driver " _
), Array( _
"(*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8ageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCo" _
), Array("mmitSync=Yes;")), Destination:=Range("a2"))
为何 DefaultDir 这一句为何不能等于一个string型变量
我改为一个绝对的路径来给这个数据源,运行没有问题。
设为空将读取 "我的文档" 这个默认路径 可是那个photo.mdb并不是在"我的文档"
我改为一个绝对的路径来给这个数据源,运行没有问题。
[此贴子已经被作者于2005-3-22 23:33:56编辑过]
作者: 老鬼 时间: 2005-3-24 05:14
当然可以等于一个string型变量,不知道你是怎么设置的?"ODBC;DBQ=photo.mdb;DefaultDir=" & 变量 & ";Driver={Microsoft Access Driver "
作者: wu8313 时间: 2005-3-24 06:23
我想把e这个变量赋给DefaultDir,以便于读取和该活动工作簿相同目录下的.mdb文件路径
c这个变量赋给from后面的一句
关于DBQ,我想应该可以直接写上mdb的名称photo.mdb就可以的,直接写死,不给变量
[attach]9567[/attach]
[此贴子已经被作者于2005-3-23 22:23:43编辑过]
作者: 老鬼 时间: 2005-3-27 05:28
EXCEL有自带ACCESS的DSN驱动,不必自建ODBC。简化后的代码如下:
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=MS Access Database;DBQ=" & ThisWorkbook.Path & "\photo.mdb;DefaultDir=;", Destination:=Range("A1"))
.CommandText = Array("SELECT 表1.ID, 表1.姓名, 表1.照片 FROM 表1")
.Refresh BackgroundQuery:=False
End With
[此贴子已经被作者于2005-3-26 21:49:59编辑过]
作者: wu8313 时间: 2005-3-29 04:54
问题解决。
看到这个旧贴,贴上修改后的代码。
Private Sub CommandButton1_Click()
'在本例中 取得了来自mdb的一个表 "表1"中的数据
'可以利用如下代码,来建立 根据acc中数据 自动刷新 图表的问题
'PivotTables 数据透视表对象 帮助关键词 "pivottables"
'querytable 查询表 指使用外部数据源的工作表 帮助关键词 "querytables"
Application.StatusBar = "Query is currently refreshing: please wait"
'更新前清除所有单元格的内容
Cells.Select
Selection.ClearContents
Range("A1").Select
'******************************
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=MS Access Database;DBQ=" & ThisWorkbook.Path & "\photo.mdb;DefaultDir=;", Destination:=Range("A1"))
.CommandText = Array("SELECT 表1.ID, 表1.姓名, 表1.照片 FROM 表1")
.Refresh BackgroundQuery:=False
' 如果行号作为第一列添加到指定查询表则为 True。 _
Boolean 类型,可读写。也就是在刷新后的数据区域添加自动编号
.RowNumbers = True
'******************************
'如果每次打开工作簿时,数据透视表高速缓存或查询表自动更新, _
本属性为 True。默认值为 False。Boolean 类型,可读写。
' .RefreshOnFileOpen = False
'=========设置 excel去查询acc数据在后台执行 和 定时刷新数据的间隔=============
'本示例使第一张工作表上的数据透视表报表的查询在后台执行。
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
'返回或设置两次刷新之间的分钟数,可读写.Long 类型. _
说明: 将周期设置为 0(零)则会使定时刷新失效,等同于将该属性设置为 Null。
.RefreshPeriod = 1 '每相隔1分钟 定时刷新来自acc表中的数据
.PreserveColumnInfo = True
'MsgBox "Query is currently refreshing: please wait"
Application.StatusBar = "Query is currently refreshing: please wait"
End With
'动态改变状态栏的提示消息
With Worksheets(1).QueryTables(1)
If .Refreshing Then
Application.StatusBar = "Query is currently refreshing: please wait"
Else
Application.StatusBar = "Query is currently refreshed complete" '改变状态栏的提示消息
End If
End With
'=============相关路径的取得===========
'取得 "我的文档" 的路径
Debug.Print "The current default file path is " & Application.DefaultFilePath
'取得当前工作簿的路径和完整文件名称
Debug.Print "The name of the active workbook is " & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
'取得excel 应用程序的路径:
Debug.Print "The path is " & Application.Path
'============end=======================
'===========取得标题和工作表名称==========
'设置应用程序的标题名称
ActiveWorkbook.Worksheets.Application.Caption = "从 access 表中取得数据"
'活动工作表的名称
ActiveSheet.Name = "取得acc表中的数据"
'============end=======================
End Sub
多谢老鬼的指教!!!
[attach]18149[/attach]
[此贴子已经被作者于2006-5-30 21:02:14编辑过]
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |