powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO: Set Me.Recordset = rst
16 сообщений из 16, страница 1 из 1
DAO: Set Me.Recordset = rst
    #32336559
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не могу взять в толк, на ADO делал , а вот на DAO такое присвоение не работает:

Dim q As DAO.QueryDef, rst As DAO.Recordset

Set q = CurrentDb.QueryDefs("Запрос1")
q.Parameters("ля-ля").Value = "ля-ля"
Set rst = q.OpenRecordset(dbOpenDynaset)
Set Me.Recordset = rst

В справке написано, что:
[Recordset type] [Based on SQL data] [Based on Jet data]
ADO Read/Write Read/Write
DAO N/A Read/Write

Но вроде этот rst не базируется на SQLстроке, че-то я не догоняю, чего он тогда противится
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336647
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот через ADO тоже так не хочет:

Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
Dim prm As ADODB.Parameter
Dim i As Integer

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "qryJvka"
cmd.CommandType = adCmdTable

For Each prm In cmd.Parameters
prm.Value = "ля-ля"
Next prm

Set rst = cmd.Execute
If Not rst.EOF Then
Set Me.Recordset = rst
End If

Метод cmd.Execute вызвращает какой-то недоделанный Recordset, который не хочет лезть в форму, работает только если сам открываешь rst:
Set rst = New ADODB.Recordset
With rst
.ActiveConnection = CurrentProject.Connection
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open Source:="Таблица1", Options:=adCmdTable
End With
Set Me.Recordset = rst

но хотелось бы через Command...
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336655
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeySV писал:но хотелось бы через Command...
А кто не дает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set rst = New ADODB.Recordset 
With rst 
    .ActiveConnection = CurrentProject.Connection 
    .CursorType = adOpenKeyset 
    .LockType = adLockOptimistic 
    Set .Source = cmd
    .Open 
End With
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336702
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
клик и клик.
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336723
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лох Позорный: прикол, но так заработало, правда с отличием: дело в том что в некоторых записях в опр. столбцах есть пусты значения (Null), так вот, когда пихаешь через RecordSource="SELECT...." сам запрос, то чексбоксы с пустыми значения, а вот через твой вариант, чексбоксы этих пустых полей становятся серыми, как будто у них в свойстве ControlSource неправильное название поля из запроса/таблицы.
Непонятно еще почему же так он работает, а в моем варианте нет... будет эскпериментировать...

2Pavel: одна ссылка не работает, а другую я читал, ничего интересного, справку я тоже читал, но это пока не объясняет возникающих ошибок...
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336728
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, еще хотелось бы услышать Ваше мнение на счет DAO.RecordSet, почему же он не хочет лезть в Me.RecordSet ???
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336731
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня обе открываются.
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336759
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel писал:У меня обе открываются.
Дык это потому что я подправил
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336782
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кое-что начинает проясняться:

Set rst = cmd.Execute - так он не хочет работать, потому что этот RecordSet получается rst.CursorType = adOpenForwardOnly, а для Me.RecordSet очень важно, чтобы было rst.CursorType = adOpenKeyset.

Так что получается, что метод предложенный Лохом Позорным единственно верный, потому как другого способо явно указать тип курсора я больше не вижу (поправте меня если я не прав), а отказать от Command не могу, потому как надо еще параметры задать для запроса, вот такая петрушка...

Теперь осталось распотрашить еще DAO.Recordset, что ж ему-то не хватает для счастья...
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336869
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо стоит повторить одну из распространенных фраз на этом форуме - признаю себя ослом

С утра, не проспавшись был, накалякал, а теперь полдня мучуюсь. Вариант с DAO абсолютно рабочий, там только одна ошибка, в конце, чисто автоматически, ну чисто атвотоматически, я без всякой задней мысли написал
rst.Close
Set rst=Nothing

вообщем надо было всего лишь обнулить переменную Set rst=Nothing, а я еще и закрыл этот RecordSet (забыл что это не RecordsetClone), поэтому и видел чистую пустую форму, умора вообщем...
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336907
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты только
rst.Close
Set rst=Nothing
совсем не стирай.
Поставь в Form_Close()
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336943
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>способо явно указать тип курсора я больше не вижу (поправте меня если я не прав)

Код: plaintext
rst.Open cmd
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336955
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погодите, с этого места поподробнее...

Я сделал так:

Dim rst as DAO.RecordSet

Set q = CurrentDb.QueryDefs("Запрос1")
q.Parameters("ля-ля").Value = "ля-ля"
Set rst = q.OpenRecordset(dbOpenDynaset)
Set Me.Recordset = rst

Set rst=Nothing

т.е. убрал токо rst.Close

Мыслил я так, переменная локальная и конечно сама убьется, но как завещал великий Гетц и все поколения умудренных программеров хорошо бы принудительно обнулить ссылку на объект. Т.о. осталась токо висеть ссылка на этот объект RecordSet со стороны формы. Ну тут я уже повлиять никак не могу, как она сама свое ссылку обнулит, так чистильщик должен освободить память от этого объекта. Поэтому я больше ничего и не писал никуда...

А вы как аргументируете, зачем в Form_Close?
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32336963
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Senin Victor:

>>rst.Open cmd

ну, да я и имел ввиду, что вариант Лоха (с его различными вариациями) единственный. т.е. rst.Open cmd ля-ля или до этого rst.CursorType = adOpenKeyset,
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32337043
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>т.е. rst.Open cmd ля-ля или до этого rst.CursorType = adOpenKeyset,

или так или сяк

>А вы как аргументируете, зачем в Form_Close?

Так долго и много об этом велась речь, что повторять ну очень впадлу.
Тебе рекодсет нужен? Нет. Вот и выкинь его сам, не доверя "сборщику мусора"
Все-равно, что ненужную бумажку в урну выкинуть (а можно и на пол - все-равно мусорщик уберет): красиво-безопасно-удобно. Правда, мусорщику иногда этим надоедает заниматься или выпимши: подойдет и даст тебе в морду (а то и ногу сломает), а может не дать.

>Теперь осталось распотрашить еще DAO.Recordset,

Ты делом занимаешься или опыты ставишь?
...
Рейтинг: 0 / 0
DAO: Set Me.Recordset = rst
    #32337061
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо было показать 3 возможных варианта передачи параметров в запрос и отображения его в форме: DAO, ADO и динам. SQL строка - думал напишу за полчаса, а подсел с этой формой на полдня :(
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO: Set Me.Recordset = rst
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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