Новичок SQL внутри вопроса VB - MSAccess 2003 - PullRequest
1 голос
/ 17 сентября 2009

Эй, ребята, кто-нибудь может мне помочь с простым вопросом. У меня есть этот оператор SQL ниже в подпрограмме в VB в доступе от нажатия кнопки, и я новичок в этом.

Вот что я набрал:

Private Sub Command0_Click()
  Dim rs As Recordset
  Dim sql As String
  Dim db As Database

  Set db = CurrentDb

  sql = "SELECT * FROM Transactions"

  Set rs = db.OpenRecordset(sql)

  Do Until rs.EOF
    rs.MoveNext

  Loop
  If Not rs.EOF Then

    MsgBox "test"
  End If

End Sub

Хорошо, как мне это заполнить? По сути, я только начинаю с этого, поэтому мне интересно, как мне взять этот простой код и выполнить его как запрос, чтобы открыть результирующий набор записей.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 17 сентября 2009

некоторые другие замечания и советы:

1) Всегда указывайте, какой тип набора записей вы используете. Здесь, похоже, набор записей DAO, поэтому перейдите к полному объявлению вроде:

Dim rs as DAO.recordset

Запуск на другом компьютере и в зависимости от порядка объявления библиотек ADODB и DAO один и тот же код может вызвать ошибку.

2) Чтобы избежать неприятного сообщения об ошибке, если запись недоступна, можно добавить дополнительный тест, например,

if rs.recordcount = 0 then
Else
    rs.moveFirst
    ....

3) Чтобы просмотреть полный набор записей с помощью debug.print, вы можете сделать это следующим образом. Просто объявите «m_debugLine» как строку и «fld» как DAO.Field в своих объявлениях.

rs.MoveFirst
do while not rs.eof
    m_debugLine = ""
    for each fld in rs.fields
        m_debugLine = m_debugLine + vbTab + fld.value
    next fld
    debug.print m_debugLine
    rs.movenext
loop

4) вы даже можете добавить строку debug.print, чтобы распечатать имена полей перед печатью данных. Я думаю, вы найдете это

2 голосов
/ 17 сентября 2009

Вы помещаете свой код в цикл Do..Loop. Этот код будет оцениваться для каждой найденной записи.

Do Until rs.EOF
   Msgbox "The value for MyField is " & rst!MyField
   rs.MoveNext
Loop
2 голосов
/ 17 сентября 2009

В зависимости от того, что вы пытаетесь сделать, вы можете чрезмерно усложнять это. Лучшим подходом было бы установить источник записей формы (в листе свойств) для таблицы транзакций, а затем удалить нужные поля в форме с помощью визуального дизайнера.

ОДНАКО, если вы действительно должны сделать это таким образом, вот код, который заменит то, что у вас есть, и откроет электронную таблицу, как представление данных в таблице транзакций.

Private Sub Command0_Click()
   docmd.Opentable "transactions"
End Sub

Если вы хотите ограничить результаты запросом, то сначала создайте запрос и сохраните его, а затем используйте следующий код.

Private Sub Command0_Click()
   docmd.OpenQuery "MyQueryName"
End Sub

Чтобы быть чрезвычайно буквальным, ваш оригинальный код DID заполняет набор записей (в объекте rs). Вы можете получить доступ к полям по имени, используя код в цикле while, например

debug.print rs("Field1")
1 голос
/ 17 сентября 2009

вы получаете в столбцах записи для набора записей, таких как rs (0) или rs ("имя столбца") ....

если в вашей таблице транзакций есть три столбца с именами a, b, c, вы можете получить к ним следующее:

rs(0)
rs(1)
rs(2)

или

rs("a")
rs("b")
rs("c")
...