|
|
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Что-то не могу взять в толк, на 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строке, че-то я не догоняю, чего он тогда противится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 12:31 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
А вот через 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... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 13:17 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
SergeySV писал:но хотелось бы через Command... А кто не дает? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 13:22 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
клик и клик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 13:56 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
2Лох Позорный: прикол, но так заработало, правда с отличием: дело в том что в некоторых записях в опр. столбцах есть пусты значения (Null), так вот, когда пихаешь через RecordSource="SELECT...." сам запрос, то чексбоксы с пустыми значения, а вот через твой вариант, чексбоксы этих пустых полей становятся серыми, как будто у них в свойстве ControlSource неправильное название поля из запроса/таблицы. Непонятно еще почему же так он работает, а в моем варианте нет... будет эскпериментировать... 2Pavel: одна ссылка не работает, а другую я читал, ничего интересного, справку я тоже читал, но это пока не объясняет возникающих ошибок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 14:09 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Да, еще хотелось бы услышать Ваше мнение на счет DAO.RecordSet, почему же он не хочет лезть в Me.RecordSet ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 14:12 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
У меня обе открываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 14:13 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Pavel писал:У меня обе открываются. Дык это потому что я подправил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 14:29 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Кое-что начинает проясняться: Set rst = cmd.Execute - так он не хочет работать, потому что этот RecordSet получается rst.CursorType = adOpenForwardOnly, а для Me.RecordSet очень важно, чтобы было rst.CursorType = adOpenKeyset. Так что получается, что метод предложенный Лохом Позорным единственно верный, потому как другого способо явно указать тип курсора я больше не вижу (поправте меня если я не прав), а отказать от Command не могу, потому как надо еще параметры задать для запроса, вот такая петрушка... Теперь осталось распотрашить еще DAO.Recordset, что ж ему-то не хватает для счастья... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 14:41 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Видимо стоит повторить одну из распространенных фраз на этом форуме - признаю себя ослом С утра, не проспавшись был, накалякал, а теперь полдня мучуюсь. Вариант с DAO абсолютно рабочий, там только одна ошибка, в конце, чисто автоматически, ну чисто атвотоматически, я без всякой задней мысли написал rst.Close Set rst=Nothing вообщем надо было всего лишь обнулить переменную Set rst=Nothing, а я еще и закрыл этот RecordSet (забыл что это не RecordsetClone), поэтому и видел чистую пустую форму, умора вообщем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 15:20 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Ты только rst.Close Set rst=Nothing совсем не стирай. Поставь в Form_Close() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 15:38 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
>способо явно указать тип курсора я больше не вижу (поправте меня если я не прав) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 15:51 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
Погодите, с этого места поподробнее... Я сделал так: 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 16:01 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
2Senin Victor: >>rst.Open cmd ну, да я и имел ввиду, что вариант Лоха (с его различными вариациями) единственный. т.е. rst.Open cmd ля-ля или до этого rst.CursorType = adOpenKeyset, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 16:06 |
|
||
|
DAO: Set Me.Recordset = rst
|
|||
|---|---|---|---|
|
#18+
>т.е. rst.Open cmd ля-ля или до этого rst.CursorType = adOpenKeyset, или так или сяк >А вы как аргументируете, зачем в Form_Close? Так долго и много об этом велась речь, что повторять ну очень впадлу. Тебе рекодсет нужен? Нет. Вот и выкинь его сам, не доверя "сборщику мусора" Все-равно, что ненужную бумажку в урну выкинуть (а можно и на пол - все-равно мусорщик уберет): красиво-безопасно-удобно. Правда, мусорщику иногда этим надоедает заниматься или выпимши: подойдет и даст тебе в морду (а то и ногу сломает), а может не дать. >Теперь осталось распотрашить еще DAO.Recordset, Ты делом занимаешься или опыты ставишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 17:07 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32336647&tid=1677976]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 488ms |

| 0 / 0 |
