Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

奖金:如何自制登录界面,使MDB前台用户登录SQL

sturmtiger  发表于:2012-09-26 14:47:05  
复制

说明
----------
各位老师,我有一个Access连接SQL的较复杂的问题,长期被困扰希望有人解惑,我已按照本论坛的《提问要求》仔细看了SQL帖子区的近250条帖子,可惜没能找到答案。如有老师能帮我解决,我会很高兴奉上奖金300元表示衷心感谢,真诚提问不是玩笑。

 

问题
-----------
我使用Access的MDB文件作为前台,链接SQL中的表,做了一个服务器/客户端形式的数据库。已在SQL中对不同用户设置了对表的操作权限,所以MDB文件中的链接表不保存登录密码。目前使用时,用户需要在Access弹出的登录提示框中输入用户名和密码,然后就可以使用有权限的各个链接表。

现在我希望能用自己做的登录窗体代替Access自动弹出的登录窗体,用户在输入正确的用户名和密码后,即可像以前正确登录后一样,使用有权限的各个链接表。这样做的目的是通过自己做的登录界面获得用户名,然后将该用户对数据库的某些操作保存到对应于该用户的记录中。就像用户登录淘宝网后,其采购的物品归属在该

用户的购物记录中。

注意,这不是用VBA语句建立和SQL的一次性连接,以访问某个指定的数据表。我需要的是,用户在登录界面输入一次密码后,可以在MDB文件中使用各个有权限链接表,直到退出MDB文件。

 

非常感谢您的指导,希望能找到解决的办法。

 

Top
煮江品茶 发表于:2012-09-26 16:09:45


sturmtiger 发表于:2012-09-27 13:01:53
呵呵,管理员捂着嘴在偷笑

sturmtiger 发表于:2012-09-27 13:27:29

对问题再补充说明一下:

----------

我们知道,Access在使用ODBC链接SQL中的表时可以选择链接表中不保存密码,当用户第一次访问链接表时会弹出登录界面,正确输入用户名和密码后用户就可以使用所有的链接表,而不仅仅是当时希望连接的那一个表。所以,MDB和Access肯定是在某个地方保存了当前用户的用户名和密码,这样该用户访问其他链接表时就不用再次输入密码,直到用户关闭MDB文件。在下一次打开这个MDB文件时,仍然要输入一次密码。

我希望做到的,是在MDB文件中自己做一个窗体,在用户打开这个MDB前台文件时就显示这个登录窗体,用户输入密码后窗体和SQL端进行连接,如果密码正确则接该用户登录成功,后面就可以使用MDB中的所有链接表,就像他在Access的登录界面上登录成功后一样。

所以,我觉得这个问题的实质是用一个自定义的窗体去告诉Access,它应该用什么用户名和密码(可能还有其它连接信息)将这个MDB前台文件和SQL端连接起来。窗体制作等等我都知道,只要请某位老师告诉我这个问题要使用Access哪方面的功能,或者思路方向是什么就可以了。

由于本人是论坛新人,没有积分可用作奖励,所以只好用奖金了,见笑,呵呵。



sturmtiger 发表于:2012-10-04 10:25:32
还没有人答复,自己顶一下,请管理员放行,谢谢!

dbaseIIIer 发表于:2012-10-04 15:03:35

你建立一个登陆窗体,验证登陆就把

 

uid=xxx;pwd=xxx

 

加在 connectString,建立一个新的连接表,成功读到数据就马上删掉!

 

 

其他相同服务器的数据表就能使用了!



sturmtiger 发表于:2012-10-05 10:29:45

谢谢daseIIIer老师的指点,我觉得您的方法很好,由于本人水平有限还有一些地方没看懂,呵呵,请再提示一下,谢谢。

 

我按照您的方式建立了登录窗体,并且希望登录的用户名为XXX和密码为YYY,通过窗体和SQL建立连接的VBA代码如下:

 

Dim ConnStr As String
Dim Conn As ADODB.Connection
Set Conn = New ADODB.Connection
ConnStr = "DRIVER={SQL Server}; SERVER=(服务器IP就不显示了); UID=XXX; PWD=YYY; DATABASE=(数据库名称就不显示了)"
Conn.Open ConnStr

 

运行代码建立连接的过程中没有提示出错,所以我估计代码应该是对的。

那么,您说“建立一个新的连接表,成功读到数据就马上删掉!”这句话具体怎么理解呢?麻烦您再提示一下,谢谢,祝国庆节快乐。



dbaseIIIer 发表于:2012-10-05 12:55:15

你这个是 建立 ado连接哦!

 

我说的是建立 连接表!

 

在帮助文件找  CreateTableDef 然后你会看到实例:

Set dbsCurrent = OpenDatabase("DB1.mdb")

   ' Create a linked table that connects to a Microsoft SQL
   ' Server database.
   Set tdfRoyalties = _
      dbsCurrent.CreateTableDef("Royalties")
   ' Note: The DSN referenced below must be set to
   '       use Microsoft Windows NT Authentication Mode to
   '       authorize user access to the Microsoft SQL Server.
   tdfRoyalties.Connect = _
      "ODBC;DATABASE=pubs;DSN=Publishers"
   tdfRoyalties.SourceTableName = "roysched"
   dbsCurrent.TableDefs.Append tdfRoyalties
   Set rstRemote = _
      dbsCurrent.OpenRecordset("Royalties")

你用 .connect 里放入你加入了 uid 和 pwd 的 connectString 就能建立数据连接了。

.openRecordset 后 就成功 连接了。

 

之后所有表都能自动登入了!

 

如果不行,你就再加一段(帮助文件里 TableDef.RefreshLink 方法)

 

   tdfLinked.RefreshLink

就可以了。



sturmtiger 发表于:2012-10-24 11:32:08
谢谢dbaseIIIer老师,问题已经解决。

李振兴 发表于:2012-12-07 21:48:17
奖金给了没有

sturmtiger 发表于:2012-12-17 11:37:53
已经给了。

总记录:10篇  页次:1/1 9 1 :