access中链接表的问题

一个使用asp和mdb的站点,某个mdb中使用了链接表,链接到当前目录的另一个mdb中的表,这样可以达到数据共享。  
faq-it.org/delphi_win_sdk/问题来了,当将网站发布到网站的时候,因为网上空间路径和我本机不同,所以链接表失败,网页当然也不能打开。  
我觉得解决办法有:  
一种,在本机上创建与网上空间完全相同的目录结构。但这很麻烦,特别是经常要换网站的话。  
一种,如何让链接表使用相对路径,就是链接到当前目录下的那个mdb文件?(对了,access很弱智,链接表记录的是绝对路径)。  
还一种,如何通过编程(asp  或者本地vba)来实现对链接表的链接的修改?(又对了,access还是弱智,更新链接表我只能使用手工更新,一定要找到那个路径下的mdb才行!可本地路径和网上不一样呀)

谁能告诉我如何实现上面的后两种方法?

---------------------------------------------------------------

以下是我自己在用的adox代码,只为了证明我说的access有此功能(说句不好听的:这关access  p事啊?这是ado模型该解决的问题。而且你也提错地方了,提到asp那一块更合适),做access编程的都应该看得懂,如果你看不懂我也只能说遗憾了。

Public  Function  NewLinkedExternalTableMdb()  
       Dim  strTargetDB()  As  String  
       Dim  strProviderString()  As  String  
       Dim  strSourceTbl()  As  String  
       Dim  strLinkTblName()  As  String  
       Dim  catDB  As  ADOX.Catalog  
       Dim  tblLink  As  ADOX.Table  
       Dim  tmpLink  As  ADOX.Table  
       Dim  i  As  Integer  
       Dim  j  As  Integer  
       Set  catDB  =  New  ADOX.Catalog  
       catDB.ActiveConnection  =  CurrentProject.Connection  
       i  =  catDB.Tables.Count  
       ReDim  strTargetDB(i)  
       ReDim  strProviderString(i)  
       ReDim  strSourceTbl(i)  
       ReDim  strLinkTblName(i)  
       i  =  1  
       For  Each  tmpLink  In  catDB.Tables  
               If  tmpLink.Properties("Jet  OLEDB:Create  Link")  Then  
                       If  Trim(tmpLink.Properties("Jet  OLEDB:Remote  Table  Name"))  <>  ""  Then  
                               strLinkTblName(i)  =  tmpLink.Name  
                               strTargetDB(i)  =  tmpLink.Properties("Jet  OLEDB:Link  Datasource")  
                               strProviderString(i)  =  tmpLink.Properties("Jet  OLEDB:Link  Provider  String")  
                               strSourceTbl(i)  =  tmpLink.Properties("Jet  OLEDB:Remote  Table  Name")  
                               Do  While  InStr(1,  strTargetDB(i),  "/")  <>  0  
                                       strTargetDB(i)  =  Mid(strTargetDB(i),  InStr(1,  strTargetDB(i),  "/")  +  1,  Len(strTargetDB(i)))  
                               Loop  
                               strTargetDB(i)  =  CurrentProject.Path  &  "/"  &  strTargetDB(i)  
                               i  =  i  +  1  
                       End  If  
               End  If

Next  
       j  =  i  -  1  
       For  i  =  1  To  j  
               catDB.Tables.Delete  strLinkTblName(i)  
               Set  tblLink  =  New  ADOX.Table  
               With  tblLink  
                       .Name  =  strLinkTblName(i)  
                       Set  .ParentCatalog  =  catDB  
                       .Properties("Jet  OLEDB:Create  Link")  =  True  
                       .Properties("Jet  OLEDB:Link  Datasource")  =  strTargetDB(i)  
                       .Properties("Jet  OLEDB:Link  Provider  String")  =  strProviderString(i)  
                       .Properties("Jet  OLEDB:Remote  Table  Name")  =  strSourceTbl(i)  
               End  With  
               catDB.Tables.Append  tblLink  
               Set  tblLink  =  Nothing  
       Next  
       Set  catDB  =  Nothing  
End  Function

(0)

相关推荐

  • access中链接表的问题

    一个使用asp和mdb的站点,某个mdb中使用了链接表,链接到当前目录的另一个mdb中的表,这样可以达到数据共享.   faq-it.org/delphi_win_sdk/问题来了,当将网站发布到网站的时候,因为网上空间路径和我本机不同,所以链接表失败,网页当然也不能打开.   我觉得解决办法有:   一种,在本机上创建与网上空间完全相同的目录结构.但这很麻烦,特别是经常要换网站的话.   一种,如何让链接表使用相对路径,就是链接到当前目录下的那个mdb文件?(对了,access很弱智,链接表记

  • 如何 在Access中选择指定日期前的记录?

    我知道,在Access中不能使用DateDiff,那么我们怎样才能选择指定日期前的若干记录呢? 虽然在Access中不能使用DateDiff函数,但我们可以使用日期函数来实现这一功能.看看下面这个"庞大"的示例,就是实现如何选择前8个包括今天及今天以前的日期的记录的语句: select TOP 3 * from mytable where ((YEAR(ndate)<"&year(now)&") or (YEAR(ndate)="&a

  • C#如何将Access中以时间段条件查询的数据添加到ListView中

    一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); listViewItem.SubItems[0].Text="&quo

  • C#处理Access中事务的方法

    本文实例讲述了C#处理Access中事务的方法.分享给大家供大家参考.具体如下: Access不能像SQL server一样直接执行多条语句,但是把多条语句绑成事务还是可以一起执行的. 所谓事务,就是把多件事情当做一件事情来处理.也就是大家同在一条船上! 由一个事务来完成多个表的同步操作,要么都执行成功,要么都不成功.下面举个例子,用C#实现Access数据库事务的处理方法: 向一个表提交数据,同时更新另一个表中的数据 using System; using System.Data; using

  • access中显示MSysObjects系统表的设置方法

    默认access的系统表MSysObjects等是不显示的,需要手动设置access显示MSysObjects等系统表. 设置方法如下: 1. 打开Access 2. 点击"工具"菜单,选择"选项" 3. 在"视图"页上,将"系统对象"勾上 4. 点击"确定"按钮保存设置 5. 点击"工具"菜单,选择"安全"中的"用户与组权限" 6. 选择&quo

  • 用SQL语句查找Access中某表是否存在的小技巧

    Access数据库虽然功能单一,但的确是一个小巧精干的开发伙伴,我在多个项目中与它见面,为了探知Access数据库的本源,今天上网查了些资料.现总结归纳如下: 在Access数据库中通过SQL语句找到某一表是否存在的确是一件困难的事.幸好, Access本身就有一些隐含的数据对象能够保存你库中的信息,今天我就遇到了要用SQL,通过程序查询某一表是否存在的问题,解决方法如下: 由于Access数据库本身的"管理员"组没有访问隐含对象的权限,因此先要:工具 -> 选项 -> 视

  • Access中批量替换数据库内容的两种方法

    今天遇到一个问题,一Access数据库中存放着N条文章记录,现在想替换掉这些文章中的部分内容,我们首先想到的是到网站后台去一条一条修改文章,那如果有1000篇文章,那就在网站后台改1000次,难以想象这是什么样的工作量.其实在Access数据库中可以利用SQL语句来批量替换内容,只需一句话就能解决问题,下面通过两种方法来解决此问题. 方法一:通过Access数据库中的查询分析器来修改(这里我使用的是Access 2003) 1.打开需要修改的Access数据库 2.在数据库"对象"中点

  • Access中使用Create Procedure创建存储过程第1/2页

    在Access自身的帮助中看到了Create Procedure语句,测试了老半天,终于发现了诀窍:必须使用OleDb连接才能使用Create Procedure语句.ODBC连接不支持该语句,提示Create Table语法错误. 创建了存储过程后,使用Office Access工具打开数据库,在"对象 - 查询"中能够看到你创建的存储过程. 创建存储过程的语法: 复制代码 代码如下: Create Procedure YourProc (         @param1 varch

  • ASP在ACCESS中模糊查询"内存溢出"的解决方法

    今天在日常维护一个网站时,发现该网站的留言程序没有经过严格的验证过滤,导致了将近十万条垃圾数据.而其中又不乏重要信息,需要清理数据,以及增加更为严格的验证措施. 而通过在数据库中直接删除又不太科学,会误删很多重要信息. 通过 模糊查询语句: 复制代码 代码如下: select * from Feedback where Comments like '%http%' 结果:"内存溢出" 经过不断的搜索,找出了问题的主要原因: asp 中用 LIKE 关键字查询日文符号就会出错,比如说Ch

  • SQL Server中的数据复制到的Access中的函数

    初步的想法是用两个recordset,一个从SQL取数据,一个往Access里面插入数据 因为表的字段比较多,所以只好用一个循环 复制代码 代码如下: while (!m_pRecordset_sql->adoEOF) { m_pRecordset_access->AddNew(); for (int i = 0; i < m_pRecordset_sql->Fields->Count; i++) { vValue = m_pRecordset_sql->GetColl

随机推荐