This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Speichern beim Zeilenwechsel?

Allgemeine Fragen zur Entwicklung von und mit JVx.

Speichern beim Zeilenwechsel?

Postby jsmw » Sat Jun 04, 2011 10:06 pm

Mit 1.0 Beta (Vergleich mit 0.8) wird kein Speichern ausgeführt. Beim Wechsel der Zeile geht das Eingetragene verloren. Hat das etwas mit der Einstellung von DataRow, DataSource zu tung?
Code: Select all
      rdbUsers.setDataSource(dataSource);
      rdbUsers.setName("users");
      rdbUsers.open();
      System.out.println(rdbUsers);

Ausgabe:
Code: Select all
com.sibvisions.rad.model.remote.RemoteDataBook ::users::
  isOpen         = true
  RowDefinition :: [ID(storeable)(PK)][FIRSTNAME(storeable)][LASTNAME(storeable)] ... [COUNTRY_ID(storeable)][COUNTRY_NAME(storeable)]

  SelectedRow    = 0
Current DataPage:
  DataPage ::[users] ..., [4]=[3][Test][Tester][null][null][C][C-pass][null][null][null][2][Austria], ... , , CHANGES:
jsmw
 
Posts: 38
Joined: Tue May 24, 2011 6:33 pm

Re: Speichern beim Zeilenwechsel?

Postby rjahn » Sun Jun 05, 2011 10:30 am

Der DataSource und DataRow writeback isolation level sind grund verschieden. Der DataRow Level veranlasst die Speicherung bei jedem Zeilenwechsel. Der DataSource Level speichert bei Aufruf einer save Methode und daher nicht bei einem Zeilenwechsel. Der Data Source Level ist nicht standardmässig aktiviert und ist auch nicht für alle Anwendungsfälle die bevorzugte Lösung.

Eine unterschiedliche Behandlung in 0.8 und 1.0 beta-1 gibt es nicht. Außer den eingeflossenen Erweiterungen.

Das die eingegebenen Daten verloren gehen, kann viele Gründe haben wie z.B. wenn eine View zum Lesen und eine Tabelle zum Schreiben verwendet wird, kann es sein das nach dem Schreibvorgang die View noch immer die alten Daten anzeigt zu dem gleiche PK.

Anhand des geposteten Source Codes kann keine Hilfestellung gegeben werden, da weder die View, noch DBStorage noch das Datenmodell bekannt ist.

Um dem Problem auf die Spur zu kommen, einfach die Fehlerquellen reduzieren.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Speichern beim Zeilenwechsel?

Postby jsmw » Sun Jun 05, 2011 5:47 pm

Keine View in Verwendung siehe unten:
Code: Select all
public DBStorage getUsers() throws Exception
   {
      DBStorage dbsUsers = (DBStorage)get("users");
      
      if (dbsUsers == null)
      {
         dbsUsers = new DBStorage();
         dbsUsers.setDBAccess(getDBAccess());
         dbsUsers.setFromClause("users");
         dbsUsers.setWritebackTable("users");
         dbsUsers.open();
         
         put("users", dbsUsers);
      }
      
      return dbsUsers;
   }

Habe zusätzlich versucht einen Datensatz einzufügen. Folgende Exception:

Code: Select all
FEHLER: Syntaxfehler bei »)«  Position: 20
Insert failed! - INSERT INTO users () VALUES () RETURNING id
javax.rad.model.ModelException: Execute Insert failed!
   at com.sibvisions.rad.model.remote.RemoteDataBook.executeInsert(Unknown Source)
   at com.sibvisions.rad.model.mem.MemDataBook.saveSelectedRow(Unknown Source)
   at com.sibvisions.rad.model.mem.MemDataBook.saveAllRows(Unknown Source)
   at com.sibvisions.rad.model.mem.MemDataBook.saveDetails(Unknown Source)
   at com.sibvisions.rad.model.mem.MemDataBook.saveDataRowLevelDetails(Unknown Source)
   at com.sibvisions.rad.model.mem.MemDataBook.setSelectedRow(Unknown Source)
   at com.sibvisions.rad.ui.swing.ext.JVxTable.mousePressed(Unknown Source)
   at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
   at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
   at java.awt.Component.processMouseEvent(Component.java:6264)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6032)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Vielleicht noch interessant:
Code: Select all
Caused by: javax.rad.persist.DataSourceException: Insert failed! - INSERT INTO users () VALUES () RETURNING id
                                       at com.sibvisions.rad.persist.jdbc.PostgreSQLDBAccess.insertPostgres(Unknown Source)
                                       at com.sibvisions.rad.persist.jdbc.PostgreSQLDBAccess.insertDatabaseSpecific(Unknown Source)
                                       at com.sibvisions.rad.persist.jdbc.DBAccess.insert(Unknown Source)
                                       at com.sibvisions.rad.persist.jdbc.DBStorage.executeInsert(Unknown Source)
                                       at com.sibvisions.rad.persist.AbstractStorage.insert(Unknown Source)
                                       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                                       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                                       at java.lang.reflect.Method.invoke(Method.java:597)
                                       at com.sibvisions.util.Reflective.call(Unknown Source)
                                       at com.sibvisions.util.Reflective.call(Unknown Source)
                                       at com.sibvisions.util.Reflective.call(Unknown Source)
                                       at com.sibvisions.rad.server.DefaultObjectProvider.invoke(Unknown Source)
                                       at apps.firstapp.frames.DBEdit.<users>.insert(Unknown Source)
                                       at com.sibvisions.rad.server.AbstractSession.executeWithSessionContext(Unknown Source)
                                       at com.sibvisions.rad.server.AbstractSession.executeIntern(Unknown Source)
                                       at com.sibvisions.rad.server.AbstractSession.execute(Unknown Source)
                                       at com.sibvisions.rad.server.Server.executeIntern(Unknown Source)
                                       at com.sibvisions.rad.server.Server.execute(Unknown Source)
                                       at com.sibvisions.rad.server.DirectServerConnection.call(Unknown Source)
                                       at javax.rad.remote.AbstractConnection.call(Unknown Source)
                                       ... 29 more
                                    Caused by: org.postgresql.util.PSQLException: FEHLER: Syntaxfehler bei »)«
                                      Position: 20
                                       at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
                                       at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
                                       at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
                                       at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
                                       at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
                                       at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
                                       ... 50 more

Wie gesagt bei 0.8 hat es funktioniert.
jsmw
 
Posts: 38
Joined: Tue May 24, 2011 6:33 pm

Re: Speichern beim Zeilenwechsel?

Postby rjahn » Sun Jun 05, 2011 7:39 pm

Jetzt wäre noch die Tabelle interessant - zumindest das create Statement. Die DB ist PostgreSql?

Bitte probieren Sie die aktuelle Release JVx 0.9.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Speichern beim Zeilenwechsel?

Postby jsmw » Sun Jun 05, 2011 8:12 pm

Bei V. 0.9 gleiches Verhalten:
- Änderungen verworfen
- Exception bei Neuanalge

DB ist PostgreSQL - Die gewünschten SQL-Scripts:
Code: Select all
CREATE TABLE users (
   id SERIAL NOT NULL,
   firstname VARCHAR(50),
   lastname VARCHAR(50),
   company VARCHAR(100),
   email VARCHAR(50),
   loginname VARCHAR (30),
   password VARCHAR(30),
   street VARCHAR(50),
   postalcode VARCHAR(5),
   city VARCHAR(30),
   country_id INTEGER,
   PRIMARY KEY (id),
   FOREIGN KEY(country_id) REFERENCES countries (id)
);

CREATE TABLE countries (
   id SERIAL NOT NULL,
   country VARCHAR(50),
   currency_id INTEGER,
   PRIMARY KEY (id),
   FOREIGN KEY(currency_id) REFERENCES currencies (id)
);
jsmw
 
Posts: 38
Joined: Tue May 24, 2011 6:33 pm

Re: Speichern beim Zeilenwechsel?

Postby rjahn » Sun Jun 05, 2011 9:01 pm

Dabei handelt es sich leider um einen Bug.
Weitere Details siehe Support System.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Speichern beim Zeilenwechsel?

Postby jsmw » Mon Jun 06, 2011 8:32 pm

Wenn etwas zu testen wäre, Info posten.
jsmw
 
Posts: 38
Joined: Tue May 24, 2011 6:33 pm

Re: Speichern beim Zeilenwechsel?

Postby Support@SIB » Tue Jun 07, 2011 10:10 am

Solche Angebote werden immer gerne angenommen.
Das Problem wurde bereits im Source Code behoben, wird aber erst mit der nächsten BETA Version als Download verfügbar sein.

Sollten Sie die Änderungen früher testen wollen, dann können Sie jederzeit mit dem aktuellen JVx Source testen. Hierfür einfach diesen Anweisungen folgen und den Source Code aus dem SVN Repository abrufen.
User avatar
Support@SIB
 
Posts: 349
Joined: Mon Sep 28, 2009 1:56 pm


Return to Development (DE)