0

さて、私は自分の DB である bookBilling というテーブルにクエリを実行して、billingID の列の下にある値を取得しています。

最初のクエリでは、Cookie が保持する値に基づいてテーブルから顧客 ID を取得します。2 番目のクエリでは、その custID 値を取得し、それに関連付けられているbillingID を取得しようとしています。

query = "SELECT custID FROM bookSession WHERE session='"&theCookie&"'"
'--Connect to DB'
 Set objConn = ConnectDB()
'--Query to DB'
 Set objRS = objConn.Execute(query)
 custID = objRS.Fields("custID")

  query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
  objConn.Execute(query)

ここが問題になるところです。これを使用して値を取得しようとしました:

billingID = objRS.Fields("billingID")

それがうまくいかなかったとき、クエリをブラウザーに出力して、それが機能することを確認し、正常に戻ってきたことを確認し、SQL Server Management Studio で確認しました。その後、私はそれを少しいじってみることにしましたが、テーブルの最初の項目であるため、参照として「0」を使用するとうまくいくことがわかりました。

billingID = objRS.Fields(0)

それがうまくいったので、テーブルの列ヘッダーが正しいことを知っています。以前にそれを見て、他のクエリで使用しました。なぜこれが起こるのか誰にも分かりますか?接続をクリアしなかったか、後で閉じたことが原因ですか?

ありがとう

4

4 に答える 4

2

とにかく、2 つの別々のクエリを実行するのは遅いです。ほとんどの場合、それらを 1 つのステートメントに結合する方が高速です。

SELECT billingID
FROM bookBilling bb
INNER JOIN bookSession bs ON bs.custID=bb.custID
WHERE bs.session= @theCookie

また、Cookie は単なるテキスト ファイルであり、誰でもテキスト ファイルを編集できます。そのようにクエリで Cookie 値を直接置き換えると、SQL インジェクションの可能性があります。これは通常の攻撃ベクトルではありませんが、それでも可能です。

特定のエラーに関しては、レコード セットで開くのではなく、接続から直接 2 番目のクエリを実行します。

objConn.Execute(query)

まったく何も得られないことに驚いています。表示されている値objRS.Fields(0)は、おそらくcustID前のクエリからのものであると思います。しかし、私が推奨したようにクエリを統合すると、それはすべて無意味になります。

于 2008-12-11T14:31:30.583 に答える
2

ねえ、これを持っていないのはタイプミスですか?

query = "select billingID FROM bookBilling WHERE custID="&custID&""

objRS = objConn.Execute(クエリ)

2 番目のクエリのデータと定義を使用してレコードセットを再読み込みするには.....

考えてみてください。最初のCustIdクエリを使用した最初のオールインワンではなく、最初にObjRSをレコードセットに設定/インスタンス化してから、その後にquery.executeを適用してみてください

于 2008-12-11T14:51:26.783 に答える
0
query = "SELECT billingID FROM bookBilling WHERE custID="&custID&""
objConn.Execute(query)

その 2 番目のクエリの resordset を開いていません。そして、それがまったく影響を与えるかどうかはわかりませんが、クエリに同じ名前を付けることはありません. 確かにそうだと思います。

編集、まあ、それは私の上の人々が言っ​​たことのようなものです、私はスローポークです.

于 2008-12-11T14:53:25.720 に答える
0

くそー、はい、それはタイプミスでした。レコードセットを開いていないのに、列番号を使用しても列名を使用しない理由がわかりません。

@Joel Coehoornクエリの内部結合に関する情報をありがとう。先生は私たちにそうするように言ってきましたが、それを見るまで、私はそれをするのに十分なほど理解していませんでした.

私のテーブルでは、登録時に必ずしもbillingIDが存在するとは限らないため、実際には使用できません。そのため、「EOF」が時々発生します。

みんな、ありがとう!

于 2008-12-11T14:56:23.810 に答える