После попытки перезда с DAO на ODBC база открывается только в режиме чтения .Edit и тд не работают. Проверил настройку источника данных там все в порядке... к базе открываю Connaction как админ с полным доступом. Где грабли?
Здравствуйте, GnuLLn, Вы писали:
GLL>Всем доброго времени суток,
GLL>После попытки перезда с DAO на ODBC база открывается только в режиме чтения .Edit и тд не работают. Проверил настройку источника данных там все в порядке... к базе открываю Connaction как админ с полным доступом. Где грабли?
GLL>Все это на VB6
DAO — это data access objects (програмный интерфейс вобщем), а ODBC это вроде как драйвера........ Или имелось ввиду ADO? — тогда посмотри на свойста рекордсета lock type и cursor type — по моему lock type по дефолту read only
BM>DAO — это data access objects (програмный интерфейс вобщем), а ODBC это вроде как драйвера........ Или имелось ввиду ADO? — тогда посмотри на свойста рекордсета lock type и cursor type — по моему lock type по дефолту read only
Мда, вопрос был поставленн мягко говоря не корректно, я использовал Jet воркспейс и открывал в нем database
из mdb файла... после чего создал DSN с этим файлом и открыл ODBCDirect воркспейс в котором все мои старые рекордсеты стали readonly те
dim rs as recordset
set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset)
with rs
.Edit
.fields(0) = 2
.Update
end with
rs.close
выдает ошибку — объект readonly, хотя в хелпе по DAO написанно что рекордсет Dynaset типа через ODBCDirect воркспейс может быть изменен.
Здравствуйте, GnuLLn, Вы писали:
BM>>DAO — это data access objects (програмный интерфейс вобщем), а ODBC это вроде как драйвера........ Или имелось ввиду ADO? — тогда посмотри на свойста рекордсета lock type и cursor type — по моему lock type по дефолту read only
GLL>Мда, вопрос был поставленн мягко говоря не корректно, я использовал Jet воркспейс и открывал в нем database GLL>из mdb файла... после чего создал DSN с этим файлом и открыл ODBCDirect воркспейс в котором все мои старые рекордсеты стали readonly те
GLL>
GLL>dim rs as recordset
' вот так правильнее будет
GLL>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset, dbOptimistic)
GLL>with rs
GLL> .Edit
GLL> .fields(0) = 2
GLL> .Update
GLL>end with
GLL>rs.close
GLL>
GLL>выдает ошибку — объект readonly, хотя в хелпе по DAO написанно что рекордсет Dynaset типа через ODBCDirect воркспейс может быть изменен.
GLL>>dim rs as recordset
BM>' вот так правильнее будет
GLL>>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset, dbOptimistic)
К сожалению при таком варианте я получаю ошибку о неверном аргументе, даже при пропуске option.
Re[5]: Проблема с БД в VB
От:
Аноним
Дата:
14.01.04 09:46
Оценка:
Здравствуйте, GnuLLn, Вы писали:
GLL>Здравствуйте, BugMan, Вы писали:
GLL>
GLL>>>dim rs as recordset
BM>>' вот так правильнее будет
GLL>>>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset, dbOptimistic)
GLL>
GLL>К сожалению при таком варианте я получаю ошибку о неверном аргументе, даже при пропуске option.
не оч силен в DAO и ODBC но в ADO всетаки надо делать так:
dim rs as NEW recordset
или так
dim rs as recordset
set rs = new recordset
а еще правельнее
dim rs as NEW ADODB.recordset
но это только к ado
Здравствуйте, GnuLLn, Вы писали:
GLL>Здравствуйте, BugMan, Вы писали:
GLL>
GLL>>>dim rs as recordset
BM>>' вот так правильнее будет
GLL>>>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset, dbOptimistic)
GLL>
GLL>К сожалению при таком варианте я получаю ошибку о неверном аргументе, даже при пропуске option.
Надо так:
set rs = db.openrecordset("select * from table where x = 1", dbOpenDynamic, ,dbOptimistic)
Здравствуйте, PA, Вы писали:
PA>Здравствуйте, GnuLLn, Вы писали:
GLL>>Здравствуйте, BugMan, Вы писали:
GLL>>
GLL>>>>dim rs as recordset
BM>>>' вот так правильнее будет
GLL>>>>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynaset, dbOptimistic)
GLL>>
GLL>>К сожалению при таком варианте я получаю ошибку о неверном аргументе, даже при пропуске option.
PA>Надо так:
PA>
PA>set rs = db.openrecordset("select * from table where x = 1", dbOpenDynamic, ,dbOptimistic)
PA>
В MSDN VBA: Run-Time Error '3027' Using ODBCDirect to Open RecordSet (Q161252)
говорится о чем-то похожем, правда статья древняя (Microsoft Visual Basic for Applications version 5.0
Microsoft Access 97), но ситуация вроде аналогичная
Там предлагается, в частности
For example, the following sample code fragment opens an editable recordset that uses optimistic record locking: Set RS = conPubs.OpenRecordset("Authors",dbOpenDynamic,0,dbOptimistic)
NOTE: You must supply a zero (0) for the Options argument.
E_>В MSDN VBA: Run-Time Error '3027' Using ODBCDirect to Open RecordSet (Q161252) E_>говорится о чем-то похожем, правда статья древняя (Microsoft Visual Basic for Applications version 5.0 E_>Microsoft Access 97), но ситуация вроде аналогичная
E_>Там предлагается, в частности
E_>For example, the following sample code fragment opens an editable recordset that uses optimistic record locking: E_> Set RS = conPubs.OpenRecordset("Authors",dbOpenDynamic,0,dbOptimistic) E_>NOTE: You must supply a zero (0) for the Options argument.
E_>Я не проверяла.
Есть, кстати, и свежая версия статьи
ACC2000: Run-Time Error '3027' Using ODBCDirect to Open RecordSet (Q209943)
Здравствуйте, GnuLLn, Вы писали:
GLL>К сожалению при таком варианте я получаю ошибку о неверном аргументе, даже при пропуске option.
Да забей ты на него — возьми лучше ADO и не мучайся.......
Вобщем что там с аргументом тебе уже сказали, а проблема с неписабельностью рекордсета решается сменой lock type — вроде всё.........