2009-09-16 5 views
1

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

Вот что я напечатал:

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 

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

Спасибо!

+0

Открывается в чем? У вас есть построенная для этого форма? –

+0

Будь более конкретным о том, что означает «заселить это». – JohnFx

+0

Я думаю, что он ищет заявление, которое ему нужно в его DO ... LOOP, чтобы реально прочитать данные в наборе записей, которые он сейчас не делает. – SqlRyan

ответ

2

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

1) Всегда указать, какой тип записей вы используете. Здесь, кажется, DAO записей, так что идти на полной декларации, как:

Dim rs as DAO.recordset 

Runing на другом компьютере, и в зависимости от порядка декларирования в 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

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

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

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

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

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

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

debug.print rs("Field1") 
+0

Это больше для некоторых процессов автоматизации, которые мне нужно выполнить. У меня есть hundereds объекта запроса в базе данных доступа, которые запускаются в обычном режиме, а затем полученный набор данных используется для разных отчетов xls и автоматизации построения диаграмм в точке питания. который я могу делать с vb, всегда использовал построитель запросов и никогда не удосужился изучить sql в vb. поэтому самое первое, что я пытался сделать, это запустить запрос и получить тот же простой результат, что и со встроенным в построитель запросов. спасибо – Justin

+0

спасибо за помощь! – Justin

1

вы получите в столбцах записи для записей, как RS (0) или RS («ColumnName») ....

если таблица транзакций имеет три столбца с именем а, б, вы могли бы получить к ней нравится:

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

или

rs("a") 
rs("b") 
rs("c") 
2

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

Do Until rs.EOF 
    Msgbox "The value for MyField is " & rst!MyField 
    rs.MoveNext 
Loop 
+0

Ах, да ... забыл про синтаксис rs! Fieldname в Access. :) – klabranche

+0

Я привык использовать сначала MyField или первый! [MyField With Spaces], а не rst («MyField»), чтобы я мог отличать имена полей от вызовов функций. –

+0

спасибо большое! – Justin

Смежные вопросы