MS Access 上云端(1)
时 间:2012-08-18 00:53:20
作 者:dbaseIIIer ID:22003 城市:深圳
摘 要:云端计算已经距离我们不远了,甚至触手可及了。Access与云端数据库连接其实就是那么简单。
正 文:
第一讲:用 Microsoft Access 来建立 SQL Azure Database 的登录
这里我们会用 Access 及 VBA 代码 往 SQL Azure 进行 Pass-thru Query 来建立登入过程。登入后,Access 就能获得 Azure 的 表单、视图、存储过程 的参照了。创建登录的方式,其实就是一句Transact-SQL (T-SQL) :
Create LOGIN MyLoginName WITH password = 'zX/w3-q7jU'
而事实上,应用程序的用户是不用记得这个那么难记的密码的!因为这个用户名和密码其实只是提供我们的 Access 应用程序使用,用户根本也看不到、摸不着的。
其实,创建这个 SQL-Azure 的登录号和密码是有几个步骤的。然而用来操作 SQL-Azure 的 T-SQL,其实大部分都与我们平常连入 MS SQL 相类似的。明细的介绍就看看一下的步骤吧!
1) 建立一个“强”密码,这个是与 Azure 的密码策略攸关的
使用“强”密码是尤其重要的一件事,因为这事关到其他所有的安全措施的,在 SQL Azure 上根本就不能使用 Windows 自身的登录系统 Windows Authentication,什么 WorkGroup, AD 等在公网上是没有派上用场的。记得密码至少8个字节,最少一个数字 或 一个特别符号 例如 &, -, /, ~, ^ 等。
2) 所用的文本时不能与 ODBC 的连接字串有冲突的
为了避免我们编写 ODBC连接字串的麻烦,我们一定不可以在我们的 用户名 和 密码 上面 使用 []{}(),;?*!@ 这些字符。
3) 创建一个 Transact-SQL 登录语句
我们将要在一个Pass-thru Query 里面使用 T-SQL Create LOGIN 来建立登录。由于 Pass-thru 查询是直接把 SQL 毫无隐藏的传递到 SQL Azure,所以大部分情况这些 SQL 就像我们平常用 SQL Server Management Studio SMSS 一样的反应过来:
Create LOGIN MyLoginName WITH password = 'zX/w3-q7jU'
* 注意: Create LOGIN 只能是一个SQL批次语句里唯一的一条语句
4) 确认 登录名称和密码 是在 'master' 库里面建立的
这是必要的,因为在 SQL Azure 内与 SQL Server 不同的地方就是 "USE master" 是无效的语句!USE 语句根本就在 SQL Azure 里面不被支持的。因此,我们在 Access 里,就需要在连接字串列用 "DATABASE=master;" 来克服了。我们就像以下语句用一个让人混淆的名字去建立一个函数去创建这个 连接字串吧:
Public Function obfuscatedFunctionName() As String
obfuscatedFunctionName = "ODBC;" _
& "DRIVER={SQL Server Native Client 10.0};" _
& "SERVER=tcp:MyServerName.database.windows.net,1433;" _
& "UID=MyUserName@MyServerName;" _
& "PWD=MyPassword;" _
& "DATABASE=master;" _
& "Encrypt=Yes"
End Function
我以后的连载里再会教大家怎么 用 Microsoft Access 去建立更安全的 SQL Azure 应用。
5) 创建一个用来执行这个登录的 SQL 执行语句
把以下的 ExcecuteaterDSQL 函数放进一个公用模块,这个函数就是用来执行我们的 Create LOGIN 语句的。我们随时可以调用这个函数往 SQL Azure 发出执行一个没有回传的 T-SQL 语句。这个函数回传 true 当语句能成功的执行到结束。
'这函数是从 SQL Azure 服务的 master 库里执行一个 Action Query SQL
'使用方式: Call ExecMasterDBSQL(strSQL) or If ExecMasterDBSQL(strSQL) = False Then
'
Function ExecMasterDBSQL(strSQL As String) As Boolean
On Error GoTo ErrHandle
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
ExecuteMasterDBSQL = False '默认值
Set db = CurrentDb
'建立临时不记名的 Pass-through QueryDef. This is a
'这是 Microsoft Developer Reference 建议使用的习惯
Set qdf = db.CreateQueryDef("")
'调用函数取得连接 SQL Azure 的连接字串
qdf.Connect = obfuscatedFunctionName
'所要执行的SQL语句
qdf.SQL = strSQL
'若果 SQL 不需要回传记录的,就需要这个设置
qdf.ReturnsRecords = False
'执行这个查询
qdf.Execute dbFailOnError
'若果没有错误发生
ExecMasterDBSQL = True
ExitHere:
'安全理由 也为释放内存,清除变量
On Error Resume Next
Set qdf = Nothing
Set db = Nothing
Exit Function
ErrHandle:
MsgBox "Error " & Err.Number & vbCrLf & Err.Description _
& vbCrLf & "In procedure ExecMasterDBSQL"
Resume ExitHere
End Function
6) 让用户输入登入名称和密码
我们可以很简单的做个窗体来让用户登入的。我们可以再窗体内添加两个文本框,与及一个命令按钮,两个文本框都是不绑定数据源的。给它们取名 txtLoginName 及 txtPassword,命令按钮为 cmdCreateLogin。那个表单就跟下面的差不多了:
然后把下面的代码到命令按钮的Click事件。验证了输入的名称和密码已经录入后,就会呼叫 ExecMasterDBSQL 函数来进行登录到 SQL Azure master库。
Private Sub cmdCreateLogin_Click()
Dim strSQL As String
strSQL = "Create LOGIN " & Me.txtLoginName & " WITH password = '" & Me.txtPassword & "'"
'检查用户和密码是否已经录入
If Len(Me.txtLoginName & vbNullString) = 0 Then
MsgBox "请在登录用户输入数据", vbCritical
ElseIf Len(Me.txtPassword & vbNullString) = 0 Then
MsgBox "Please enter a value in the Password text box.", vbCritical
Else
'执行 ExecMasterDBSQL 函数
If ExecMasterDBSQL(strSQL) = False Then
MsgBox "登入失败!", vbCritical
Else
MsgBox "成功登入!", vbInformation
End If
End If
End Sub
以上的代码检查 ExecMasterDBSQL 函数的返回值,并知会用户这次登录是否成功建立。当我们成功建立一个登录后,我们可以创建 “数据库用户”,并为这个新建的用户授权。创建用户我会放在 第二课为大家介绍的,暂时写到这里。谢谢关注。
注意:需要为 Access 连接 SQL Azure 你需要安装 Microsoft SQL Server 2008 R2 ODBC Driver.
32位 (x86) 操作系统 - 4.5 MB 下载
64位 操作系统 - 4.5 MB 下载
它们的详细信息可以再这里参考: The Microsoft SQL Server 2008 R2 Feature Pack 有关 "Microsoft SQL Server 2008 R2 Native Client"。
开发者你们好,这是地球信息思维开发者 dbaseIIIer (QQ325613888)
更多的 Access/VBA 互联网交互技术,可以参考 Accessoft.com 内部栏目 互联网技术栏目
更多的思维在 新浪微博 Access贴吧 VisualPHP贴吧
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)