powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание рекордсера из рекордсета
32 сообщений из 32, показаны все 2 страниц
Создание рекордсера из рекордсета
    #32664585
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю рекордсет из другого рекордсета (подвыборку)

sviazi_doc_rst.Filter = "[in_kod] = " + CStr(out_doc_kod)
Set vbIborka_sviazey_rst = sviazi_doc_rst.OpenRecordset(dbOpenSnapshot)

Все бы ничего. Но если до этого из рекордсета - родителя производилось удаление - выскакивает ошибка.ю

Может кто знает как ее убрать, или другой способ создания новой выборки без обращения к источнику записей.

(requery не предлагать-исчезает смысл вего деяния.)
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664638
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А .Clone не подходит?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664647
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это как?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664651
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в справке по DAO глянуть влом?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664663
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая ошибка, на какой строке?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664666
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял - клоны полностью идентичны, а мне бы выборочку.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664669
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фильтр
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664689
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фильтры не очень надежны в работе (в общем то из-за этого и создаю новый рекордсет)
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664698
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Установленный фильтр сбивает текущую запись.

А если делать клон, то как я понял, сначала надо скопировать все, а потом выбрать нужное. - потеря скорости.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664701
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рекордсет на рекордсете - это такая редкая вещь, а судя по твоим задаваемым вопросам, я подозреваю, что оно тебе нафиг не нужно. просто ты не знаещь других путей. потому и спрашиваешь про него. лучще опиши задачу и тебе подскажут КАК это можно сделать
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664724
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача проста.

есть цикл по рекордсету - от первой до последней.
В рамках цикла надо открывать групповые выборки этого рекордсета и что-то с ними делать (обновлять, удалять, добавлять, переходить по записям).
В принципе это не очень корректно, но приходится.


sviazi_doc_rst.Filter = "[in_kod] = " + CStr(out_doc_kod)
Set vbIborka_sviazey_rst = sviazi_doc_rst.OpenRecordset()
ну и удалить 2 строки и добавить 1 в эту выборку.

Если есть иные способы охотно приму их на вооружение.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664740
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Select case на каждую "выборку" ?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664746
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял - куда селект кэйз ?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664762
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщение об ошибке можно увидеть?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664793
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Запись удалена"

Но сейчас пробую то же самое вызвать ескуственно - не получается.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664813
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача проста.
есть цикл по рекордсету - от первой до последней.
...
Select case ТИП_ВЫБОРКИ
Case "ЭТА ВЫБОРКА"
ну и удалить 2 строки и добавить 1 в эту выборку.
Case "ДРУГАЯ ВЫБОРКА"
...
end select
конец цикла

то бишь вести обработку "по выборкам" не последовательно, а параллельно
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664829
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, здесь вся штука в том, что выбор из рекордсета в нескоько раз быстрее, чем выбор из начальной таблицы и на порядок - чем из сложного запроса.

таким образом -
рекордсет:
цикл выборок из рекордсета.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664876
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если применить Метод GetRows и удалять,корректировать,добавлять SQL-запросами ?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664883
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim rst1 As Recordset, rst2 As Recordset
Set rst1 = CurrentDb.OpenRecordset("SELECt * FROM vvod_doc_tmp")
DoCmd.RunSQL "DELETE * FROM vvod_doc_tmp"

rst1.Filter = "[Код]>35"
Set rst2 = rst1.OpenRecordset()

runtime error 3167
Ошибка "Запись Удалена"
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664890
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал recordset на основе таблицы, удалил из него запись, создал фильтр, создал второй recordset из первого. Нет ошибок. Может я что-то не понял? Приведи весь код
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664904
Евгешка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мы для такого случая создавали новый рекордсет, делали структуру, как у исходного и каждую запись копировали. Правда, это было ADO и Java Script. Если надо, могу функцию дать.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664912
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL не всегда получается.

Например добавляешь запись и надо знать ее код. (для дальнейших действий со связанными таблицами)
Счетчик - случайный ,
и как??
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664924
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma RСделал recordset на основе таблицы, удалил из него запись, создал фильтр, создал второй recordset из первого. Нет ошибок. Может я что-то не понял? Приведи весь код

Пример чуть выше
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664944
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bor-LА если применить Метод GetRows и удалять,корректировать,добавлять SQL-запросами ?

Ну в общем-то вариант, хотя как-то корявенько.

И как фильтровать?
А что за номер у GetRows в параметре.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664973
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем фильтровать (здалась им эта бронированная комната...) в памяти итак все ну очень быстро
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32664982
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bor-LА зачем фильтровать (здалась им эта бронированная комната...) в памяти итак все ну очень быстро

Фильтровать... Ну привык типа.
А как через getrow??
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665005
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Трудно советовать не зная постановки задачи (такое только на Форумах и встречается ;-) ) Например, кусок из Help
' Печатает загруженные данные.
For intRecord = 0 To UBound(avarRecords, 2)
Debug.Print " " & _
avarRecords(0, intRecord) & " " & _
avarRecords(1, intRecord) & ", " & _
avarRecords(2, intRecord)
Next intRecord
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665013
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bor-LТрудно советовать не зная постановки задачи (такое только на Форумах и встречается ;-) ) Например, кусок из Help
' Печатает загруженные данные.
For intRecord = 0 To UBound(avarRecords, 2)
Debug.Print " " & _
avarRecords(0, intRecord) & " " & _
avarRecords(1, intRecord) & ", " & _
avarRecords(2, intRecord)
Next intRecordА где здесь Getrecords и что такое avarRecords
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665048
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так что с getrows?
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665079
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vam911так что с getrows?

Ну если у Вас нет русского Help-a привожу МЕТОД GETROWS - ПРИМЕР целиком

Следующая программа использует метод GetRows для загрузки указанного числа строк из объекта Recordset и заполнения массива полученными данными. Метод GetRows возвращает менее указанного числа строк в двух случаях: при обнаружения метки конца файла EOF или при попытке загрузки записи, удаленной другим пользователем. Функция возвращает False только в последнем случае. Для выполнения этой процедуры требуется функция GetRowsOK.

Sub GetRowsX()

Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Dim intRows As Integer
Dim avarRecords As Variant
Dim intRecord As Integer

Set dbsNorthwind = OpenDatabase("Борей.mdb")
Set rstEmployees = dbsNorthwind.OpenRecordset( _
"SELECT Имя, Фамилия, Должность " & _
"FROM Сотрудники ORDER BY Фамилия", dbOpenSnapshot)

With rstEmployees
Do While True
' Принимает от пользователя число строк.

strMessage = "Введите число загружаемых строк."
intRows = Val(InputBox(strMessage))

If intRows <= 0 Then Exit Do

' При успешном выполнении GetRowsOK печатает результаты;
' при обнаружении конца файла ничего не делается.
If GetRowsOK(rstEmployees, intRows, _
avarRecords) Then
If intRows > UBound(avarRecords, 2) + 1 Then
Debug.Print "(Недостаточно записей в объекте " & _
"Recordset для загрузки " & intRows & _

" строк.)"
End If
Debug.Print UBound(avarRecords, 2) + 1 & _
" записей обнаружено."

' Печатает загруженные данные.
For intRecord = 0 To UBound(avarRecords, 2)
Debug.Print " " & _
avarRecords(0, intRecord) & " " & _
avarRecords(1, intRecord) & ", " & _
avarRecords(2, intRecord)
Next intRecord
Else
' В предположении, что GetRows возвращает ошибку

' из-за изменения данных другим пользователем,
' вызывает метод Requery для обновления
' объекта Recordset и возобновления операции.
If .Restartable Then
If MsgBox("Ошибка в методе GetRows. Повторить?", _
vbYesNo) = vbYes Then
.Requery
Else
Debug.Print "Ошибка в методе GetRows!"
Exit Do
End If
Else
Debug.Print "Ошибка в методе GetRows! " & _

"Неверное значение свойства Restartable!"
Exit Do
End If
End If

' Так как после вызова GetRows указатель текущей записи
' остается на последней проверенной записи, переводит
' указатель в начало объекта Recordset перед
' выполнением нового цикла поиска.
.MoveFirst
Loop
End With

rstEmployees.Close
dbsNorthwind.Close

End Sub

Function GetRowsOK(rstTemp As Recordset, _
intNumber As Integer, avarData As Variant) As Boolean

' Сохраняет результаты вызова GetRows в массиве.
avarData = rstTemp.GetRows(intNumber)
' Возвращает False, только если возвращено менее указанного
' количества строк, но не при достижении конца объекта
' Recordset.
If intNumber > UBound(avarData, 2) + 1 And _
Not rstTemp.EOF Then
GetRowsOK = False
Else
GetRowsOK = True
End If

End Function
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665097
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пол моему фильтер по короче будет :), Но все-равно - спасибо.
...
Рейтинг: 0 / 0
Создание рекордсера из рекордсета
    #32665115
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vam911Установленный фильтр сбивает текущую запись.

А если делать клон, то как я понял, сначала надо скопировать все, а потом выбрать нужное. - потеря скорости.

Зато - Фильтр - это тоже потеря скорости, но, решать, безусловно, Вам. Удачи
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание рекордсера из рекордсета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]