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 вставил в тело цикла и отбирал уже по коду текущей записи рекордсета.