设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2778|回复: 8
打印 上一主题 下一主题

[ADO/DAO] 在后台数据库创建并链接到本地很奇怪的问题

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-20 11:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Public Function CreateTable(sTableName As String)
'建立表并完成链接

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String
strSQL = "CREATE TABLE [" & sTableName & "] (Number1 String(6), Name2 text(8), Tel3 text(14),Tel4 text(14));"
If cnn.State = adStateOpen Then cnn.Close
cnn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & CurrentProject.path & "\source.mdb;" '不能用Provider 与Data Source关键字
cnn.Execute strSQL
cnn.Close
Set cnn = Nothing
'建立完成,接下的代码是完成链接
'++++++++++++++++++++++++++++++++++
'Dim dbs As DAO.Database
Dim tdl As DAO.TableDef
Set dbs = CurrentDb
Set tdl = dbs.CreateTableDef(sTableName) '新表名
tdl.C & CurrentProject.path & "\source.mdb;" '链接源
tdl.SourceTableName = sTableName '链接表
DoEvents
dbs.TableDefs.Append tdl  '这里第一次会出错,要第二次才能过去,或者出错时点“调试”,再点“继续运行”按钮才能通过
dbs.Close
Set dbs = Nothing

End Function

‘把建立链接的DAO代码换成如下的ADOX代码,执行到相关的那个地方也是一样出错,要二次才能通过
On Error GoTo Errh
Dim DB As ADOX.Catalog
Dim tblLink As ADOX.Table
Set DB = New ADOX.Catalog
DB.ActiveConnection = CurrentProject.Connection
Set tblLink = New ADOX.Table
With tblLink

.Name = TableName


Set .ParentCatalog = DB


.Properties("Jet OLEDB:Create Link") = True


.Properties("Jet OLEDBink Datasource") = CurrentProject.path & "\source.mdb"


.Properties("Jet OLEDBink Provider String") = "MS Access;"


.Properties("Jet OLEDB:Remote Table Name") = TableName

End With
DB.Tables.Append tblLink  '也是这里
Set tblLink = Nothing
Set DB = Nothing
Exit Function
Errh:

MsgBox Err.Description & Err.Number



是不是刚建立的表系统还没有那么快检测到?还是BUG?用了DoEvents也没有用,谁有没有好的办法?
到那个地方出现的错误都是:实时性错误‘3011’,Microsoft Jet数据库引擎找不到对象......
但明明是有对象的,建立也是成功的,程序中共用一个表名变量sTableName,所以名字是不可能错误的,要是错误第二次也不可能通过了。

[ 本帖最后由 盗到稻 于 2008-10-20 11:15 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-10-20 11:38:19 | 只看该作者
此链接表在本地是不是已经存在了
3#
 楼主| 发表于 2008-10-20 12:30:20 | 只看该作者
此表在后台数据库跟本地数据库都没有同名的,就是不存在;而且这个函数前面还有个函数来判断跟要插入的表有没有同名的,如有就删除
4#
发表于 2008-10-20 15:43:21 | 只看该作者
这里没看懂:  tdl.C & CurrentProject.path & "\source.mdb;" '链接源
改为: tbl.Connect = "ms access;database=" & CurrentProject.Path & "\source.mdb"
5#
 楼主| 发表于 2008-10-20 16:18:27 | 只看该作者
那行代码原来是这样子的
tdl.Connect = ";DATABASE=" & CurrentProject.path & "\source.mdb;" '链接源

可能复制上去时不小心点到哪儿给删除了,
6#
发表于 2008-10-21 09:43:30 | 只看该作者
这个不稳定,还是用ado,打开db1.  

[ 本帖最后由 sgrshh29 于 2008-10-21 10:40 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7#
 楼主| 发表于 2008-10-22 22:28:42 | 只看该作者
我的代码跟你的代码一样,怎么我的就有问题,而你的就没有问题呢?
把你的代码复制过去也一样出问题,更想不通的是,在立即窗口调试多少次都没有问题,在窗口中执行就有问题,我看我要撞墙了.

这样看来,应该不是这代码的问题吧,可能是受其它代码影响了
8#
 楼主| 发表于 2008-10-29 02:16:06 | 只看该作者
谢谢站长和各位大侠,原因找到了,
因为后台数据库路径是用subst命令影射的网络驱动器路径所以会有时出错有时不出错,

如果放在正常驱动器或目录下则没有问题,看来是个BUG来的,

为了方便使用,我把服务器的路径\\server\public 用subst影射出本机的Z:盘,谁知竟然会出这样的问题,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-16 19:29 , Processed in 0.103343 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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