设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[ADO/DAO] 【新手入门】之二十二:浅谈ADO之Conmmand番外篇——创建参数

[复制链接]
跳转到指定楼层
1#
发表于 2023-5-25 00:41:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天Access交流群里有群友提问,如果不愿意拼接SQL,该如何使用ADO进行追加数据。
我记得之前猫神好像写过一个帖子,但时间久远,一时间我也找不到了。所以打算自己随意写一个帖子。
不拼接SQL,通常需要使用占位符来处理。在使用占位符的时候,自然需要设置好数据类型,那么传入的值就会按既定数据类型进行处理了。这有些像Access的参数查询一样:
  1. PARAMETERS userName Text ( 255 ), age Short, logDate DateTime;
  2. SELECT 表1.userName, 表1.age, 表1.logDate
  3. FROM 表1;
复制代码
如上代码,先创建3个参数,运行的时候,只要用户按指定的数据类型输入,那么就能查询出正确的数据了。
对于ADO,可以使用同样的思路来处理。先创建ADO数据连接(connection),再设置命令(command),通过command来创建参数,再执行带参数的SQL命令即可。代码如下:
  1. Private Sub cmdInsert_Click()

  2.     Dim cmd As New ADODB.Command
  3.     Dim cnn As ADODB.Connection
  4.     Dim strSQL As String

  5.    
  6.     Set cnn = CurrentProject.Connection
  7.     cmd.ActiveConnection = cnn
  8.     cmd.CommandType = adCmdText
  9.    
  10.     strSQL = "INSERT INTO 表1 (userName, age, logDate, remark) VALUES (?, ?, ?, ?)"
  11.    
  12.     '。参数名不必和字段名一致,但参数必须与字段的数据类型一一对应。
  13.     '也可以写成以下。不过一般情况下,建议还是像上面一样,加上字段名便于理解。
  14.     'strSQL = "INSERT INTO 表1  VALUES (?, ?, ?, ?)"

  15.    
  16.     cmd.Parameters.Append cmd.CreateParameter("myUser", adVarChar, adParamInput, 255, Me.userName)
  17.     cmd.Parameters.Append cmd.CreateParameter("myAge", adInteger, adParamInput, , Me.age)
  18.     cmd.Parameters.Append cmd.CreateParameter("myDate", adDate, adParamInput, , Me.logDate)
  19.     cmd.Parameters.Append cmd.CreateParameter("myRemark", adVarChar, adParamInput, 255, Me.Remark)
  20.    
  21.     cmd.CommandText = strSQL
  22.     cmd.Execute
  23.    
  24.     cnn.Close
  25.    
  26.     Set cmd = Nothing
  27.     Set cnn = Nothing
  28. End Sub
复制代码
如上所示,占位符为问号(?),不需要区分数据类型。而是把这部分交给了创建参数部分。


其它关联链接如下,欢迎参阅:
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2023-5-25 00:59:12 | 只看该作者
附件在压缩时可能有点问题。由于原帖中含有SQL语句,因此没法更新原帖附件了。
如有错误,请使用此处的附件。
或者将原帖附件中的窗体和表导入到您的数据库中再使用(使用前请确保引用了ADO库)。
顺带说一下,使用本方法,在Access里是不支持一条语句批量插入的【即:i nsert into values (数据1), (数据2), (数据3)】。因此,尽管减少了字符串拼接所引起的错误,但执行效率上还是比导入或者追加查询要差一点。





本帖子中包含更多资源

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

x
3#
发表于 2023-5-26 16:41:00 | 只看该作者
重温Command的参数。

点击这里给我发消息

4#
发表于 2023-6-21 11:23:31 | 只看该作者
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 13:56 , Processed in 0.074992 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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