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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5