2015-12-31 3 views
0

Привет, все, у меня есть эта ситуация в VB для доступа. enter image description hererecordset не может найти запись

GenraReport_Click() - основная функция, называемая при нажатии на botton в отчете.

Temp представляет собой таблицу, содержащую некоторые данные, как это: enter image description here

Теперь я создал набор записей RS в цикле каждую запись Temp, полем пункта. И это работает, проблема в том, когда я называю цены функций, которые должны делать то же самое, но по цене поля.

Проблема возникает, когда я пытаюсь позвонить rs! Price (или rs! [Цена], я попробовал оба), это говорит мне, что нет записей. Я положил первый вызов в конце первого цикла, чтобы начать снова с новой функции.

(я пытался сделать основной цикл с ценой вместо пункта, и она работает, так что это не таблица, а не синтаксис проблема. Что это может быть?

+0

мои идеи о проблеме: делает , rs! поле потребляет запись, поэтому первый цикл удаляет все записи из набора записей? или, может быть, movefirst не работает и rema ins к последнему элементу? – nescionomen93

+1

a) вопросы должны включать фактический код, а не изображения кода. B) VB.NET IsNot VBA, непонятно, какой из них вы используете, больше похож на vba. См. [Ask] – Plutonix

+0

Я использую vba, – nescionomen93

ответ

1

Вашего Do Until цикл, вероятно, превышает число . записей, доступных в наборе записей, поэтому ошибки компилятора на «No Current Record» Обычно правильный способ перебрать набора записей, чтобы установить ограничение на число итераций к Recordset EOF собственности:

Dim rs As Recordset 
Dim s As String, i As Integer 

Set rs = CurrentDb.OpenRecordset("temp") 

rs.MoveLast 
rs.MoveFirst 

s = "": i = 1 
If rs.RecordCount > 0 Then 
    Do While Not rs.EOF ' OR Do Until rs.EOF 

     Select Case i 
      Case 1 
      s = CStr(rs!Price) 

      Case Is < rs.RecordCount 
      s = s & ", " & CStr(rs!Price) 

      Case Else 
      s = s & ", and " & CStr(rs!Price) 
     End Select 

     i = i + 1 
     rs.MoveNext 
    Loop 
End if 

rs.close 
Set rs = Nothing 
+0

В начале это была идея, но два последних элемента, которые будут конкатенированы в строке цикла, имеют что-то другое. Например, если элементы в таблице составляют 1,2,3,4,5, то строка вывода должна быть: «1,2,3,4 и 5». – nescionomen93

+0

См. Обновление с примером. Подумайте о создании своей конкатенированной строки с условными операторами, сравнив итератор цикла с 'rs.recordcount'. Здесь я использую [Select Case] ​​(https://msdn.microsoft.com/en-us/library/cy37t14y.aspx), альтернативу нескольким условиям If/Then – Parfait

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