Keine leeren Felder bei Access

Status
Nicht offen für weitere Antworten.

Waldi

Bekanntes Mitglied
Hallo Java Gemeinde

Ich habe eine Oberfläche für eine Access Datenbank programmiert. Wenn ich Daten hinzufügen möchte, benutze ich das PreparedStatement was auch wunderbar funktioniert. Nun ist es so das in meinem Formular nicht alle Felder Pflichtfelder sind. Wenn ich jetzt ein Feld leer lasse wird mir ein SQLException geworfen das dass Feld xyz keine Zeichenfolge der länge null sein darf. Der Datensatz wird natürlich nicht angefügt. In Access ist eindeutig eingestellt das dass Feld xyz keine Eingabe erfordert.

Was kann man da machen??

MfG

Waldi
 

Timmah

Bekanntes Mitglied
Du könntest den SQL-Befehl so umstellen, dass er die Spalten in der Tabelle der DB manuell setzt.

Oder du prüfst vorher ab, ob die Variablen, die du reinschreiben willst, leer sind, und fügst dann "" ein.
 

Waldi

Bekanntes Mitglied
Code:
	    	// Methode zum Aufbauen der Datenbankverbindung
	    	FktVerbAufb.fktVerbAufb();

	    	
	    	String sQuery1 = "INSERT INTO Lager ( LName, Firma, LFirma, LStraße, LPLZ, LOrt, LTelNr, LFaxNr, 
LAnspPart, Abkürzung, Bemerkung, BemerkungFB, Warenannahme )SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?;";
	    	String sQuery2 = "INSERT INTO Lagerauswahl (Land, Lager) SELECT ?, ?"; 
	    	
	    	
	    	// Statement erzeugen
	    	PreparedStatement psStatement1 = FktVerbAufb.verbindung.prepareStatement(sQuery1);
	    	PreparedStatement psStatement2 = FktVerbAufb.verbindung.prepareStatement(sQuery2);
	    		    	
	    	//Werte für Spalten festlegen
	    	psStatement1.setString(1, sLName);
	    	psStatement1.setInt(2, iFirma);
	    	psStatement1.setString(3, sLFirma);
	    	psStatement1.setString(4, sLStraße);
	    	psStatement1.setString(5, sLPLZ);
	    	psStatement1.setString(6, sLOrt);
	    	psStatement1.setString(7, sLTelNr);
	    	psStatement1.setString(8, sLFaxNr);
	    	psStatement1.setString(9, sLAnspPart);
	    	psStatement1.setString(10, sAbkürzung);
	    	psStatement1.setString(11, sBemerkung);
	    	psStatement1.setString(12, sBemerkungFB);
	    	psStatement1.setString(13, sWarenannahme);
	    	
	    	psStatement1.executeUpdate();
	    	psStatement1.close();
	    	
	    	psStatement2.setInt(1, iLLand);
	    	
	    	int iLager = GetID.iGetID("SELECT Lager.LName, Lager.ID FROM Lager WHERE (((Lager.LName)= ? ));",sLName);
	    	System.out.println(sLName);
	    	System.out.println(iLager);
	    		    
	    	while (iLager <=0) 
	    	{
	    		iLager = GetID.iGetID("SELECT Lager.LName, Lager.ID FROM Lager WHERE (((Lager.LName)= ? ));",sLName);
			}
	    	
	    	psStatement2.setInt(2, iLager);
	    	
	    	psStatement2.executeUpdate();

	    	FktVerbAufb.fktVerbTrennen();

So hier mal den Code.

@Timmah: Ok ich probiers gleich aus. Aber komisch ist das schon oder?? Ich meine das ist doch kein Problem wenn da einfach nix reingeschrieben wird. Dein erster Lösungsvorschlag kann ich nicht nachvollziehen: Die Tabelle mit den Spaltennamen sind ja schon fertig.
 
G

Guest

Gast
"INSERT INTO Lagerauswahl (Land, Lager) SELECT ?, ?" :autsch:

Versuche es zuerst mit korrektem SQL

"INSERT INTO Lagerauswahl (Land, Lager) VALUES(?, ?)"

Gleiches mit der anderen Anweisung.
 

SamHotte

Top Contributor
Nach meiner Erfahrung mag Access keine Nullwerte via JDBC ... schreib einen leeren String rein, dann passts.
 

Waldi

Bekanntes Mitglied
Hab ich probiert. Funzt ned. Ich habe beim laden des Fensters alle Felder auf .setText("") gesetzt. Danach schreibe ich die Werte rein und fürhre die SQL Anweisung aus. Wieder der gleiche Fehler. Oder hab ich ein Denkfehler??
 

SamHotte

Top Contributor
Hast du auch probiert, die SQL-Anweisungen so wie "Gast" schrieb umzubauen? Wie genau lautet die Fehlermeldung?
 

Waldi

Bekanntes Mitglied
ist die gleiche Fehlermeldung wie oben beschrieben. Ja ich habe die SQL anweisung umgebaut wie Gast beschrieben. Das gleiche resultat. Hatte schon mal den Quellcode gepostet das problem ist nur das Forum hat ned so ganz funktioniert. Ich poste morgen den Code nochmal ausführlich
 

Waldi

Bekanntes Mitglied
Das hier list die Textfelder in Stringvariablen (verkürzt)

Code:
String sLagerName = jTextFieldLgrName.getText();
					String sLagerStraße = jTextFieldLgrStraße.getText();
					String sLagerPLZ = jTextFieldLgrPlz.getText();

Und das ist der Code der gleich nach öffnen des Fensters gestartet wird (verkürzt)

Code:
this.addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowOpened(java.awt.event.WindowEvent e) {
				System.out.println("windowOpened()"); // TODO Auto-generated Event stub windowOpened()
				jTextFieldLagerFirma.setText("");
				jTextFieldLgrName.setText("");
				jTextFieldLgrStraße.setText("");

Und das hier schreibt den ganzen krempel in die DB. (ungekürzt)

Code:
String sQuery1 = "INSERT INTO Lager ( LName, Firma, LFirma, LStraße, LPLZ, LOrt, LTelNr, LFaxNr, LAnspPart, Abkürzung, Bemerkung, BemerkungFB, Warenannahme )VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);";
	    	String sQuery2 = "INSERT INTO Lagerauswahl (Land, Lager) VALUES (?,?)"; 
	    	
	    	
	    	// Statement erzeugen
	    	PreparedStatement psStatement1 = FktVerbAufb.verbindung.prepareStatement(sQuery1);
	    	PreparedStatement psStatement2 = FktVerbAufb.verbindung.prepareStatement(sQuery2);
	    		    	
	    	//Werte für Spalten festlegen
	    	psStatement1.setString(1, sLName);
	    	psStatement1.setInt(2, iFirma);
	    	psStatement1.setString(3, sLFirma);
	    	psStatement1.setString(4, sLStraße);
	    	psStatement1.setString(5, sLPLZ);
	    	psStatement1.setString(6, sLOrt);
	    	psStatement1.setString(7, sLTelNr);
	    	psStatement1.setString(8, sLFaxNr);
	    	psStatement1.setString(9, sLAnspPart);
	    	psStatement1.setString(10, sAbkürzung);
	    	psStatement1.setString(11, sBemerkung);
	    	psStatement1.setString(12, sBemerkungFB);
	    	psStatement1.setString(13, sWarenannahme);
	    	
	    	psStatement1.executeUpdate();
	    	psStatement1.close();
	    	
	    	psStatement2.setInt(1, iLLand);
	    	
	    	int iLager = GetID.iGetID("SELECT Lager.LName, Lager.ID FROM Lager WHERE (((Lager.LName)= ? ));",sLName);
	    	System.out.println(sLName);
	    	System.out.println(iLager);
	    		    
	    	while (iLager <=0) 
	    	{
	    		iLager = GetID.iGetID("SELECT Lager.LName, Lager.ID FROM Lager WHERE (((Lager.LName)= ? ));",sLName);
			}
	    	
	    	psStatement2.setInt(2, iLager);
	    	
	    	psStatement2.executeUpdate();

Nachtrag: Fehlermeldung

Code:
INFO: Verbindung zur Datenbank erfolgreich durchgefuehrt.
**************************************************************************
ERROR: Datenbankfehler: [Microsoft][ODBC Microsoft Access Driver] Feld 'Lager.Abkürzung' darf keine Zeichenfolge der Länge Null sein.
--------------------------------------------------------------------------
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Feld 'Lager.Abkürzung' darf keine Zeichenfolge der Länge Null sein.
	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(Unknown Source)
	at Funktionen.FktAnlegen.setLager(FktAnlegen.java:88)
	at Fenster.LagerAnlegen$2.actionPerformed(LagerAnlegen.java:546)
	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.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(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)
**************************************************************************
 

SamHotte

Top Contributor
Typischer Fall von schlechter Fehlermeldung. Ersetze das "ü" durch nicht-Umlaut, SQL mag keine Sonderzeichen. Möglicherweise ist das bereits die Lösung ...
[edit] --> das "ü" in "Lager.Abkürzung" ist gemeint :) [/edit]
 

Waldi

Bekanntes Mitglied
Da gibt es ein paar Wiedersprüche:

1. Die Datenbank ist schon fertig und kann ned so einfach geändert werden. Auch wegen den ganzen anderen SQL Commands die sich darauf beziehen.

2. Wenn ich ein anderes Feld leer lasse dann kommt der Fehler mit diesem Feld.

3. Wenn ich das Feld Abkürzungen fülle dann kommt kein fehler. Wie gesagt tritt nur dann auf wenn das Feld leer ist.

Aber gibts sowas komisches????
 

Bleiglanz

Gesperrter Benutzer
gibts vielleicht einen Constraint der Form LENGTH>0

=> schau mal in Access die Tabellendefinition genau an
 

SamHotte

Top Contributor
Hmm. Für mich sehen die Zuweisungen oben so aus, als ob du in "Abkürzung" nach wie vor eine NULL hineinschreiben möchtest; obwohl das eigentlich funktionieren müsste, habe ich mit Access jedesmal Probleme bei sowas gehabt. Teste doch mal, ob dein SQL-Befehl mit "VALUES ("","","", ...) funktionieren würde.
Wenn alle Stricke reißen: man kann über einen (mir leider momentan nicht im Kopfe seienden) bestimmten Befehl eine *sehr* ausführliche Protokollierung der Datenbank-Kommunikation einschalten - vielleicht weiß hier ja jemand diesen Befehl noch?
 

Waldi

Bekanntes Mitglied
So hab jetzt das Problem gelöst: Man muss in der Access Datenbank leere Zeichenfolge auf JA setzen. Leider ist mir die Sache nie aufgefallen weil ich immer nach Eingabe erforderlich gesucht habe.

@SamHotte: Ich weise den Feldern beim Start des Fensters schon "" zu. danach wird dies genommen und zur Datenbank übertragen. Auf jeden fall Funktioniert die Sache jetzt.
 

SamHotte

Top Contributor
Ah, ok - das mit "Leere Zeichenfolge" müsste eigentlich standardmäßig auf "Ja" stehen, daher hatte ich die Fehlerquelle noch nicht. Sorry!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Z Ein haufen Fehlermeldungen aber keine Ahnung warum... Datenbankprogrammierung 9
Z Ein Haufen Fehlermeldungen und keine Ahnung... (H2 DB mit Intellij und Scene Builder ) Datenbankprogrammierung 16
V keine Verbindung möglich (Access-DB) Datenbankprogrammierung 3
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
J keine Werte vom PHP Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
S DB2 Express C - keine Verbindung zur Datenbank Datenbankprogrammierung 2
I Es kann keine Verbindung zum Server aufgebaut werden Datenbankprogrammierung 12
D Keine Datenbankverbindung Datenbankprogrammierung 4
M Keine Antwort der Datenbank bei updateQUery(); Datenbankprogrammierung 2
J SQL-Statement Trigger zeigt keine Wikrung PL/SQL Datenbankprogrammierung 2
W Keine ODBC-Verbindung zur MSAccess-Datenbank Datenbankprogrammierung 2
E Warum kann ich keine Datenbank mit DB2 erstellen? Datenbankprogrammierung 2
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
T JAR keine H2 driver? Datenbankprogrammierung 3
B Mysql speichert keine 0 alls String Datenbankprogrammierung 11
D Keine Einträge in die Datenbank Datenbankprogrammierung 5
E Derby/JavaDB Keine Reaktion von "insert into" im ActionListener Datenbankprogrammierung 22
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
E JDO -> keine Maps Datenbankprogrammierung 2
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
C Derby/JavaDB JavaDB: Keine Connection Datenbankprogrammierung 7
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
André Uhres SQL Abfrage erkennt keine Buchstaben mit Akzenten (z. B. é, è) Datenbankprogrammierung 3
P Hibernate -> SQL verwenden und keine Entity Datenbankprogrammierung 19
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
F Kann keine Verbindung mit HSQLDB aufbauen Datenbankprogrammierung 2
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
C keine Verbindung zur MS-SQL-Datenbank mehr Datenbankprogrammierung 4
Y Keine verbindung mit der Datenbank Datenbankprogrammierung 2
D Keine Ausgabe der Daten Datenbankprogrammierung 3
C Keine Verbindung Datenbankprogrammierung 12
B JDBC txt File keine Row ID Datenbankprogrammierung 4
J JDBC - setAutoCommit(false) hat keine wirkung? Datenbankprogrammierung 2
S ResultSet enthält keine Daten Datenbankprogrammierung 2
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
P Es werden keine Daten mehr in die Tabelle eingefügt Datenbankprogrammierung 4
A Fehlermeldung: Keine Daten verfügbar Datenbankprogrammierung 2
M Hilfe - keine Connection zur DB Datenbankprogrammierung 4
C Keine Verbindung zu HSQLDB möglich Datenbankprogrammierung 22
G Keine Aussicht mit Prepared Statement Datenbankprogrammierung 10
I Nach export zur .jar keine verbindung mehr Datenbankprogrammierung 7
I Kann keine Daten aus ResultSet holen ? Datenbankprogrammierung 11
J Keine Connection zur MySQL Db Datenbankprogrammierung 6
I Keine Treiber-Klasse! Datenbankprogrammierung 9
K keine Verbindung zu mysql Datenbank Datenbankprogrammierung 11
M Bekomme keine Daten in die DB! Datenbankprogrammierung 11
H Kann keine Verbindung zur DB herstellen Datenbankprogrammierung 7
G linux mysql keine verbindung Datenbankprogrammierung 8
A Hibernate Cache leeren Datenbankprogrammierung 4
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
M JDBC-Cache leeren? Datenbankprogrammierung 2
T NullPointerException bei leeren Feldern Datenbankprogrammierung 10
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
S Leere Felder Datenbankprogrammierung 8
AssELAss Oracle Wildcard-Suche über zwei Felder Datenbankprogrammierung 5
turmaline [Hibernate] NamedQuery nur einzelne Felder Datenbankprogrammierung 3
R Bei Webformular DropDown Felder JA, NEIN! Was für einen Datentyp verwenden? Datenbankprogrammierung 7
G Date und Time Felder? Datenbankprogrammierung 3
W Leere Date-Felder aus DB einlesen Datenbankprogrammierung 4
L DB Felder in einem Array speichern und wieder auslesen Datenbankprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben