powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в .ADP "запихать" в форму локально сохранённый Recordset?
6 сообщений из 6, страница 1 из 1
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32085644
Vic_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry, если задаю вопрос не на том форуме (может, надо было в VB?).
Ситуация такая: имеется ADP проект (Access2000, SQL2000), из него SELECTом вытаскиваю Recordset (ADO) и сохраняю его в файле на своей машине, закрываю Recordset. Затем файл открываю и пытаюсь сделать этот Recordset источником данных для формы (Set Me.Recordset = сохранённый Recordset) и здесь вылазит ошибка "error 7965 Указанный объект не может являться значением свойства "Набор записей" (Recordset)". С открытым Recordset'ом я нормально работаю (могу просматривать значения полей), а как источник данных для формы он не воспринимается.

Private Sub Form_Open(Cancel As Integer)
Dim fs, f
Dim Conn As ADODB.Connection
Dim RS1 As New ADODB.Recordset
Set Conn = CurrentProject.Connection
RS1.CursorType = adOpenStatic: RS1.LockType = adLockBatchOptimistic
RS1.CursorLocation = adUseClient
RS1.Open "SELECT i_schetin, i_agent FROM tf_schetin WHERE i_schetin=1", Conn
RS1.MoveFirst
With Application.FileSearch '-----------Поиск и удаление файла (если есть)
.LookIn = "C:\"
.SearchSubFolders = False
.Filename = "schet.sav"
If .Execute > 0 Then
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("c:\schet.sav")
f.Delete
End If
End With
RS1.Save "c:\schet.sav", adPersistADTG
Set RS1 = Nothing
RS1.Open "c:\schet.sav", , adOpenStatic, adLockBatchOptimistic, adCmdFile
Set Me.Recordset = RS1 '========== Здесь вылетает ошибка
Me.p_ischetin.ControlSource = "i_schetin"
Me.p_iagent.ControlSource = "i_agent"
End Sub
...
Рейтинг: 0 / 0
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32085662
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вместо Set RS1=Nothing
нужно написать RS1.Close

2. Если нужны несложные файловые операции, проще использовать
Код: plaintext
If Dir(MyFile)<>"" Then Kill MyFile


3. When you open a Recordset, the current record is positioned to the first record (if any) (c) Help
Намек понятен?
...
Рейтинг: 0 / 0
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32085729
Vic_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to AlexJuice
1. Поставить Set RS1=Nothing меня надоумил SQL books online (хотя close, само собой, нужен тоже):
Use the Close method to close a Connection, a Record, a Recordset, or a Stream object to free any associated system resources. Closing an object does not remove it from memory; you can change its property settings and open it again later. To completely eliminate an object from memory, set the object variable to Nothing (in Visual Basic) after closing the object.
2. Спасибо.
3. Не совсем понял. Вы, может, намекаете на то, что у меня в Recordset нет записей совсем? Но записи-то есть, когда я ставлю после
RS1.Open "c:\schet.sav", , adOpenStatic, adLockBatchOptimistic, adCmdFile

RS1.MoveFirst
MsgBox (RS1.RecordCount)
MsgBox (RS1.Fields(0).Value)
то всё работает.
...
Рейтинг: 0 / 0
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32085741
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Nothing - я не против (и сам всегда использую), но мысль была в том, что сначала нужно сделать Close
...
3. Намек был как раз на то, что MoveFirst не нужен, раз есть записи.

> то всё работает.
А без этого - нет?
...
Рейтинг: 0 / 0
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32086054
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего что-то не так с параметрами открытия рекордсета.

вот я сделал на тестовой базе:

Option Compare Database
Option Explicit

Private Sub Кнопка45_Click()
Dim rst As ADODB.Recordset
Set rst = Me.Recordset
rst.Save "C:\Мои документы\rrr.txt", adPersistADTG
End Sub

Private Sub Кнопка46_Click()
Dim rst As New ADODB.Recordset
rst.Open "C:\Мои документы\rrr.txt", , adOpenDynamic, adLockOptimistic
Set Me.Recordset = rst
End Sub

дальше работает - набор можно редактировать через форму
...
Рейтинг: 0 / 0
Как в .ADP "запихать" в форму локально сохранённый Recordset?
    #32086059
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только работает это только в 2002-ом
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в .ADP "запихать" в форму локально сохранённый Recordset?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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