# runUpdateQuery Error

**URL:** <https://forum.inductiveautomation.com/t/runupdatequery-error/116895>\
**Category:** Ignition\
**Tags:** ignition81, vision, scripting\
**Created:** [August 25, 2026, 5:11pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895 "2026-08-25T17:11:55Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [August 25, 2026, 5:11pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/1 "2026-08-25T17:11:55Z")

</div>

Running Ignition 8.1.16 with Vision. Have 2 DB tables. One successfully runs this query from script but the other one errors for a reason I do not know.

works:

```python
	if globalVars.logger:
	
		#get today's date
		date = system.date.format(system.date.now(),"yyyy_MM_dd")
		
		#select rows older than 3 months
		chemSelectStatement = "SELECT t_stamp, chem_code, chemMeter_val, chemPump_val, conc_str, meter_val, pump_val, sample_str FROM Chem WHERE t_stamp < DATEADD(MONTH, -"+str(globalVars.chemTrendAge)+", CURRENT_TIMESTAMP)"
		
		#select the data
		chemDataToDrop = system.db.runQuery(chemSelectStatement, "AppDataLog")

		#delete records
		deleteChem = "DELETE FROM Chem WHERE t_stamp < DATEADD(MONTH, -"+str(globalVars.chemTrendAge)+", CURRENT_TIMESTAMP)"
		system.db.runUpdateQuery(deleteChem,"AppDataLog")

```

errors:

```python
	if globalVars.logger:
	
		#get today's date
		date = system.date.format(system.date.now(),"yyyy_MM_dd")
	
		#delete records
		deleteData = "DELETE FROM Data WHERE t_stamp < DATEADD(MONTH, -"+str(globalVars.dataTrendAge)+", CURRENT_TIMESTAMP)"
		system.db.runUpdateQuery(deleteData,"AppDataLog")

```

Error:

```python
Java Traceback:
Traceback (most recent call last):
  File "<input>", line 5, in <module>
	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runUpdateQuery(AbstractDBUtilities.java:188)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

java.lang.Exception: java.lang.Exception: Error executing system.db.runUpdateQuery(DELETE FROM Data WHERE t_stamp < DATEADD(MONTH, -3, CURRENT_TIMESTAMP), AppDataLog, , false)

	at org.python.core.Py.JavaError(Py.java:547)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runUpdateQuery(AbstractDBUtilities.java:188)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)

	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:541)

	at org.python.core.PyObject. __call__ (PyObject.java:477)

	at org.python.core.PyObject. __call__ (PyObject.java:481)

	at org.python.pycode._pyx59.f$0(<input>:5)

	at org.python.pycode._pyx59.call_function(<input>)

	at org.python.core.PyTableCode.call(PyTableCode.java:173)

	at org.python.core.PyCode.call(PyCode.java:18)

	at org.python.core.Py.runCode(Py.java:1687)

	at org.python.core.Py.exec(Py.java:1731)

	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)

	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:611)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:599)

	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)

	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

	at java.base/java.lang.Thread.run(Unknown Source)

Caused by: java.lang.Exception: Error executing system.db.runUpdateQuery(DELETE FROM Data WHERE t_stamp < DATEADD(MONTH, -3, CURRENT_TIMESTAMP), AppDataLog, , false)

	... 26 more

Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Cannot run this function when in read-only mode.

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.getResponse(GatewayInterface.java:384)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:283)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:278)

	at com.inductiveautomation.ignition.client.script.ClientDBUtilities._runUpdateQuery(ClientDBUtilities.java:262)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runUpdateQuery(AbstractDBUtilities.java:181)

	... 24 more

Traceback (most recent call last):
  File "<input>", line 5, in <module>
	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runUpdateQuery(AbstractDBUtilities.java:188)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

java.lang.Exception: java.lang.Exception: Error executing system.db.runUpdateQuery(DELETE FROM Data WHERE t_stamp < DATEADD(MONTH, -3, CURRENT_TIMESTAMP), AppDataLog, , false)

```

Data DB table format:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/0/60d582f760387af2bf7d47d02a76c3871d401b0b.png)

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 25, 2026, 5:15pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/2 "2026-08-25T17:15:15Z")

</div>

`Cannot run this function when in read-only mode.`

Something, somewhere is setting that client to read-only, almost certainly via

> **[system.util.setConnectionMode | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/appendix/scripting-functions/system-util/system-util-setConnectionMode)**
>
> Sets the connection mode for the client session.

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [August 25, 2026, 5:15pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/3 "2026-08-25T17:15:57Z")

</div>

Thank you

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 25, 2026, 5:16pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/4 "2026-08-25T17:16:01Z")

</div>

Why is this not a Prep query?

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [August 25, 2026, 5:18pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/5 "2026-08-25T17:18:26Z")

</div>

Not sure. Please enlighten me. Somewhat of a DB novice

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 25, 2026, 5:25pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/6 "2026-08-25T17:25:02Z")

</div>

You are string formatting to create a date for DB usage. You are also passing a numeric value into a query with string concatenation. Pass dates into queries as **objects** using a `?` placeholder, comparing directly to your `t_stamp` column. Use `system.date.midnight()` to get a date with zeros in the time parts. Compute the month delta in Ignition with `system.date.addMonths()`. Pass both endpoints as arguments to `system.db.runPrepUpdate()`.

With limited exceptions, using string concatenation or formatting for values in SQL is simply wrong.

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [August 25, 2026, 6:13pm UTC](https://forum.inductiveautomation.com/t/runupdatequery-error/116895/7 "2026-08-25T18:13:24Z")

</div>

To illustrate `runPrepUpdate()`. It also makes it easier to read, IMO.

```python
if globalVars.logger:
	
		#get today's date
		date = system.date.format(system.date.now(),"yyyy_MM_dd")
		#set cutoff date
		cutoffDate = system.date.addMonths(date, -globalVars.dataTrendAge)
	
		#delete records
		deleteData = "DELETE FROM Data WHERE t_stamp < ?"
		system.db.runPrepUpdate(deleteData, [cutoffDate], "AppDataLog")

```
