null ist nicht gleich 0 - Probleme mit getInt()

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Luke78
**
Beiträge: 29
Registriert: Do, 27.09.2012 19:43

null ist nicht gleich 0 - Probleme mit getInt()

Beitrag von Luke78 »

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
LO 3.6.5.2 auf Windows 7 64bit
"Ein Programm ist immer nur so gut wie sein Benutzer" - "Software has no brain, use your own"
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

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

Beitrag von F3K Total »

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
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

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

Beitrag von juetho »

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
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

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

Beitrag von F3K Total »

Hallo,
juetho hat geschrieben:Ja, das geht mit wasNull, siehe Handbuch Seite 273.
... und das ist die bessere Lösung, vergiss getstring() ...
Gruß R
Luke78
**
Beiträge: 29
Registriert: Do, 27.09.2012 19:43

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

Beitrag von Luke78 »

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ß
LO 3.6.5.2 auf Windows 7 64bit
"Ein Programm ist immer nur so gut wie sein Benutzer" - "Software has no brain, use your own"
Antworten