Run-time error 3027. База данных доступна только для чтения :( - VB
Формулировка задачи:
Никакак не могу сделать UPDATE базы данных
Возникает ошибка в строчке с
Как побороть ???
Что я делаю не так ???
Возникает ошибка в строчке с
Как побороть ???
Что я делаю не так ???
Решение задачи: «Run-time error 3027. База данных доступна только для чтения :(»
textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font> <font color="blue">Sub</font> Database_Update() <font color="blue">Dim</font> db <font color="blue">As</font> Database <font color="blue">Dim</font> ws <font color="blue">As</font> Workspace <font color="blue">Dim</font> rst <font color="blue">As</font> Recordset <font color="blue">Dim</font> sConnection <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> sChangeData <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> sCode <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> iNumRec <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> iReplaceCount <font color="blue">As</font> <font color="blue">Integer</font> <font color="blue">Dim</font> strSQL <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> sFieldName <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> sIndexKeyFieldName <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Dim</font> sIndexKey <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Set</font> ws = DBEngine.CreateWorkspace(<font color="teal">"myName"</font>, <font color="teal">"UID"</font>, <font color="teal">""</font>, dbUseODBC) sConnection = <font color="teal">"ODBC;DSN=ORA;UID=myname;PWD=mypassword;SERVER=oracle;"</font> <font color="blue">Set</font> db = ws.OpenDatabase(<font color="teal">""</font>, False, False, sConnection) strSQL = <font color="teal">"SELECT * FROM person WHERE company = '568'"</font> <font color="blue">Set</font> rst = db.OpenRecordset(strSQL, dbOpenDynaset, dbExecDirect, dbOptimisticValue) sFieldName = <font color="teal">"ps_name"</font> sIndexKeyFieldName = <font color="teal">"number"</font> iNumRec = <font color="darkblue"><b>1</b></font> iReplaceCount = <font color="darkblue"><b>0</b></font> <font color="blue">With</font> rst <font color="blue">Do</font> sChangeData = .Fields(sFieldName).Value <font color="blue">If</font> sChangeData = <font color="teal">"Старые данные"</font> <font color="blue">Then</font> sChangeData = <font color="teal">"Новые данные"</font> <font color="00AA00">'-------------------------------------------------</font> <font color="00AA00">' 1-й вариант</font> .Edit .Fields(sFieldName).Value = sChangeData .Update <font color="00AA00">'-------------------------------------------------</font> <font color="00AA00">' или 2-й вариант (возможно даже быстрее чем 1-й)</font> sIndexKey = .Fields(sIndexKeyFieldName).Value strSQL = <font color="teal">"UPDATE person SET "</font> & sFieldName & <font color="teal">" = '"</font> & sChangeData & <font color="teal">"' WHERE "</font> & sIndexKeyFieldName & <font color="teal">" = "</font> & sIndexKey db.Execute strSQL <font color="00AA00">'-------------------------------------------------</font> iReplaceCount = iReplaceCount + <font color="darkblue"><b>1</b></font> <font color="blue">End</font> <font color="blue">If</font> iNumRec = iNumRec + <font color="darkblue"><b>1</b></font> .MoveNext <font color="blue">Loop</font> <font color="blue">While</font> <font color="blue">Not</font> .EOF <font color="blue">End</font> <font color="blue">With</font> rst.<font color="blue">Close</font> db.<font color="blue">Close</font> ws.<font color="blue">Close</font> MsgBox <font color="teal">"Обработано записей: "</font> & iNumRec - <font color="darkblue"><b>1</b></font> & vbNewLine & <font color="teal">"Изменено полей: "</font> & iReplaceCount <font color="blue">End</font> <font color="blue">Sub</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д