VFPOLEDB.1

proko
Дата: 14.09.2012 16:16:18
создаю соединение
obj_RDS =CREATEOBJECT("ADODB.Connection")
rs=CREATEOBJECT("ADODB.Recordset")
obj_RDS.Open('Provider=VFPOLEDB.1;Data Source=C:\dan_dogovor\contrag\conosn.dbf;Persist Security Info=False')
или так
obj_RDS.Open('Provider=VFPOLEDB.1;Data Source=C:\dan_dogovor\contrag\conosn.dbf;User Id=sa;Mode=ReadWrite;Password="";Collating Sequence=MACHINE')

чтение данных - нормально
запись:

rs.Close
rs.Open ("Select * from conosn", obj_RDS, 1, 3)
rs.AddNew
rs.Fields("osnnd").value=thisform.combo1.Value
.........................................
rs.Update
при записи возникает сообщение:
recordset не поддерживает обновление. это связано с ограничением поставщика или выбранным типом блоктровки.
В чем дело?
ВладимирМ
Дата: 14.09.2012 20:35:31
Это связано с выбранным способом наполнения RecordSet. Ведь подобный синтаксис не только обновляет данные RecordSet, но еще и пытается обновить данные в таблице-источнике. А в данном случае - это невозможно.

Модификация RecordSet в принципе возможна только если его свойство LockType больше 1. Вот и проверьте

rs.Open(...)
?rs.LockType 

Значение 1 говорит о том, что RecordSet находится в состоянии Read-Only. Несмотря на то, что Вы явно указали значение 3 в методе rs.Open()

PS: Кстати, у Вас ошибка должна была выскакивать уже на методе rs.AddNew. Что-то Вы с обработчиком ошибок намудрили...
ВладимирМ
Дата: 14.09.2012 21:16:45
Выполнил тот же самый код, но с другим провайдером

obj_RDS.ConnectionString = "driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=C:\dan_dogovor\contrag\;"

В этом случае RecordSet создается модифицируемым, но, первая же команда на добавление новой записи rs.AddNew просто уничтожает результаты выборки. Строку-то создает, но она остается единственной строкой всего RecordSet

Так что, VFPOLEDB.1 просто исправил ошибку старых драйверов.