Werte von SwitchBox

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
dagnor
Foriker
Beiträge: 32
Registriert: Mi 26. Jul 2017, 09:52
Kontaktdaten:

Werte von SwitchBox

Beitrag von dagnor » Di 15. Aug 2017, 09:38

Hallo, wieder ein kleines Problem.
Ich will die Werte aus SwitchBox (True/False) in Integer umwandeln, so dass sie in MySQL TinyInt(1) passen, also zuerst in Integer in Gambas umwandeln. Ich möchte das mit eine globale Routine umwandeln. Ich rufe so aus dem MainForm:

Code: Alles auswählen

      Print TB_toolbar.Value
      Stop
      s = ma.TrueFalseDigit(TB_toolbar.Value)
Print im MainForm liefert False, ist richtig.

Module ma

Code: Alles auswählen

 Public Function TrueFalseDigit(tf As Boolean) As Integer
  Print tf
  Stop
End

Liefert gar nichts. Irgendwo habe ich wohl ein Fehler...

LG

dagnor
Foriker
Beiträge: 32
Registriert: Mi 26. Jul 2017, 09:52
Kontaktdaten:

Re: Werte von SwitchBox

Beitrag von dagnor » Di 15. Aug 2017, 10:44

Hallo,

ich fand den Fehler zwar nicht, aber ich brachte es zum Laufen:
Form Fmain

Code: Alles auswählen

      SQL = SQL & ", toolbar=" & ma.TrueFalseDigit(TB_toolbar.Value)
      SQL = SQL & ", statline=" & TrueFalseDigit(TB_statline.Value)
Modul ma:

Code: Alles auswählen

Public Function TrueFalseDigit(tf As Boolean) As Integer
  If tf = False Then
    Return 0
  Else
    Return 1
  Endif

LG
End

dagnor
Foriker
Beiträge: 32
Registriert: Mi 26. Jul 2017, 09:52
Kontaktdaten:

Re: Werte von SwitchBox

Beitrag von dagnor » Di 15. Aug 2017, 11:08

Hallo
Ergänzung für die Werte von Typ Boolean in Gambas, Boolean in MySQL.
Boolean in MySQL ist ein Synonym for TinyInt(1). Also ist es besser sie zu Integer und zurück zu konvertieren. Zu integer im vorigen Post.
Zürück zu Switchbox (oder alle Komponenten mit Value typ Boolean)

In Form FMain

Code: Alles auswählen

	 TB_toolbar.Value = ma.TrueFalseBoolean(rec!toolbar)
	 TBstatline.Value = ma.TrueFalseBoolean(rec!statline)
In Modul ma

Code: Alles auswählen

Public Function TrueFalseBoolean(tf As Integer) As Boolean

  If tf = 0 Then
    Return False
  Else
    Return True
  Endif

End
Hoffe dies ist eine Hilfe für jemand.Gambas selber bietet CBool ( Expr ) AS Boolean an, das ist die Konvertierung nach Booleans, zurück sehe ich nichts.

Das ergab auch nicht ein gutes Ergebnis für die Liste, für Details (SwitchBox) funtioniert es, ich wollte die Worte haben, Also eine neue Funktion im Modul ma:

Code: Alles auswählen

Public Function TrueFalseWord(tf As Variant) As String

  If tf = 0 Then
    Return ("Falsch")
  Else
    Return ("Wahr")
  Endif

End
LG

Benutzeravatar
4tionov
Site Admin
Beiträge: 232
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Werte von SwitchBox

Beitrag von 4tionov » Di 15. Aug 2017, 19:12

Es ist immer sinnvoll Booleans in DBs als Integer oder Smallint zu speichern, schlicht aus Kompatibilitätsgründen, auch wenn die DB vielleicht einen eigenen Typ dafür vorhält. Die Konvention dafür ist: True ist -1, False ist 0.

Auch Gambas selbst hält sich daran:
shell code
ich@tof ~ » gbx3 -e "2 * True"
-2
ich@tof ~ » gbx3 -e "1 * True"
-1
ich@tof ~ » gbx3 -e "100 * False"
0
Du brauchst also True oder False nicht zu Integer konvertieren, sie sind das bereits.

Postgresql (von Mysql habe ich nur wenig Ahnung) kennt allerdings noch Unknown, wenn Boolean nicht gesetzt ist. " The boolean type can have several states: "true", "false", and a third state, "unknown", which is represented by the SQL null value."

https://www.postgresql.org/docs/9.6/sta ... olean.html

Das kann wiederum Gambas nicht, wenn du eine boolsche Variable mit Null füllst, macht Gambas daraus 0/False.
Alles Gute,

4tionov

dagnor
Foriker
Beiträge: 32
Registriert: Mi 26. Jul 2017, 09:52
Kontaktdaten:

Re: Werte von SwitchBox

Beitrag von dagnor » Sa 19. Aug 2017, 08:05

Hallo 4tinov,

danke schön für die ausführliche Antwort. Das Beschriebene kam daher: Ich machte ein print auf die Werte aus der Tabelle, und bekam bei 1 True und bei 0 - nada, nichts. Ich wollte auch die Werte in ein Tableview darstellen, und bekam bei True ein "T" und bei false wieder gar nichts. Auserdem programmiere ich mulitilingual und deswegen ist zumindest die letzte Ergänzung sinnvol in meine Augen.

In MySQL gibt es Boolean. Ist aber nichts anderes als Tinyint(1)

LG , dagnor

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste