私は、フォームから返された値と配列にダンプされたデータベースの値をGetRowsで比較するために設計されたスクリプトを使用しています。チェックの目的は、フォーム値をデータベース値と比較し、データベース内の一致するIDの行のみを更新することです。 これはフォームの隠し変数で行われていますが、ある時点でオンラインでかなりのユーザーがいるため、ユーザーがフォームを完了している間にdbの値が変更される可能性があります。配列に長すぎるLcaseオペレーション
現在のところ、コードではこの比較を実行するために内部ループと外部ループが使用され、一時変数には前述の配列から現在のcol/rowが割り当てられています。この値に対してlcaseおよびtrim操作が実行され、一時変数が取得されます。
これはかなりの性能低下を引き起こしています。ループ状態ではなく、そのアレイの作成中にlcase/trim機能が実行される可能性があるのでしょうか?ここ は私のコードです: **注:このは、このように "FastString" と ".Append" データベース側(MS SQL Server 2008の)上で
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
から表、連結のためのFastStringクラスを利用します配列はビットデータ型列 "Complete"を含むGetRowsによって導出されます。 lcaseとtrim操作は配列のこの列で実行されます。ビットデータ型は出力に隠された文字を追加しますか?視覚的には、私は何も検出されませんが、フォーム入力からの値と "True"のような配列の値を比較すると、一致しません。 「完了」列。
を試してみてください? – AnthonyWJones
'TypeName(yourvariable)'を使用して、データベースのデータとフォームのデータが同じ型であるかどうかを比較することができます。 – stealthyninja
ありがとうございます - 私はMS SQL Server 2008を使用しています。 – buck1112