Office中国论坛/Access中国论坛
标题:
【新手入门】之二十二:浅谈ADO之Conmmand番外篇——创建参数
[打印本页]
作者:
roych
时间:
2023-5-25 00:41
标题:
【新手入门】之二十二:浅谈ADO之Conmmand番外篇——创建参数
昨天Access交流群里有群友提问,如果不愿意拼接SQL,该如何使用ADO进行追加数据。
我记得之前猫神好像写过一个帖子,但时间久远,一时间我也找不到了。所以打算自己随意写一个帖子。
不拼接SQL,通常需要使用占位符来处理。在使用占位符的时候,自然需要设置好数据类型,那么传入的值就会按既定数据类型进行处理了。这有些像Access的参数查询一样:
PARAMETERS userName Text ( 255 ), age Short, logDate DateTime;
SELECT 表1.userName, 表1.age, 表1.logDate
FROM 表1;
复制代码
如上代码,先创建3个参数,运行的时候,只要用户按指定的数据类型输入,那么就能查询出正确的数据了。
对于ADO,可以使用同样的思路来处理。先创建ADO数据连接(connection),再设置命令(command),通过command来创建参数,再执行带参数的SQL命令即可。代码如下:
Private Sub cmdInsert_Click()
Dim cmd As New ADODB.Command
Dim cnn As ADODB.Connection
Dim strSQL As String
Set cnn = CurrentProject.Connection
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText
strSQL = "INSERT INTO 表1 (userName, age, logDate, remark) VALUES (?, ?, ?, ?)"
'。参数名不必和字段名一致,但参数必须与字段的数据类型一一对应。
'也可以写成以下。不过一般情况下,建议还是像上面一样,加上字段名便于理解。
'strSQL = "INSERT INTO 表1 VALUES (?, ?, ?, ?)"
cmd.Parameters.Append cmd.CreateParameter("myUser", adVarChar, adParamInput, 255, Me.userName)
cmd.Parameters.Append cmd.CreateParameter("myAge", adInteger, adParamInput, , Me.age)
cmd.Parameters.Append cmd.CreateParameter("myDate", adDate, adParamInput, , Me.logDate)
cmd.Parameters.Append cmd.CreateParameter("myRemark", adVarChar, adParamInput, 255, Me.Remark)
cmd.CommandText = strSQL
cmd.Execute
cnn.Close
Set cmd = Nothing
Set cnn = Nothing
End Sub
复制代码
如上所示,占位符为问号(?),不需要区分数据类型。而是把这部分交给了创建参数部分。
[attach]64554[/attach]
其它关联链接如下,欢迎参阅:
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别
【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集
【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统
作者:
roych
时间:
2023-5-25 00:59
附件在压缩时可能有点问题。由于原帖中含有SQL语句,因此没法更新原帖附件了。
如有错误,请使用此处的附件。
或者将原帖附件中的窗体和表导入到您的数据库中再使用(使用前请确保引用了ADO库)。[attach]64558[/attach]
顺带说一下,使用本方法,在Access里是不支持一条语句批量插入的【即:i nsert into values (数据1), (数据2), (数据3)】。因此,尽管减少了字符串拼接所引起的错误,但执行效率上还是比导入或者追加查询要差一点。
作者:
accben
时间:
2023-5-26 16:41
重温Command的参数。
作者:
wuwu200222
时间:
2023-6-21 11:23
学习
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3