我正在使用一个脚本,该脚本旨在通过GetRows将表单返回的值与转储到数组的数据库中的值进行比较。检查的目的是将表单值与数据库值进行比较,并仅更新数据库中匹配的ID行。 我已经在表单中看到了隐藏变量,但由于我们在任何给定时间都有很多用户在线,因此当用户填写表单时,db端的值可能会发生变化。
目前,代码使用内部和外部循环来运行此比较,并为临时变量分配上述数组中的当前col /行。对该值执行lcase和trim操作以获取临时变量 这导致了相当大的性能消耗,我想知道是否可以在创建该数组期间执行lcase / trim功能,而不是在循环情况下执行? 这是我的代码: **注意:这利用FastString类进行连接,因此“FastString”和“.Append”
dim iRowLoop, iColLoop, zRowLoop, strChange, tempDbValsCase
Set strChange = New FastString
for iRowLoop = 0 to ubound(arrDbVals, 2)
for zRowLoop = 0 to ubound(arrFormComplete)
''#****below line is what is causing the bottleneck, according
''#****to a timer test
tempDbValsCase = lcase(trim(arrDbVals(1, iRowLoop)))
''#****
if (mid(trim(arrFormComplete(zRowLoop)),1,8) = trim(arrDbVals(0, iRowLoop))) AND (mid(trim(arrFormComplete(zRowLoop)),9) <> tempDbValsCase) then
dim strFormAllVals
strFormAllVals = arrFormComplete(zRowLoop)
strChange.Append strFormAllVals & ","
end if
next
next
在数据库端(MS SQL Server 2008),通过GetRows派生数组的表包含位数据类型列“完成”。 lcase和trim操作在阵列的此列上执行。 bit数据类型是否在输出中添加任何隐藏字符?在视觉上,我没有检测到任何,但是当我将表单输入中的“True”值与看起来像“True”的数组中的值进行比较时,它不匹配,直到我运行lcase并修剪“完整”栏目。
答案 0 :(得分:1)
尝试
dim iRowLoop, iColLoop, zRowLoop, strChange, tempDbValsCase
dim iCount1, iCount2, match
Set strChange = New FastString
iCount1 = ubound(arrDbVals, 2)
iCount2 = ubound(arrFormComplete)
for iRowLoop = 0 to iCount1
for zRowLoop = 0 to iCount2
' Assign array lookup to a variable '
tempDbValsCase = arrDbVals(1, iRowLoop)
' ...and then perform operations on it one at a time '
tempDbValsCase = trim(tempDbValsCase)
tempDbValsCase = lcase(tempDbValsCase)
' Assign this array lookup to a variable and perform trim on it '
match = trim(arrFormComplete(zRowLoop))
if (mid(match,1,8) = trim(arrDbVals(0, iRowLoop))) AND (mid(match,9) <> tempDbValsCase) then
strChange.Append match & ","
end if
next
next