Более элегантное решение для извлечения ценности из БД с использованием набора записей - PullRequest
2 голосов
/ 16 марта 2009

Есть ли лучшее решение (с использованием меньшего количества кода) для следующего фрагмента кода. Это то, чем я занимаюсь в 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

Это не функциональная проблема, просто посмотреть, есть ли более аккуратный способ.

Ответы [ 3 ]

1 голос
/ 16 марта 2009

Параметры по умолчанию для 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
0 голосов
/ 16 марта 2009

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, в которых я мог бы четко указать освобождение соединений из пула соединений и т. Д.

0 голосов
/ 16 марта 2009

Предполагая, что у вас есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...