2015-08-07 1 views
0

Я написал следующий код для импорта данных из таблицы Access в Excel, но получаю сообщение об ошибке rs.MoveFirst:Сообщение об ошибке «Либо EOF или BOF истинно, либо текущая запись была удалена»

либо EOF или BOF истинно, или текущая запись была удалена

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim ws As Excel.Application 
Dim strSQL As String 
Dim i As Long 

strSQL = "SELECT * FROM salebill where date >= " & _ 
sale.fromdate.Value & " And date <= " & sale.todate.Value & "" 

Set cn = New ADODB.Connection 

With cn 
    .Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source=D:\Payroll Soft\Acess\Mobile Shop.mdb;" 
    .Open 
End With 

Set rs = New ADODB.Recordset 
rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect 

rs.MoveFirst 
MsgBox (rs.RecordCount & " Rows Generated") 

''Code to Export Data to Export'' 

Set ws = CreateObject("Excel.Application") 
ws.Workbooks.Add 
ws.range("a3").Select 
ws.Selection.NumberFormat = "0" 

For i = 0 To rs.Fields.Count - 1 
    ws.ActiveCell.Offset(0, i).Value = rs.Fields(i).Name 
Next 
ws.range("a4").Select 
Do Until rs.EOF 
    For i = 0 To`enter code here` rs.Fields.Count - 1 
     ws.ActiveCell.Offset(0, i).Value = rs.Fields(i).Value 
    Next 
    ws.ActiveCell.Offset(1, 0).Select 
    rs.MoveNext`enter code here` 
Loop 
rs.Close 
+0

Какая линия выдает эту ошибку? – Fred

+0

rs.moveFirst ....................... Ошибка здесь – Nilesh

+0

, тогда набор записей либо пуст, либо уже на 'BOF'. Перед попыткой доступа к набору записей вы должны проверить «EOF» и «BOF». – Fred

ответ

0

вы должны проверить EOF, прежде чем пытаться использовать набор записей.

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim ws As Excel.Application 
Dim strSQL As String 
Dim i As Long 

strSQL = "SELECT * FROM salebill where date Between #" & _ 
    sale.fromdate.Value & "# And #" & sale.todate.Value & "#" 


Set cn = New ADODB.Connection 

With cn 
    .Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source=D:\Payroll Soft\Acess\Mobile Shop.mdb;" 
    .Open 
End With 

Set rs = New ADODB.Recordset 
rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect 

If Not rs.EOF Then 
    rs.MoveFirst 
    MsgBox (rs.RecordCount & " Rows Generated") 

    ''Code to Export Data to Export'' 

    Set ws = CreateObject("Excel.Application") 
    ws.Workbooks.Add 
    ws.range("a3").Select 
    ws.Selection.NumberFormat = "0" 

    For i = 0 To rs.Fields.Count - 1 
     ws.ActiveCell.Offset(0, i).Value = rs.Fields(i).Name 
    Next 
    ws.range("a4").Select 
    Do Until rs.EOF 
     For i = 0 To rs.Fields.Count - 1 
      ws.ActiveCell.Offset(0, i).Value = rs.Fields(i).Value 
     Next 
     ws.ActiveCell.Offset(1, 0).Select 
     rs.MoveNext 
    Loop 
    If (rs.State And adStateOpen) = adStateOpen Then rs.Close 
    Set rs = Nothing 

End If 

If (cn.State And adStateOpen) = adStateOpen Then cn.Close 
Set cn= Nothing 
+0

sir Я сделал необходимые изменения в соответствии с вашим предложением, но не работал. Но когда я изменил свой запрос strSQL на «Select * from salebill», он отлично работает. Поэтому я думаю, что проблема может быть в запросе strSQL. Можете ли вы мне помочь, как передать запрос SQL. – Nilesh

+0

Что вы подразумеваете под «передачей SQL-запроса»? Если вы имеете в виду добавить, где между двумя датами, посмотрите на ответ снова, я обновил его. – Fred

+0

Подробнее об этом можно найти здесь http://stackoverflow.com/questions/3725177/how-to-search-between-2-dates-and-times-in-access – Fred

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

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