alibek писал(а):Потому что курсор серверный.
Укажи клиентский курсор и будет давать актуальные данные.
Dim rst As ADODB.Recordset
...
Set rst = New ADODB.Recordset
Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorLocation = adUseClient
rst.Open "select semestrID, data from semestр"
MsgBox rst.RecordCount
rst.MoveLast
st.MoveFirst
Такой баг только в DAO видел, вроде ADO нету этогоAndrew Sherd писал(а):Хм... у меня примерно такая же ситуевина... толко не помог перенос курсора на сторону пользователя...
Public Function RecCount(rs As ADODB.Recordset) As Long
Dim i As Long
Do
i = i + 1
rs.MoveNext
Loop While Not rs.EOF
RecCount = i
End Function
SELECT Count(*) from (твой селект) A
SET NOCOUNT ON
SET NOCOUNT OFF
Dim Base As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set base = New ADODB.Connection
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Const CONNSTR1 As String = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog="
Const CONNSTR2 As String = ";Data Source="
base.Open CONNSTR1 & "ИМЯ_БАЗЫ" & CONNSTR2 & "ИМЯ_СЕРВЕРА", "ЛОГИН", "ПАРОЛЬ"
rs.ActiveConnection = a
rs.CursorLocation = adUseClient
rs.LockType = adLockOptimistic
rs.CursorType = adOpenDynamic
rs.Open "SELECT * FROM [Questions]"
cmd.ActiveConnection = base
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM [Questions] WHERE TID=2"
Set rs = cmd.Execute
MsgBox rs.RecordCount
MsgBox rs.AbsolutePosition
Andrew Sherd писал(а):Вот простой пример...
Последние два МсгБокс'а выдают "-1"
alibek писал(а):Вообще-то, любые запросы, полученные через cmd.Execute, являются серверными, проверь rs.CursorLocation и удивись. Поэтому и RecordCount=-1.
Andrew Sherd писал(а):Так и как это лечится....
прости те уж назойливость ньюба
exec master.dbo.xp_cmdshell '"D:\lab.cmd"'
declare @P1 int
set @P1=0
declare @P2 int
set @P2=16388
declare @P3 int
set @P3=8193
declare @P4 int
set @P4=0
exec sp_cursoropen @P1 output, N'exec master.dbo.xp_cmdshell ''"d:\lab.cmd"''', @P2 output, @P3 output, @P4 output
select @P1, @P2, @P3, @P4
Set rs = cmd.Execute
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open cmd,,adOpenStatic, adLockReadOnly, adCmdText
Тебе же написали - что возвращает rs.State ?
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open cmd,,adOpenStatic, adLockReadOnly, adCmdText
Предположим я делаю выборку SQL-запросом - и его результаты я должен обрабатывать уже в другом!? Или закрывать и вновь открывать текущий?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0