Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в .ADP "запихать" в форму локально сохранённый Recordset? / 6 сообщений из 6, страница 1 из 1
30.12.2002, 06:01
    #32085644
Vic_P
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в .ADP "запихать" в форму локально сохранённый Recordset?
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
30.12.2002, 09:09
    #32085662
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в .ADP "запихать" в форму локально сохранённый Recordset?
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
30.12.2002, 11:56
    #32085729
Vic_P
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в .ADP "запихать" в форму локально сохранённый Recordset?
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
30.12.2002, 12:46
    #32085741
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в .ADP "запихать" в форму локально сохранённый Recordset?
1. Nothing - я не против (и сам всегда использую), но мысль была в том, что сначала нужно сделать Close
...
3. Намек был как раз на то, что MoveFirst не нужен, раз есть записи.

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

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

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


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