All "Update Query" checkboxes are enabled

Apparently, Ignition decided that I need “UPDATE Query” enabled on all UI fields that use an SQL binding (I’ve seen it on text fields, dropdown lists and checkboxes).

Whenever I add a new GUI item, and define a query binding to some parameter, the “UPDATE Query” is enabled by default (this used to be disabled by default). However, it can be seemingly disabled in the designer. But whatever you do, it will spit errors in the client because the query isn’t valid. And the next time you open the designer, everything is enabled again.

Has someone else seen this? We’re using version 7.9.7, on an Ubuntu server on OpenJDK 1.8.0_162. This has happened on two servers with different projects, but an almost identical configuration.

The projects are upgraded from older 7.9 versions though, before the named queries appeared. Luckily, there’s no table with the name “tablename”, so all those queries just fail, and I can update the DB with one click on the “submit” button.

There were a few regressions related to SQL queries that slipped into 7.9.7. This sounds like one of the behaviors that’s been fixed for 7.9.8.

1 Like

I’ve encountered the same problem: Update from Power Table cell SQL Error

When would 7.9.8 be due? Around the end of May?

Guess we’ll have to wait until then, as downgrading would be hard (lots of db-unrelated things done since the 7.9.7 release).

Apparently, the easiest workaround is just to delete the entire update query. This won’t alter any data, and it doesn’t throw any errors.

1 Like

Grrrmbl, seems I can’t edit the query anymore …

Now I’m getting nullpointer exceptions when editing the query to get the dropdown selection list.

Note that this is a different query, the original problems were related to the “selected value” update query, but this is related to the “data” field of the dropdown.

Although another dropdown now throws a nullpointer when trying to change the “selected value” query. Sigh

At this point, the only way out I’ve found is copy-pasting the object to a text editor, editing the query there, and copy-pasting it back again.

Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
	at com.inductiveautomation.factorypmi.application.binding.SQLPropertyAdapter.getBindingConfiguration(SQLPropertyAdapter.java:117)
	at com.inductiveautomation.factorypmi.designer.property.configurators.ConfiguratorMultiplexor$EditorParent.getBindingConfiguration(ConfiguratorMultiplexor.java:284)
	at com.inductiveautomation.factorypmi.designer.property.configurators.ConfiguratorMultiplexor$EditorParent.tryCommit(ConfiguratorMultiplexor.java:266)
	at com.inductiveautomation.factorypmi.designer.property.configurators.ConfiguratorMultiplexor.tryCommit(ConfiguratorMultiplexor.java:468)
	at com.inductiveautomation.factorypmi.designer.property.configurators.DynamicOptsDialog.doOK(DynamicOptsDialog.java:95)
	at com.inductiveautomation.factorypmi.designer.property.configurators.DynamicOptsDialog.access$000(DynamicOptsDialog.java:43)
	at com.inductiveautomation.factorypmi.designer.property.configurators.DynamicOptsDialog$1.actionPerformed(DynamicOptsDialog.java:64)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.WaitDispatchSupport$2.run(Unknown Source)
	at java.awt.WaitDispatchSupport$4.run(Unknown Source)
	at java.awt.WaitDispatchSupport$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(Unknown Source)
	at java.awt.Dialog.show(Unknown Source)
	at java.awt.Component.show(Unknown Source)
	at java.awt.Component.setVisible(Unknown Source)
	at java.awt.Window.setVisible(Unknown Source)
	at java.awt.Dialog.setVisible(Unknown Source)
	at com.inductiveautomation.factorypmi.designer.property.configurators.DynamicOptsDialog.showDialog(DynamicOptsDialog.java:163)
	at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.openBindingDialog(VisionDesignerImpl.java:1125)
	at com.inductiveautomation.factorypmi.designer.property.editors.bb.DynamicOptionsButton.actionPerformed(DynamicOptionsButton.java:37)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at com.jidesoft.plaf.basic.BasicJideButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(Unknown Source)
	at com.jidesoft.swing.DelegateMouseInputListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
1 Like

Ya know, it's a bug. That'll be fixed soon. Downgrade to 7.9.6 if you can't wait.

Also tried to move to named queries now, and that works ... partially. At least I don't get null pointers when trying to update queries, and the "Update query" checkbox can be disabled now.

But there are still quite a lot of strange things happening, like the bindings replacing themselves when you publish the window. However, that is only noticeable when you alter the binding again, as long as you don't alter it, it seems to use the correct binding in the client.

Downgrading will be quite hard though. From the Ignition support (https://support.inductiveautomation.com/index.php?/Knowledgebase/Article/View/66/0/downgrading-ignition):

  1. Before attempting to downgrade, make sure that you have a Gateway Backup that was taken from the version you want to downgrade to or an older version.

So we can only restore versions that were developed on 7.9.6 or older.

Given that we first started working on the PLC side, preparing the actual SCADA, and only recently started on the the database side. It would be quite costly to downgrade. And given that the issue didn't really come up until publishing these windows again, it was very hard for us to notice on beforehand.

I'm also missing some communication from IA. Where can I find it's a known bug? Where can I find when a fix is estimated to arrive? Do we need to spend a week backporting it to 7.9.6? I follow their blogs and the forums quite closely, I often check the documentation, yet I can't seem to find any info on this problem.

To me, this is a major bug, and IA should probably warn anyone trying to install 7.9.7 that the vision SQL bindings have issues.

1 Like

Sorry. Reported recently here on the forum. Start here.

Just found some time to update to 7.9.8-beta1, and the same bug occurs.

I even have created a completely new dropdown (no copy-paste), without copy-pasted bindings, and it still enables the update query.

Sooooo 7.9.8 is not the solution!

Well, it’s a beta. The release notes specify fixing the null pointer errors on query bindings.

I imagine there will be at least two more betas before the release candidate.

I just tested on the final version of 7.9.8 (which should be out within a few weeks) and can confirm that I did not have the issue with the update query being pre-selected/unable to be ignored.

4 Likes

Thanks Paul,

I’ll wait for the final version then.

7.9.8 is released, and the problem with the “Update Query” checkmark is indeed gone.

2 Likes

I am having this problem in version 7.9.8 with a display label. The update query checkbox always checks itself or will throw an exception because the default table it creates doesn’t exist, whenever I launch a client or run the designer in preview mode. The only work around I have found is by changing it to a named query.

Any bindings corrupted by this bug (by editing the binding in an affected version) remain corrupted in 7.9.8. The fix prevents further corruption, but cannot get rid of existing corruption. In v7.9.8, delete the corrupt binding, accept it, then make a new binding.

These bindings were created completely new in 7.9.8. Completely new screens and objects.

There’s still an issue with the update query checkbox in 7.9.8 (already fixed in 7.9.9). To get around it, just empty the ‘Update Query’ field of text entirely before saving any modifications to those bindings. You’ll unfortunately have to do this every time you modify the binding.

Emptying out the text solves the problem. Thanks! Any word on when 7.9.9 is going to be available?

I indeed was a bit too early to call it solved, it works on the initial edit, but later on, the problem reoccured.

Yes, but sadly, if you edit it a second time, the update query gets activated again, and you need to close and reopen the window in the designer to be able to clear it again. Very convoluted to keep a project error-free this way ...

1 Like