Страница: 1 |
Страница: 1 |
Вопрос: Помогите новичку: RecordCount = -1
Добавлено: 23.09.04 11:06
Автор вопроса: AleksP
Есть БД на Oracle, хочу написать для нее интерфейс.
Возникла проблемма: не могу подсчитать количество записей в Recordset используя RecordCount, выдает -1.
Из за чего это может быть?
Привожу свой код:
Private Sub Form_Load()
Dim rst As New ADODB.Recordset
Dim myConn As New ADODB.Connection
Dim stConn As String, strSQL As String
Set myConn = New ADODB.Connection
stConn = "Provider=OraOLEDB.Oracle;Data Source=WORK;User Id=user;Password=gfd26;"
myConn.Open stConn
If rst.State = 1 Then
rst.Close
Set rst = Nothing
End If
strSQL = "Select * from vnp.goods"
rst.Open strSQL, myConn, adOpenDynamic, adLockOptimistic
rst.MoveLast
rst.MoveFirst
MsgBox rst.RecordCount
' При этом можно нормально пробежать по всем данным
While Not rst.EOF
MsgBox rst(0).Value
rst.MoveNext
Wend
rst.MoveFirst
myConn.Close
End Sub
Еще просьба: поделитесь ссылками где можно почитать про ADODB.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 23.09.04 13:28
Исходники по БД Oracle:
http://www.vb.kiev.ua/code/db/VB_Connect_Oracle8i.zip
У ADO есть свой файл help, он в составе mdac, если не ошибаюсь - там примеры на VB самые нормальные по ADODB, ADOX, ADOR
Номер ответа: 2
Автор ответа:
Shota
Вопросов: 22
Ответов: 52
Профиль | | #2
Добавлено: 23.09.04 17:40
Я с этой проблемой сталкивался, проблема в следующей строке:
rst.Open strSQL, myConn, adOpenDynamic, adLockOptimistic
если использовать не это сочетание:
adOpenDynamic, adLockOptimistic
а другое ( не помню точно кажется........ точно только что проверил, работает )
adOpenKeyset, adLockOptimistic
тогда работает...
Номер ответа: 3
Автор ответа:
Shota
Вопросов: 22
Ответов: 52
Профиль | | #3
Добавлено: 23.09.04 17:44
Почему в твоем случае rst.RecordCount = -1 честно говоря не могу объяснить, но проблема есть и о ней написано в книге:
"Разработка настольных приложений, MS Access 2002"
Автор: Кен Гетц ......... (либо что-то похожее......
Кстати отличная книга.... рекомендую.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 24.09.04 11:25
myConn.Open stConn
Может лучше смотрится так:
myConn.ConnectionString = "Provider=OraOLEDB.Oracleata Source=WORK;User Id=user;Password=gfd26;"
? В правильности ConnectionString ты уверен?
Потом, друг другу противоречат строки:
Dim myConn As New ADODB.Connection 'и
Set myConn = New ADODB.Connection
т.е. либо вторую стоку убери, либо New в первой строке.
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 24.09.04 11:28
Едем дальше: зачем это надо было?
rst.Close
Set rst = Nothing
End If
Ты же не сообщал ещё rst о твоем соединении
rst.ActiveConnection = myConn
Номер ответа: 6
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #6
Добавлено: 24.09.04 11:32
дальше текст тоже дико глючный, короче твой пример легче по полной будет переписать, живого места от старого примера не останется Кстати, работа с Oracle в данном случае не отличается от работы с Access кроме строки подключения с базой, т.что смотри другие примеры работы с ADODB и пиши, пиши, пиши...