null ist nicht gleich 0 - Probleme mit getInt()

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: null ist nicht gleich 0 - Probleme mit getInt()

Re: null ist nicht gleich 0 - Probleme mit getInt()

von Luke78 » Mi, 20.03.2013 20:23

Vielen Dank!

Werd mich da dann mal reinfuchsen, ist mein erstes größeres Datenbank Projekt, da läuft man noch oft in die falsche Richtung oder läßt Dinge erstmal so, weil sie funktionieren und/oder man es nicht besser weiß.

Besten Gruß

Re: null ist nicht gleich 0 - Probleme mit getInt()

von F3K Total » Mi, 20.03.2013 17:08

Hallo,
juetho hat geschrieben:Ja, das geht mit wasNull, siehe Handbuch Seite 273.
... und das ist die bessere Lösung, vergiss getstring() ...
Gruß R

Re: null ist nicht gleich 0 - Probleme mit getInt()

von juetho » Mi, 20.03.2013 09:07

Vorab zwei Hinweise, die mit der eigentlichen Frage nichts zu tun haben:
Luke78 hat geschrieben:Ich möchte Daten kopieren, klappt auch wunderbar außer bei optionalen Spalten mit Fremdschlüssel.

Code: Alles auswählen

	sSQL		        = "SELECT * FROM ""Arbeitseinheiten"" WHERE ""PlanID"" = '" + iPlanID + "'"
	oConnection	= oForm.ActiveConnection
	oSQLQuery	= oConnection.createStatement()
	oSQLResult	= oSQLQuery.executeQuery( sSQL)
Bei einer Zahl sind die einfachen Hochkommata im SQL-Befehl überflüssig. Außerdem ist es sicherer im Sinne von SQL-Injection, wenn ein Wert per Parameter eingetragen wird (im neuen Base-Handbuch Seite 261):

Code: Alles auswählen

	sSQL		        = "SELECT * FROM ""Arbeitseinheiten"" WHERE ""PlanID"" = ?"
	oConnection	= oForm.ActiveConnection
	oSQLQuery	= oConnection.prepareStatement(sSQL)
	oSQLQuery.setLong(1, iPlanID)
	oSQLResult	= oSQLQuery.executeQuery()
Zur eigentlichen Frage:
Luke78 hat geschrieben:trotzdem würde mich interessieren, ob man bei Integer unterscheiden kann zwischen NULL und 0. In SQL geht das ja imho problemlos.
Ja, das geht mit wasNull, siehe Handbuch Seite 273.

Code: Alles auswählen

iValue = oSQLResult.getInt(4)
if oSQLResult.wasNull then ...
Luke78 hat geschrieben:Ergänzend gefragt, macht vieleicht der ganze Kopierweg rein in SQL mehr Sinn? Rumpel da grad ein wenig durch meine Formulare und Unterformulare zum Daten sammeln und eintragen, das ist halt alles sichtbar für den Benutzer.
Nur wenn der Benutzer das sehen soll, ist es sinnvoll, das Ganze über die Formulare zu erledigen. In aller Regel ist der direkte Weg über SQL innerhalb der Datenbank besser: Die Datenbank selbst ist darauf optimiert, dass Datenmengen in ihr verarbeitet werden. Es entfallen das ständige Kopieren der Daten zwischen Datenbank und Programm sowie der erneute Aufbau der Anzeige in den Formularen.

Gruß Jürgen

Re: null ist nicht gleich 0 - Probleme mit getInt()

von F3K Total » Di, 19.03.2013 22:42

Hi,
habe gerade durch Probieren herausgefunden, dass du eine 0 von einem leeren Ergebnis mit getstring unterscheiden kannst:

Code: Alles auswählen

if oSQLResult.getstring(4) <> "" then oPlan.updateInt( 4, oSQLResult.getInt( 4))
'die 0 wird geschrieben wenn die ID eine 0 ist, sonst nicht.
Gruß R

null ist nicht gleich 0 - Probleme mit getInt()

von Luke78 » Di, 19.03.2013 22:02

Hallo zusammen!

Ich hab ein kleines Problem, dass ich zwar umgehen kann aber trotzdem gerne die Lösung wüsste:

Ich möchte Daten kopieren, klappt auch wunderbar außer bei optionalen Spalten mit Fremdschlüssel.

Code: Alles auswählen

	sSQL		        = "SELECT * FROM ""Arbeitseinheiten"" WHERE ""PlanID"" = '" + iPlanID + "'"
	oConnection	= oForm.ActiveConnection
	oSQLQuery	= oConnection.createStatement()
	oSQLResult	= oSQLQuery.executeQuery( sSQL)
	oPlan		        = oForm.Plan

	while oSQLResult.next
		oPlan.moveToInsertRow()
		oPlan.updateTime( 2, oSQLResult.getTime( 2))
		oPlan.updateTime( 3, oSQLResult.getTime( 3))
		oPlan.updateInt( 4, oSQLResult.getInt( 4)) '<- kopiert optionale ID (Fremdschlüssel)
		oPlan.updateInt( 5, oSQLResult.getInt( 5)) '<- kopiert optionale ID (Fremdschlüssel)
		if oPlan.isNew() then
			oPlan.insertRow()
		else
			oPlan.updateRow()
		end if
	wend
getInt gibt halt im Fall von "ID nicht gesetzt" immer 0 als Zahlenwert zurück, allerdings könnte 0 auch als ID vergeben sein.

Ich kann natürlich dafür sorgen, dass alle IDs erst bei 1 anfangen, trotzdem würde mich interessieren, ob man bei Integer unterscheiden kann zwischen NULL und 0. In SQL geht das ja imho problemlos.

Ergänzend gefragt, macht vieleicht der ganze Kopierweg rein in SQL mehr Sinn? Rumpel da grad ein wenig durch meine Formulare und Unterformulare zum Daten sammeln und eintragen, das ist halt alles sichtbar für den Benutzer.

Gruß

Luke

Nach oben