Что за бред?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Что за бред?

Сообщение Antonariy » 29.09.2005 (Чт) 11:52

Есть приложение, работающее с базой Access. И есть два варианта подключения:
Код: Выделить всё
1)
    cn.Open "driver={Microsoft access driver (*.mdb)};Extended Properties=""DBQ=" & App.Path & "\Universys.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"""
2)
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Properties("Data Source") = App.Path & "\Universys.mdb"
    cn.Open

Еще есть процедура отрытия рекордсета

Код: Выделить всё
Private Function GetRecordset(cmd As String) As ADODB.Recordset
Dim rs As ADODB.Recordset
    On Error GoTo ErrorHandler
    Set rs = New ADODB.Recordset
    rs.Open cmd, cn, adOpenStatic, adLockBatchOptimistic
    Set rs.ActiveConnection = Nothing
    Set GetRecordset = rs
    Set rs = Nothing
    Exit Function
ErrorHandler:
    MsgBox Err.Description, vbCritical, "Êðèòè÷åñêàÿ îøèáêà"
End Function


и процедура апдейта

Код: Выделить всё
Public Sub UpdateRS(rs As ADODB.Recordset)
    On Error GoTo ErrorHandler
    Set rs.ActiveConnection = cn
    rs.UpdateBatch
    Set rs.ActiveConnection = Nothing
    Exit Sub
ErrorHandler:
        MsgBox Err.Description, vbCritical, "Êðèòè÷åñêàÿ îøèáêà"
End Sub


Первый вариант соединения не работает под юзером с ограниченными правами, в остальном все в порядке. При втором варианте во время апдейта выходит ошибка "Попытка присвоить значение null переменной, не принадлежащей к типу variant". Этой "переменной" является ключевое поле таблицы, и оно - счетчик. Если проставить id от балды, то нормально проапдейтится. Причем это происходит только с одной таблицей. Пробовал удалить ключевое поле и создать заново - результат тот же. Сабж.
Лучший способ понять что-то самому — объяснить это другому.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 29.09.2005 (Чт) 13:44

чета ты загнул, а конекчусь так
Код: Выделить всё

Public RS As Recordset
Public db As Connection


Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & Appath & "Zakaz.mdb;Mode=Share Deny None;"

Set RS = New ADODB.Recordset
RS.Open "select * from Zakaz where №_заказа = '" & grd.Text & "'", db, adOpenDynamic, adLockOptimistic


все работает под любыми провами
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

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

Сообщение alibek » 29.09.2005 (Чт) 13:54

Это и есть его второй способ.


Antonariy, а нельзя ли создать пользовательский DSN и подключаться через него? Тогда проблем с правами не будет.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 29.09.2005 (Чт) 14:07

Насчет второго - эта таблица просто обязана чем-то отличаться от остальных. Может, на это поле какой внешний ключ ссылается, или еще каким-то образом контроль целостности реализован?

Хотя я всегда думал, что счетчики не могут быть NULL по определению... :roll:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 29.09.2005 (Чт) 14:27

Да, ссылается, и да, реализовано каскадное удаление. Однако не вижу, каким образом это может помешать. В базе с десяток таблиц со всякими связями, и больше нигде этот глюк не встречается.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 29.09.2005 (Чт) 14:33

Могу выложить базу, если интересно.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 29.09.2005 (Чт) 14:36

alibek, было бы можно, вопросов бы не было :cry:
Лучший способ понять что-то самому — объяснить это другому.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 30.09.2005 (Пт) 4:06

Хотя я всегда думал, что счетчики не могут быть NULL по определению...

Именно ;) Ключевые поля не могут быть Null.
То, что для одних константа, для других только переменная...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 35

    TopList