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
Sql 使用VB连接函数时出现参数错误_Sql_Ms Access_Vba - Fatal编程技术网

Sql 使用VB连接函数时出现参数错误

Sql 使用VB连接函数时出现参数错误,sql,ms-access,vba,Sql,Ms Access,Vba,我正在使用一位朋友提供的以下VBA,它非常适合在MS Access中连接项目 公共函数相关(strField作为字符串_ 字符串形式的字符串_ 可选strWhere作为字符串_ 可选strOrderBy作为字符串_ 可选strSeparator=“,”)作为变量 关于错误转到错误处理程序 '目的:生成相关记录的串联字符串。 '返回:字符串变量,如果没有匹配项,则返回Null。 '参数:strField=要从中获取结果并连接的字段的名称。 'strTable=表或查询的名称。 'strWhere=

我正在使用一位朋友提供的以下VBA,它非常适合在MS Access中连接项目

公共函数相关(strField作为字符串_
字符串形式的字符串_
可选strWhere作为字符串_
可选strOrderBy作为字符串_
可选strSeparator=“,”)作为变量
关于错误转到错误处理程序
'目的:生成相关记录的串联字符串。
'返回:字符串变量,如果没有匹配项,则返回Null。
'参数:strField=要从中获取结果并连接的字段的名称。
'strTable=表或查询的名称。
'strWhere=WHERE子句来选择正确的值。
'strOrderBy=ORDER BY子句,用于对值进行排序。
'stresparator=要在连接的值之间使用的字符。
注:1。在字段/表格名称周围使用方括号,并使用空格或奇数字符。
'           2. strField可以是多值字段(A2007及更高版本),但strOrderBy不能。
'           3. 省略空值,零长度字符串(ZLSs)作为ZLSs返回。
'           4. 向记录集中返回超过255个字符会触发此访问错误:
'               http://allenbrowne.com/bug-16.html
Dim rs作为DAO.Recordset的相关记录
将rsMV作为DAO.Recordset的多值字段记录集进行调整
Dim strSql作为字符串的SQL语句
Dim strOut作为要连接到的字符串的输出字符串。
与绳子的长度一样长。
如果strField是多值字段,则将值设置为布尔标记。
“初始化为空”
ConcatRelated=Null
'生成SQL字符串,并获取记录。
strSql=“SELECT”&strField&“FROM”&strTable
如果strWhere vbNullString,则
strSql=strSql&“WHERE”和strWhere
如果结束
如果strOrderBy vbNullString,则
strSql=strSql&“订购人”和strOrderBy
如果结束
Set rs=DBEngine(0)(0).OpenRecordset(strSql,dbOpenDynaset)
'确定请求的字段是否为多值字段(类型大于100。)
铋值=(rs(0).类型>100)
'循环查找匹配的记录
做而不做
如果你的价值那么
'对于多值字段,循环遍历值
设置rsMV=rs(0)。数值
不使用rsMV.EOF时请勿使用
如果不是IsNull(rsMV(0)),则
strOut=strOut&rsMV(0)和STRESPARATOR
如果结束
rsMV.MoveNext
环
设置rsMV=无
如果ElseIf不为null(rs(0)),则
strOut=strOut&rs(0)和STRESPARATOR
如果结束
下一个
环
rs.Close
'返回不带尾随分隔符的字符串。
lngLen=Len(strOut)-Len(stresparator)
如果lngLen>0,则
ConcatRelated=左(斯特劳特,格兰)
如果结束
退出\u处理程序:
“清理
设置rsMV=无
设置rs=无
退出功能
错误处理程序:
MsgBox“Error”和Err.Number&“:”和Err.Description,vb惊叹号,“ConcatRelated()
恢复退出处理程序
端函数
我通过以下查询成功调用此函数:

INSERT INTO tblData ( SubjectNumber, RECDATE, RecordedDoses, DoseTimes, FoodType, ProgrammingComments )
SELECT d.SubjectNumber, d.RECDATE, Count(d.RECTIME) AS RecordedDoses, ConcatRelated("RECTIME", "qryDump2", "SubjectNumber= """ & d.[SubjectNumber]  & """"  & " AND RECDATE=" & FORMAT(d.RECDATE, "\#yyyy-m-d\#")) AS DoseTimes, ConcatRelated("FoodType", "qryDump2", "SubjectNumber= """ & d.[SubjectNumber]  & """"  & " AND RECDATE=" & FORMAT(d.RECDATE, "\#yyyy-m-d\#")) AS FoodType, d.Visit AS ProgrammingComments
FROM qryDump2 AS d
GROUP BY d.SubjectNumber, d.RECDATE, d.Visit
HAVING Count(d.RECTIME)<2 Or Count(d.RECTIME)>2
ORDER BY d.RECDATE;

where语句,当我使用一个实际值时,例如“1011002”(主题号是文本,而不是数字,即使我给出的示例是数字),串联函数可以工作。当我使用上面提到的内容,即引用表单字段时,我得到了上述错误。

where子句没有检查文本是否有空格,可能在将表单数据放入函数调用之前修剪表单数据,看看这是否会阻止代码在sql中创建空where子句。

您所说的“条件”是什么意思?该词在代码中的任何位置都不会出现。在描述错误条件时,请使用特定的变量和参数名称。此外,这是AccessBasic/VBA,而不是VB.Net。我已更新以包括我提到的标准,并修复了VB/VBA snafu。
SELECT tblDump.SubjectNumber, IIf(tblDump.SD_DAY=1,tblDump.RECDATE,tblDump.RECDATE-1) AS RECDATE, IIf(tblDump.DRUG_Q1=1,tblDump.RECTIME,tblDump.DRUG_Q6) AS RECTIME, tblDump.FoodType, IIf(IIf(tblDump.SD_DAY=1,tblDump.RECDATE,tblDump.RECDATE-1)=tblL.DiscontDate,"DayOfDiscontinuation",IIf(IIf(tblDump.SD_DAY=1,tblDump.RECDATE,tblDump.RECDATE-1)=tblL.CompletionDate,"CompletionDate",IIf(IIf(tblDump.SD_DAY=1,tblDump.RECDATE,tblDump.RECDATE-1)=tblL.[2],"Visit2"))) AS Visit
FROM tblDump LEFT JOIN tblL ON tblDump.SubjectNumber = tblL.SubjectNumber
WHERE tblDump.SubjectNumber=Forms![frm]![test];