Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 在备注/文本字段中保存SQL语句_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 在备注/文本字段中保存SQL语句

Ms access 在备注/文本字段中保存SQL语句,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我正在Access数据库中构建一个批处理表,以便在用户单击表单上的“提交”按钮后保存要处理的表单中的操作 我唯一关心的是SQL语句本身将包含文本限定符。当我提交要存储在数据库中的sql语句时,我必须将sql字符串包装在文本限定符中,并且我希望确保在批处理表中执行Insert语句时不会转义语句限定符 例如: SQL语句(操作语句) SQL语句(批存储) 最后,我将遍历批处理表,只执行字段sql,并更新另一个字段以表示其执行情况,但我希望确保sql字段本身将与要执行的sql语句一致,而不会丢失字符串

我正在Access数据库中构建一个批处理表,以便在用户单击表单上的“提交”按钮后保存要处理的表单中的操作

我唯一关心的是SQL语句本身将包含文本限定符。当我提交要存储在数据库中的sql语句时,我必须将sql字符串包装在文本限定符中,并且我希望确保在批处理表中执行Insert语句时不会转义语句限定符

例如: SQL语句(操作语句)

SQL语句(批存储)

最后,我将遍历批处理表,只执行字段
sql
,并更新另一个字段以表示其执行情况,但我希望确保
sql
字段本身将与要执行的sql语句一致,而不会丢失字符串限定符

编辑(2012-08-13@13:42下午中央标准时间) 为了让您了解这种嵌套是如何被合并的,以下是方法:

Public Sub BatchAdd(ByRef db As Database, action As BatchAction, sql As String)
    Dim bsql As String
    Dim bact As Integer: bact = CInt(action)
    bsql = SQLInsert("tblBatchTransaction", _
                    "action, txt", _
                    (CStr(bact) & ",'" & sql & "'"))
    db.Execute bsql
End Sub

SLQInsert只构建一个SQL插入语句。不,您可以看到我可能会出现字符串限定符问题。

如果我正确理解您的问题,您希望以可以按原样运行的方式存储SQL语句。然而,内部的单引号正在成为阻碍。尝试将外部单引号替换为双引号:

INSERT INTO tblBatch(act, sql) VALUES (0, "INSERT INTO tblGrpLoc (gid, txt) VALUES (2, 'Select * From tblInformation')")

它们并不是真正的阻碍,我可以预见问题最终会迎刃而解,并希望得到一些逻辑来缓解问题的发生。@GoldBishop是来自查询或VBA的sql?您可以通过参数避免这个问题。没有找到任何关于参数编码的好文档。我所做的每件事都有太多的假设。我上一次处理Access是在2002年,在我转换到MSSQL之前,所以我对Access的了解已经过时了。如果你非常不喜欢参数,你可以使用记录集,同样地避免这个问题。您正在一次插入一条记录,因此速度应该不是问题。我没有说我不喜欢参数,只是说我没有找到任何好的资源来解释参数的使用。由于Access不允许真正的批处理,最终的结果是遍历批处理表并一次执行一条存储的语句。我不确定您要去哪里,但您似乎已经不再存储SQL,所以
Set qdf=db.CreateQueryDef(“”,DLookup(“SQLText”,“sysSQL”),设置qdf=db.CreateQueryDef“ObjectType='Query'和ObjectName='AddTable'”):qdf.Parameters!txtTableName=TableName
:qdf.Execute dbFailOnError
Public Sub BatchAdd(ByRef db As Database, action As BatchAction, sql As String)
    Dim bsql As String
    Dim bact As Integer: bact = CInt(action)
    bsql = SQLInsert("tblBatchTransaction", _
                    "action, txt", _
                    (CStr(bact) & ",'" & sql & "'"))
    db.Execute bsql
End Sub
INSERT INTO tblBatch(act, sql) VALUES (0, "INSERT INTO tblGrpLoc (gid, txt) VALUES (2, 'Select * From tblInformation')")