2

次のコード スニペットに対して、(より少ないコードを使用する) より良い解決策はありますか。これは、私が VB6 で多くのことを行っていることに気づき、それを削減したいと考えていました。

私が理解しているように、Connection.Executeは機能しません

    SQL = "SELECT SomeID FROM TableA"
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText
    SomeID = RecordSet.Fields(0).Value
    RecordSet.Close

    SQL = "SELECT AnotherID FROM TableB"
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText
    AnotherID = RecordSet.Fields(0).Value
    RecordSet.Close

これは、よりきちんとした方法があるかどうかを確認するだけの機能上の問題ではありません。

4

3 に答える 3

1

RecordSet.Open()との両方のデフォルト パラメータは次のConnection.Execute()とおりです。

  • adOpenForwardOnly
  • adLockReadOnly

異なる設定を使用しますが、あなたのケースではデフォルトを使用しない明らかな理由はありません。

Connection.Execute()特に静的SQLを使用しているように見えるため、なぜそれが機能しないと思うのかわかりません。

Function FetchOneField(Connection, SQL)
  With Connection.Execute(SQL)
    FetchOneField = .Fields(0).Value
    .Close
  End With
End Function

SomeID    = FetchOneField(Connection, "SELECT SomeID FROM TableA")
AnotherID = FetchOneField(Connection, "SELECT AnotherID FROM TableB")

' or, not expressed as a function (not less lines, but "tidier" nevertheless)'
With Connection.Execute("SELECT SomeID FROM TableA")
  SomeID = .Fields(0).Value
  .Close
End With
于 2009-03-16T10:52:53.607 に答える
0

クエリごとに1つのレコードがあると仮定すると、この方法で実行できます

SQL = "SELECT TableA.SomeID, TableB.AnotherID FROM TableA, TableB"
RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText
SomeID = RecordSet.Fields(0).Value
AnotherID = RecordSet.Fields(1).Value
RecordSet.Close
于 2009-03-16T12:36:12.533 に答える
0

Connection.Execute 動作するはずです。これは私のために働く:

  Const Sql1 As String = "SELECT SomeID FROM TableA"
  SomeID = Connection.Execute(Sql1)(0).Value

  Const Sql2 As String = "SELECT AnotherID FROM TableB"
  AnotherID = Connection.Execute(Sql2)(0).Value

...個人的にはConnection.Execute、接続プールなどから接続を解放することについて明示できる行をカプセル化します.

于 2009-03-16T13:28:39.363 に答える