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>