2015-10-23 2 views
2

Мой код VBA работает нормально, или я еще не нашел проблему ... У меня была проблема, когда я использовал rs.movelast, где recordcount = 0. Поэтому я прокомментировал rs.movelast, и мой код работает нормально.У меня есть проблемы с этим .recordcount() без .movelast?

Но, я знаю, что при использовании recordcount() это хорошая практика, чтобы сделать .movelast, потому что recordcount учитывает только то, к чему обращались.

Мой код:

Set rs = db.OpenRecordset(varSQL0, dbOpenDynaset) 

' rs.MoveLast 
    Debug.Print rs.RecordCount 
    If rs.RecordCount = 0 Then 
'----create new----- 
     Set rs1 = CurrentDb.OpenRecordset(Name:="Supplier_Dnotes", Type:=RecordsetTypeEnum.dbOpenDynaset) 
       With rs1 
       .AddNew 
       ![Supplier_Dnote_Ref] = varDnoteRef 
       ![Supplier_Dnote_date] = Forms!delivery_Note_Ex.Supplier_Dnote_date 
       ![Created_By] = gLoggedIn 
       ![Created_Date] = Date 
       .Update 
      End With 
    rs1.Close 
    Set rs1 = Nothing 
    Else 
..... 

будет я когда-либо проблемы с моей recordcount, если исключить .movelast?

Есть ли альтернативный метод, чтобы попытаться избежать этой потенциальной проблемы?

Я должен добавить, что я проиндексировал supplier_dnote_ref, поэтому если возникла проблема, новая запись не должна добавляться, потому что она уже завершается. Кроме того, теперь я проиндексировал свою таблицу, recordcount() не должен превышать 1, я думаю.

ответ

3

Если вы хотите использовать RecordCount, вы должны сделать MoveLast. Но, как вы заявили, это проблема, если у вас нет записей.

Но вам не обязательно знать правильный счет, только если есть записи. Альтернативный метод должен был бы использовать для вашего If-то-иначе "RecordCount = 0" это вместо

If Not (rs.EOF And rs.BOF) then 
    ' the record count is > 0 
    'Code... 
Else 
    ' the record count is 0 
    'Code... 
End If 

BOF означает: До записи

EOF означает: После записи

, что подразумевает => EOF AND BOF: Нет записей

+0

ах, я вижу, это интересный способ взглянуть на него. Я попробую! Поэтому мне больше не нужно 'rs.movelast', потому что я не использую' rs.recordcount'? – LiamH

+0

Да, это правильно. Я отредактировал свой ответ, надеясь, что теперь это станет более ясным. – asdev

+0

Я изменил свой код, и он отлично работает! Мне было легче использовать 'If (rs.EOF и rs.BOF)', чем использовать 'not'. То же самое, я думаю, я просто не хотел менять код 'then' и' else'. – LiamH

0

Вы не должны использовать movelast для добавления записи. Это может только добавить некоторое время к операции без каких-либо целей.

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