Проблемы с OpenSchema

Программирование на Visual Basic for Applications
kdvstat
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 27.11.2006 (Пн) 2:50
Откуда: Владивосток

Проблемы с OpenSchema

Сообщение kdvstat » 19.12.2007 (Ср) 9:57

Во время работы с OpenSchema возникла проблема.Я считываю в Rst список колонок в моей таблице. Затем в цикле пытаюсь выполнять SQL запросы к этой же таблице. появляется сообщение об ошибке что таблица уже открыта для монопольного доступа.
Код: Выделить всё

Dim SQLstr As String
Dim Rst As Recordset

Set Rst = CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty, Empty, "MyTable", Empty))
Do Until Rst.EOF
     SQLstr = "UPDATE MyTable SET [" & Rst!COLUMN_NAME & "]='ДА' WHERE [OKPO]=" & Trim(Form_MyTable.OKPO.Text) & ";"
     DoCmd.RunSQL SQLstr
     Rst.MoveNext
Loop
Rst.Close


Попытался использовать метод Clone для копирования записи из OpenSchema, но появляется сообщение об ошибке типа курсора.
Код: Выделить всё

Dim SQLstr As String
Dim Rst, Rst1 As Recordset

Set Rst1 = CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty, Empty, "MyTable", Empty))
Set Rst = Rst1.Clone
Do Until Rst.EOF
     SQLstr = "UPDATE MyTable SET [" & Rst!COLUMN_NAME & "]='ДА' WHERE [OKPO]=" & Trim(Form_MyTable.OKPO.Text) & ";"
     DoCmd.RunSQL SQLstr
     Rst.MoveNext
Loop
Rst.Close

Как можно скопировать запись из OpenSchema??

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.12.2007 (Ср) 10:13

А что должен делать данный код?
Lasciate ogni speranza, voi ch'entrate.

kdvstat
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 27.11.2006 (Пн) 2:50
Откуда: Владивосток

Сообщение kdvstat » 20.12.2007 (Чт) 1:55

В данном коде я работаю с таблицей MyTable, в которую динамически добавляются столбцы с определенной отметкой(ОТОБРАНА, НЕ ОТОБРАНА). Поэтому, чтобы узнать какие столбцы есть в таблице, использую OpenSchema. У меня есть событие(Допустим нажатие кнопки), по которому меняется отметка во всех столбцах для определенной записи.
Код: Выделить всё

    Set Rst1 = CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty, Empty, "MyTable", Empty))
    Set Rst = Rst1.Clone
    Do Until Rst.EOF
        If DCount("*", "MyTable", "[" & Rst!COLUMN_NAME & "]='НЕ ОТОБРАНА' and [OKPO]=" & Form_MyTable.OKPO.Text) > 0 Then
                SQLstr = "UPDATE MyTable SET [" & Rst!COLUMN_NAME & "]='ОТОБРАНА' WHERE [OKPO]=" & Trim(Form_MyTable.OKPO.Text) & ";"
                DoCmd.RunSQL SQLstr
        End If
        Rst.MoveNext
    Loop
    Rst.Close

Возникает проблема, так как OpenSchema использует таблицу в монопольном режиме и SQL запросы не проходят. Также не возможно клонировать запись из OpenSchema, так как не поддерживается курсор. Не знаю что делать..

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.12.2007 (Чт) 14:08

так результат OpenSchema перекиньте в массив или коллекцию и закройте этот рекордсет
I Have Nine Lives You Have One Only
THINK!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList