обработка ошибок

igor701
Дата: 12.11.2009 18:53:14
Private Sub Êíîïêà61_Click()
DoCmd.OpenReport "otc_Faktura", acViewPreview, "", "[Pechat SF]=0 and [Vagonov otgrugeno]>0", acNormal
Dim s As Integer
Dim ds As DAO.Recordset
Dim fn As Integer

fn = 1
Dim strSQL As String
strSQL = "SELECT * FROM tbl_Naryad WHERE (((tbl_Naryad.[Pechat SF])=0 and [Vagonov otgrugeno]>0))"
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
ds.MoveLast
s = ds.RecordCount
ds.MoveFirst

For i = 1 To s
fn = fn
ds.Edit
ds![Pechat SF] = fn

ds.Update
Debug.Print i, s, fn,
ds.MoveNext
Next i
Me.Requery
Подскажите пожалуйста когда ds.RecordCount 1 или больше то нормально работает а когда 0 пишет текущая запись отсутствует как обойти этот момент
ё
Дата: 12.11.2009 19:03:12
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
If Not ds.EOF Then
  ds.MoveLast
  s = ds.RecordCount
  ds.MoveFirst

  ' ...
    ds.MoveNext 
  Next i
End If
?...?
Дата: 12.11.2009 19:03:41
igor701
Private Sub Êíîïêà61_Click()
DoCmd.OpenReport "otc_Faktura", acViewPreview, "", "[Pechat SF]=0 and [Vagonov otgrugeno]>0", acNormal
Dim s As Integer
Dim ds As DAO.Recordset
Dim fn As Integer

fn = 1
Dim strSQL As String
strSQL = "SELECT * FROM tbl_Naryad WHERE (((tbl_Naryad.[Pechat SF])=0 and [Vagonov otgrugeno]>0))"
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
ds.MoveLast
s = ds.RecordCount
ds.MoveFirst

For i = 1 To s
fn = fn
ds.Edit
ds![Pechat SF] = fn

ds.Update
Debug.Print i, s, fn,
ds.MoveNext
Next i
Me.Requery
Подскажите пожалуйста когда ds.RecordCount 1 или больше то нормально работает а когда 0 пишет текущая запись отсутствует как обойти этот момент

...
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
Do Until ds.EOF
....
  ds.MoveNext
Loop
Me.Requery
develed
Дата: 12.11.2009 19:09:08
Можно так
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
s = ds.RecordCount

If s = 0 then
ds.Close
Exit Sub
End If
igor701
Дата: 12.11.2009 19:13:48
develed,

спасибо всем помогли
грамотей
Дата: 12.11.2009 19:29:53
igor701
develed,

спасибо всем помогли

казнить нельзя помиловать
igor701
Дата: 12.11.2009 21:12:32
грамотей,
Рано порадовался возникла проблема код стал таким
Private Sub Êíîïêà61_Click()
DoCmd.OpenReport "otc_Faktura", acViewPreview, "", "[Pechat SF]=0 and [Vagonov otgrugeno]>0 ", acNormal
Dim s As Integer
Dim ds As DAO.Recordset
Dim fn As Integer
fn = 1
Dim strSQL As String
strSQL = "SELECT * FROM tbl_Naryad WHERE ((tbl_Naryad.[Pechat SF])= 0 and [Vagonov otgrugeno]>0)"
Set ds = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
If ds.RecordCount > 0 Then
ds.MoveLast
s = ds.RecordCount
ds.MoveFirst
For i = 1 To s
fn = fn
ds.Edit
ds![Pechat SF] = fn
ds.Update
ds.MoveNext
Next i
Me.Requery
Else
Exit Sub
End If
Me.Requery
Debug.Print s
End Sub
Но при выполнении условия в режим просмотра выходит только две записи отчета в место положенных по условию отбора в чем дело понять не могу если просто открыть отчет без заполнения полей то выводит нужное количество записей.
Но удивляет то что команда DoCmd.OpenReport стоит самой первой а как остальная часть кода на нее влияет непонятно может кто поможет.
Смысл кода такой чтоб при нажатии кнопки распечатались не распечатанные ранее документы и
повторной распечатки чтобы не было. А при нынешнем выводе всего две записи.
igor701
Дата: 12.11.2009 21:38:57
igor701,

поменя acViewPreview на acViewNormal на печать отправлят нужное количество записей но почему тогда не отображает в просмотре???
develed
Дата: 13.11.2009 09:33:28
Я бы DoCmd.OpenReport вставил в тело цикла и отбирал уже по коду текущей записи рекордсета.