Zugriff auf MariaDB 5, Datentyp tinyint

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Mo 3. Dez 2018, 16:37

Mein Projekt:
Teil A: Portieren eines Datenbankprojekts (lauffähig unter Microsoft Visual Basic 8) in eine unter lubuntu laufende Gambas3-Version (ich nutze Gambas 3.8.4)
Teil B: Portieren der zugehörigen mysql-Datenbank auf eine Maria5 DB, die in einer NAS von Synology (unter Linux) läuft.

Teil B scheint mir bereits gelungen: Die Daten sind sowohl mit dem VB-Programm als auch mit PHPmyAdmin aus der Maria5-DB richtig auslesbar, und zwar auch mit der PHPmyAdmin-Version, die in der NAS installiert ist.

Mit Teil A habe ich ein Problem, weil einige Integer-Daten vom Typ tinyint mit Gambas nicht korrekt auslesbar sind.
As Code-Befehle benutze ich:

Public $Con AS New Connection
Dim R[] As Result
try R = $Con.Exec (...)

Das Abfrage-Ergebnis ist für Daten x < -1 und für x > 10 korrekt; für Zahlen von x = 0 bis x=10 in der Datenbank (PHPmyAdmin) liefert R ein anderes Ergebnis:

Für x=0 ist R[..]="" CStr(R[..]="" CInt(R[.. ]=0
Für x=1 ...10 ist R[..]="T" CStr(R[..]="T" und CInt(R[..])=-1

Wie könnte es mir gelingen, auf die in der Datenbank gespeicherten Integer-Zahlen (jeweils x) im Gambas-Programm zuzugreifen?

Dank für die Mühe im voraus.

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Mo 3. Dez 2018, 16:54

Kannst du mal deinen Code formatieren? Dazu gibt es da oben Knöpfe, dann sieht das so aus:
gambas code
Dim x as Integer
Und schreibe da bitte funktionierenden Code, ohne irgendwelche Zeichen, die Auslassungen symbolisieren sollen. Sonst kann ich dir nicht helfen. Ich verstehe nämlich nicht, was Du meinst.
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Mo 3. Dez 2018, 18:35

Hier der lauffähige Code.
Für abgespeicherte Zahlen <-1 und >10 gibt es kein Problem, genau wie es für 10 angezeigt wird.
Ich hoffe das hilft weiter.

Code: Alles auswählen

' Gambas class file

'test von tinyint

     Public $Con As New Connection
        
     Public Sub Form_Open()
        Dim i, k As Integer
        Dim sql As String
        Dim R As Result
        Dim s As String
        
        Dim intTest As Integer
        intTest = -5
        
        $Con.Type = "MySql"
        $Con.Port = "3306"
        $Con.Name = "test"
        $Con.Host = "192.168.1.7"
        $Con.Login = "hans"
        $Con.Password = "myPassword"
        
        Try $Con.open
        If Error Then Message(Error.text)
        
        'Tabelle tabtest hat zwei Spalten
        '   sp_int       enthält (vorab) Integerzahlen k, ab 1 aufwärts
        '   sp_tiyint    wird mit k-2 gefüllt
                  
        For k = 1 To 12
           sql = "update tabtest set sp_tinyint=" & CStr(k - 2) & " where sp_int=" & CStr(k) & ";"
           Try $Con.Exec(sql)
           If Error Then Message(Error.text)
        Next
        
         'Nun werden diese Zahlen wieder ausgelesen und einzeln mit Messagebox wiedergegeben
         For k = 1 To 12
           sql = "select * from tabtest where sp_int=" & CStr(k) & ";"
           Try R = $Con.Exec(sql)
           If Error Then Message(Error.text)
           
           Message("Soll: " & CStr(k - 2) & "   ----   Ist:   [R]= " & R["sp_tinyint"] & "    ----   CStr([R]) = " & CStr(R["sp_tinyint"]) & "  ----  Int([R])= " & CStr(CInt(R["sp_tinyint"])))
        Next               
        $Con.Close()
     End Sub

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Mo 3. Dez 2018, 18:42

Sorry, besser so: gambas code
' Gambas class file

'test von tinyint

     Public $Con As New Connection
        
     Public Sub Form_Open()
        Dim i, k As Integer
        Dim sql As String
        Dim R As Result
        Dim s As String
        
        Dim intTest As Integer
        intTest = -5
        
        $Con.Type = "MySql"
        $Con.Port = "3306"
        $Con.Name = "test"
        $Con.Host = "192.168.1.7"
        $Con.Login = "hans"
        $Con.Password = "myPassword"
        
        Try $Con.open
        If Error Then Message(Error.text)
        
        'Tabelle tabtest hat zwei Spalten
        '   sp_int       enthält (vorab) Integerzahlen k, ab 1 aufwärts
        '   sp_tiyint    wird mit k-2 gefüllt
                  
        For k = 1 To 12
           sql = "update tabtest set sp_tinyint=" & CStr(k - 2) & " where sp_int=" & CStr(k) & ";"
           Try $Con.Exec(sql)
           If Error Then Message(Error.text)
        Next
        
         'Nun werden diese Zahlen wieder ausgelesen und einzeln mit Messagebox wiedergegeben
         For k = 1 To 12
           sql = "select * from tabtest where sp_int=" & CStr(k) & ";"
           Try R = $Con.Exec(sql)
           If Error Then Message(Error.text)
           
           Message("Soll: " & CStr(k - 2) & "   ----   Ist:   [R]= " & R["sp_tinyint"] & "    ----   CStr([R]) = " & CStr(R["sp_tinyint"]) & "  ----  Int([R])= " & CStr(CInt(R["sp_tinyint"])))
        Next               
        $Con.Close()
     End Sub

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Mo 3. Dez 2018, 19:07

Ok, dann gebe mal keine Messagebox aus sondern mache stattdessen:
gambas code
Print "Soll: " ;; CStr(k - 2) ;; "   ----   Ist:   [R]= " ;; R["sp_tinyint"] ;; "    ----   CStr([R]) = " ;; CStr(R["sp_tinyint"]) ;; "  ----  Int([R])= " ;; CStr(CInt(R["sp_tinyint"])))
Damit gibst Du das auf der Konsole aus, kannst das Ergebnis da markieren, kopieren und wieder hier posten.
Btw. Da sind viele Dinge zu verbessern, z.B. Deine Fehlerbehandlung. Aber schauen wir erst mal.
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Mo 3. Dez 2018, 21:59

Das sind die Ausgaben dieses Programms mit Message() oder (identisch) auch mit Print:

Ausgabe für k=1:
Soll: -1 ---- Ist: [R]= -1 ---- CStr([R]) = -1 ---- Int([R])= -1

Ausgabe für k=2:
Soll: 0 ---- Ist: [R]= ---- CStr([R]) = ---- Int([R])= 0

Ausgabe für k=3:
Soll: 1 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=4:
Soll: 2 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=5:
Soll: 3 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=6:
Soll: 4 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=7:
Soll: 5 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=8:
Soll: 6 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=9:
Soll: 7 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=10:
Soll: 8 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=11:
Soll: 9 ---- Ist: [R]= T ---- CStr([R]) = T ---- Int([R])= -1

Ausgabe für k=12:
Soll: 10 ---- Ist: [R]= 10 ---- CStr([R]) = 10 ---- Int([R])= 10

Zur Erläuterung: Die Ausgabe in diesen Zeilen ist vielleicht etwas unglücklich: [R] soll immer bedeuten R["sp_tinyint"], also das in der Variablen R vom Typ Result gespeicherte Ergebnis der Datenbankabfrage in der Spalte "sp_tinyint" der Tabelle "tabtest" der Datenbank "test".

Also: Für K=1 (da ist die Zahl -1 gespeichert) und auch für K=12 (da ist die Zahl 10 gespeichert) kommt das heraus, was zu erwarten wäre, nämlich diese zuvor in der Datenbank gespeicherte Zahl. Dasselbe gilt für negative Zahlen bis -128 und für positive Zahlen bis +127, und mehr kann tinyint mit seinen zwei Byte ja auch nicht.

Aber zwischen 0 (null) und 9 (neun) kommt nur Unfug heraus, was dieses Testprogramm demonstriert. Zum Abspeichern von Integer-Zahlen, deren Größe vorher nicht bekannt ist, taugt das nichts. Das ursprüngliche WINDOWS VB-Programm lässt sich unter Beibehaltung der Datenbank, die nun mal den Datentyp tinyint zum Speichern kleiner Integer's verwendet, anscheinend nicht nach Gambas übertragen.

P.S.
Im Übrigen bin ich froh, dass ich überhaupt entdeckt habe, dass Gambas hier mit ganz anderen Werten als abgespeichert weiterarbeitet.

Ich erinnere mich an ein Projekt vor vielen Jahren, das mit Gambas2 (ich weiß nicht mehr, welche Fassung) realisiert wurde, und wo auch tinyint eine Rolle spielte. Damals ist ein vergleichbares Problem nicht aufgetreten.

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Mo 3. Dez 2018, 22:41

Sorry, aber der Code ist sowas von hinten durch die Brust ins Auge. Für jede Zeile ein eigenes Result zu erstellen ist völliger Unfug.

Mach mal:
gambas code
    sql = "select sp_int,  sp_tinyint from tabtest order by sp_int;"
    R = $Con.Exec(sql)
    
    For Each R
    	Print "sp_int:" ;; R!sp_int ;; "sp_tinyint:" ;; R!sp_tinyint
    Next
(ungetestet!)

Und schick mal das Ergebnis.
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Di 4. Dez 2018, 07:54

Du möchtest also das ganze Feld R von -128 bis 127 ausgedruckt bekommen. O.K.

Da R["sp_int"] mit den positiven Zahlen k=0 bis 255 gefüllt ist (und das auch so bleiben soll, um die Verwirrung nicht komplett zu machen), habe ich dafür alle Felder R["sp_tinyint"] nochmal neu mit den Zahlen k-128 gefüllt, damit du auch die Wiedergabe negativen Zahlen siehst.

Nur zur Ausgabe der Ergebnisse:

Du liest mit deinem sql-Befehl unmittelbar das ganze Feld R auf einmal ein.
Und oh Wunder! Da zeigt sich der beanstandete Effekt gar nicht. Die Zahlen von 0 bis 10 kommen mit diesem sql-Befehl korrekt.

Nur nützt mir das nichts, weil ich ja auf einzelne Feldelemente zugreifen will, so wie es in dem zu portierenden Programm auch geschieht. Da muss ich dann schon meinen sql-Befehl (mit WHERE) testen, und nicht irgend einen anderen.

Daher habe ich hinterher noch mal dieselbe Ausgabe mit dem Einzelzugriff angehängt, wo sich dann der fragliche Effekt bei sp_int = 128 bis 137 zeigt.
Bei der von dir vorgeschlagenen Ausgabe mit PRINT tauchen dabei nochmal andere Abfrage-Resultate auf, nämlich "False" und "True", die bei der Ausgabe mit "Message" (siehe die ersten Posts) nicht gekommen waren.
Wunder über Wunder!

Hier dazu der aktuelle Code: gambas code
' Gambas class file

'test von tinyint

     Public $Con As New Connection
        
     Public Sub Form_Open()
        Dim i, k As Integer
        Dim sql As String
        Dim R As Result
        Dim s As String
        
        Dim intTest As Integer
        intTest = -5
        
        $Con.Type = "MySql"
        $Con.Port = "3306"
        $Con.Name = "test"
        $Con.Host = "192.168.1.7"
        $Con.Login = "hans"
        $Con.Password = "myPassword"
        
        Try $Con.open
        If Error Then Message(Error.text)
                          
        For k = 0 To 255
           sql = "update tabtest set sp_tinyint=" & CStr(k - 128) & " where sp_int=" & CStr(k) & ";"
           Try $Con.Exec(sql)
           If Error Then Message(Error.text)
        Next
        
        
        sql = "select sp_int,  sp_tinyint from tabtest order by sp_int;"
        R = $Con.Exec(sql)
 
        For Each R
           Print "sp_int:";; R!sp_int;; "sp_tinyint:";; R!sp_tinyint
        Next
            
        Print ""
        
        For k = 0 To 255
           sql = "select * from tabtest where sp_int=" & CStr(k) & ";"
           R = $Con.Exec(sql)   
           
           Print "sp_int:";; R["sp_int"];; "sp_tinyint:";; R["sp_tinyint"];; "Cint(R['sp_tinyint'])";; CInt(R["sp_tinyint"])
        Next               
        $Con.Close()
     End Sub

Und hier die Ausgabe mit Print (bitte durchscrollen!):

Code: Alles auswählen

sp_int: 0 sp_tinyint: -128
sp_int: 1 sp_tinyint: -127
sp_int: 2 sp_tinyint: -126
sp_int: 3 sp_tinyint: -125
sp_int: 4 sp_tinyint: -124
sp_int: 5 sp_tinyint: -123
sp_int: 6 sp_tinyint: -122
sp_int: 7 sp_tinyint: -121
sp_int: 8 sp_tinyint: -120
sp_int: 9 sp_tinyint: -119
sp_int: 10 sp_tinyint: -118
sp_int: 11 sp_tinyint: -117
sp_int: 12 sp_tinyint: -116
sp_int: 13 sp_tinyint: -115
sp_int: 14 sp_tinyint: -114
sp_int: 15 sp_tinyint: -113
sp_int: 16 sp_tinyint: -112
sp_int: 17 sp_tinyint: -111
sp_int: 18 sp_tinyint: -110
sp_int: 19 sp_tinyint: -109
sp_int: 20 sp_tinyint: -108
sp_int: 21 sp_tinyint: -107
sp_int: 22 sp_tinyint: -106
sp_int: 23 sp_tinyint: -105
sp_int: 24 sp_tinyint: -104
sp_int: 25 sp_tinyint: -103
sp_int: 26 sp_tinyint: -102
sp_int: 27 sp_tinyint: -101
sp_int: 28 sp_tinyint: -100
sp_int: 29 sp_tinyint: -99
sp_int: 30 sp_tinyint: -98
sp_int: 31 sp_tinyint: -97
sp_int: 32 sp_tinyint: -96
sp_int: 33 sp_tinyint: -95
sp_int: 34 sp_tinyint: -94
sp_int: 35 sp_tinyint: -93
sp_int: 36 sp_tinyint: -92
sp_int: 37 sp_tinyint: -91
sp_int: 38 sp_tinyint: -90
sp_int: 39 sp_tinyint: -89
sp_int: 40 sp_tinyint: -88
sp_int: 41 sp_tinyint: -87
sp_int: 42 sp_tinyint: -86
sp_int: 43 sp_tinyint: -85
sp_int: 44 sp_tinyint: -84
sp_int: 45 sp_tinyint: -83
sp_int: 46 sp_tinyint: -82
sp_int: 47 sp_tinyint: -81
sp_int: 48 sp_tinyint: -80
sp_int: 49 sp_tinyint: -79
sp_int: 50 sp_tinyint: -78
sp_int: 51 sp_tinyint: -77
sp_int: 52 sp_tinyint: -76
sp_int: 53 sp_tinyint: -75
sp_int: 54 sp_tinyint: -74
sp_int: 55 sp_tinyint: -73
sp_int: 56 sp_tinyint: -72
sp_int: 57 sp_tinyint: -71
sp_int: 58 sp_tinyint: -70
sp_int: 59 sp_tinyint: -69
sp_int: 60 sp_tinyint: -68
sp_int: 61 sp_tinyint: -67
sp_int: 62 sp_tinyint: -66
sp_int: 63 sp_tinyint: -65
sp_int: 64 sp_tinyint: -64
sp_int: 65 sp_tinyint: -63
sp_int: 66 sp_tinyint: -62
sp_int: 67 sp_tinyint: -61
sp_int: 68 sp_tinyint: -60
sp_int: 69 sp_tinyint: -59
sp_int: 70 sp_tinyint: -58
sp_int: 71 sp_tinyint: -57
sp_int: 72 sp_tinyint: -56
sp_int: 73 sp_tinyint: -55
sp_int: 74 sp_tinyint: -54
sp_int: 75 sp_tinyint: -53
sp_int: 76 sp_tinyint: -52
sp_int: 77 sp_tinyint: -51
sp_int: 78 sp_tinyint: -50
sp_int: 79 sp_tinyint: -49
sp_int: 80 sp_tinyint: -48
sp_int: 81 sp_tinyint: -47
sp_int: 82 sp_tinyint: -46
sp_int: 83 sp_tinyint: -45
sp_int: 84 sp_tinyint: -44
sp_int: 85 sp_tinyint: -43
sp_int: 86 sp_tinyint: -42
sp_int: 87 sp_tinyint: -41
sp_int: 88 sp_tinyint: -40
sp_int: 89 sp_tinyint: -39
sp_int: 90 sp_tinyint: -38
sp_int: 91 sp_tinyint: -37
sp_int: 92 sp_tinyint: -36
sp_int: 93 sp_tinyint: -35
sp_int: 94 sp_tinyint: -34
sp_int: 95 sp_tinyint: -33
sp_int: 96 sp_tinyint: -32
sp_int: 97 sp_tinyint: -31
sp_int: 98 sp_tinyint: -30
sp_int: 99 sp_tinyint: -29
sp_int: 100 sp_tinyint: -28
sp_int: 101 sp_tinyint: -27
sp_int: 102 sp_tinyint: -26
sp_int: 103 sp_tinyint: -25
sp_int: 104 sp_tinyint: -24
sp_int: 105 sp_tinyint: -23
sp_int: 106 sp_tinyint: -22
sp_int: 107 sp_tinyint: -21
sp_int: 108 sp_tinyint: -20
sp_int: 109 sp_tinyint: -19
sp_int: 110 sp_tinyint: -18
sp_int: 111 sp_tinyint: -17
sp_int: 112 sp_tinyint: -16
sp_int: 113 sp_tinyint: -15
sp_int: 114 sp_tinyint: -14
sp_int: 115 sp_tinyint: -13
sp_int: 116 sp_tinyint: -12
sp_int: 117 sp_tinyint: -11
sp_int: 118 sp_tinyint: -10
sp_int: 119 sp_tinyint: -9
sp_int: 120 sp_tinyint: -8
sp_int: 121 sp_tinyint: -7
sp_int: 122 sp_tinyint: -6
sp_int: 123 sp_tinyint: -5
sp_int: 124 sp_tinyint: -4
sp_int: 125 sp_tinyint: -3
sp_int: 126 sp_tinyint: -2
sp_int: 127 sp_tinyint: -1
sp_int: 128 sp_tinyint: 0
sp_int: 129 sp_tinyint: 1
sp_int: 130 sp_tinyint: 2
sp_int: 131 sp_tinyint: 3
sp_int: 132 sp_tinyint: 4
sp_int: 133 sp_tinyint: 5
sp_int: 134 sp_tinyint: 6
sp_int: 135 sp_tinyint: 7
sp_int: 136 sp_tinyint: 8
sp_int: 137 sp_tinyint: 9
sp_int: 138 sp_tinyint: 10
sp_int: 139 sp_tinyint: 11
sp_int: 140 sp_tinyint: 12
sp_int: 141 sp_tinyint: 13
sp_int: 142 sp_tinyint: 14
sp_int: 143 sp_tinyint: 15
sp_int: 144 sp_tinyint: 16
sp_int: 145 sp_tinyint: 17
sp_int: 146 sp_tinyint: 18
sp_int: 147 sp_tinyint: 19
sp_int: 148 sp_tinyint: 20
sp_int: 149 sp_tinyint: 21
sp_int: 150 sp_tinyint: 22
sp_int: 151 sp_tinyint: 23
sp_int: 152 sp_tinyint: 24
sp_int: 153 sp_tinyint: 25
sp_int: 154 sp_tinyint: 26
sp_int: 155 sp_tinyint: 27
sp_int: 156 sp_tinyint: 28
sp_int: 157 sp_tinyint: 29
sp_int: 158 sp_tinyint: 30
sp_int: 159 sp_tinyint: 31
sp_int: 160 sp_tinyint: 32
sp_int: 161 sp_tinyint: 33
sp_int: 162 sp_tinyint: 34
sp_int: 163 sp_tinyint: 35
sp_int: 164 sp_tinyint: 36
sp_int: 165 sp_tinyint: 37
sp_int: 166 sp_tinyint: 38
sp_int: 167 sp_tinyint: 39
sp_int: 168 sp_tinyint: 40
sp_int: 169 sp_tinyint: 41
sp_int: 170 sp_tinyint: 42
sp_int: 171 sp_tinyint: 43
sp_int: 172 sp_tinyint: 44
sp_int: 173 sp_tinyint: 45
sp_int: 174 sp_tinyint: 46
sp_int: 175 sp_tinyint: 47
sp_int: 176 sp_tinyint: 48
sp_int: 177 sp_tinyint: 49
sp_int: 178 sp_tinyint: 50
sp_int: 179 sp_tinyint: 51
sp_int: 180 sp_tinyint: 52
sp_int: 181 sp_tinyint: 53
sp_int: 182 sp_tinyint: 54
sp_int: 183 sp_tinyint: 55
sp_int: 184 sp_tinyint: 56
sp_int: 185 sp_tinyint: 57
sp_int: 186 sp_tinyint: 58
sp_int: 187 sp_tinyint: 59
sp_int: 188 sp_tinyint: 60
sp_int: 189 sp_tinyint: 61
sp_int: 190 sp_tinyint: 62
sp_int: 191 sp_tinyint: 63
sp_int: 192 sp_tinyint: 64
sp_int: 193 sp_tinyint: 65
sp_int: 194 sp_tinyint: 66
sp_int: 195 sp_tinyint: 67
sp_int: 196 sp_tinyint: 68
sp_int: 197 sp_tinyint: 69
sp_int: 198 sp_tinyint: 70
sp_int: 199 sp_tinyint: 71
sp_int: 200 sp_tinyint: 72
sp_int: 201 sp_tinyint: 73
sp_int: 202 sp_tinyint: 74
sp_int: 203 sp_tinyint: 75
sp_int: 204 sp_tinyint: 76
sp_int: 205 sp_tinyint: 77
sp_int: 206 sp_tinyint: 78
sp_int: 207 sp_tinyint: 79
sp_int: 208 sp_tinyint: 80
sp_int: 209 sp_tinyint: 81
sp_int: 210 sp_tinyint: 82
sp_int: 211 sp_tinyint: 83
sp_int: 212 sp_tinyint: 84
sp_int: 213 sp_tinyint: 85
sp_int: 214 sp_tinyint: 86
sp_int: 215 sp_tinyint: 87
sp_int: 216 sp_tinyint: 88
sp_int: 217 sp_tinyint: 89
sp_int: 218 sp_tinyint: 90
sp_int: 219 sp_tinyint: 91
sp_int: 220 sp_tinyint: 92
sp_int: 221 sp_tinyint: 93
sp_int: 222 sp_tinyint: 94
sp_int: 223 sp_tinyint: 95
sp_int: 224 sp_tinyint: 96
sp_int: 225 sp_tinyint: 97
sp_int: 226 sp_tinyint: 98
sp_int: 227 sp_tinyint: 99
sp_int: 228 sp_tinyint: 100
sp_int: 229 sp_tinyint: 101
sp_int: 230 sp_tinyint: 102
sp_int: 231 sp_tinyint: 103
sp_int: 232 sp_tinyint: 104
sp_int: 233 sp_tinyint: 105
sp_int: 234 sp_tinyint: 106
sp_int: 235 sp_tinyint: 107
sp_int: 236 sp_tinyint: 108
sp_int: 237 sp_tinyint: 109
sp_int: 238 sp_tinyint: 110
sp_int: 239 sp_tinyint: 111
sp_int: 240 sp_tinyint: 112
sp_int: 241 sp_tinyint: 113
sp_int: 242 sp_tinyint: 114
sp_int: 243 sp_tinyint: 115
sp_int: 244 sp_tinyint: 116
sp_int: 245 sp_tinyint: 117
sp_int: 246 sp_tinyint: 118
sp_int: 247 sp_tinyint: 119
sp_int: 248 sp_tinyint: 120
sp_int: 249 sp_tinyint: 121
sp_int: 250 sp_tinyint: 122
sp_int: 251 sp_tinyint: 123
sp_int: 252 sp_tinyint: 124
sp_int: 253 sp_tinyint: 125
sp_int: 254 sp_tinyint: 126
sp_int: 255 sp_tinyint: 127

sp_int: 0 sp_tinyint: -128 Cint(R['sp_tinyint']) -128
sp_int: 1 sp_tinyint: -127 Cint(R['sp_tinyint']) -127
sp_int: 2 sp_tinyint: -126 Cint(R['sp_tinyint']) -126
sp_int: 3 sp_tinyint: -125 Cint(R['sp_tinyint']) -125
sp_int: 4 sp_tinyint: -124 Cint(R['sp_tinyint']) -124
sp_int: 5 sp_tinyint: -123 Cint(R['sp_tinyint']) -123
sp_int: 6 sp_tinyint: -122 Cint(R['sp_tinyint']) -122
sp_int: 7 sp_tinyint: -121 Cint(R['sp_tinyint']) -121
sp_int: 8 sp_tinyint: -120 Cint(R['sp_tinyint']) -120
sp_int: 9 sp_tinyint: -119 Cint(R['sp_tinyint']) -119
sp_int: 10 sp_tinyint: -118 Cint(R['sp_tinyint']) -118
sp_int: 11 sp_tinyint: -117 Cint(R['sp_tinyint']) -117
sp_int: 12 sp_tinyint: -116 Cint(R['sp_tinyint']) -116
sp_int: 13 sp_tinyint: -115 Cint(R['sp_tinyint']) -115
sp_int: 14 sp_tinyint: -114 Cint(R['sp_tinyint']) -114
sp_int: 15 sp_tinyint: -113 Cint(R['sp_tinyint']) -113
sp_int: 16 sp_tinyint: -112 Cint(R['sp_tinyint']) -112
sp_int: 17 sp_tinyint: -111 Cint(R['sp_tinyint']) -111
sp_int: 18 sp_tinyint: -110 Cint(R['sp_tinyint']) -110
sp_int: 19 sp_tinyint: -109 Cint(R['sp_tinyint']) -109
sp_int: 20 sp_tinyint: -108 Cint(R['sp_tinyint']) -108
sp_int: 21 sp_tinyint: -107 Cint(R['sp_tinyint']) -107
sp_int: 22 sp_tinyint: -106 Cint(R['sp_tinyint']) -106
sp_int: 23 sp_tinyint: -105 Cint(R['sp_tinyint']) -105
sp_int: 24 sp_tinyint: -104 Cint(R['sp_tinyint']) -104
sp_int: 25 sp_tinyint: -103 Cint(R['sp_tinyint']) -103
sp_int: 26 sp_tinyint: -102 Cint(R['sp_tinyint']) -102
sp_int: 27 sp_tinyint: -101 Cint(R['sp_tinyint']) -101
sp_int: 28 sp_tinyint: -100 Cint(R['sp_tinyint']) -100
sp_int: 29 sp_tinyint: -99 Cint(R['sp_tinyint']) -99
sp_int: 30 sp_tinyint: -98 Cint(R['sp_tinyint']) -98
sp_int: 31 sp_tinyint: -97 Cint(R['sp_tinyint']) -97
sp_int: 32 sp_tinyint: -96 Cint(R['sp_tinyint']) -96
sp_int: 33 sp_tinyint: -95 Cint(R['sp_tinyint']) -95
sp_int: 34 sp_tinyint: -94 Cint(R['sp_tinyint']) -94
sp_int: 35 sp_tinyint: -93 Cint(R['sp_tinyint']) -93
sp_int: 36 sp_tinyint: -92 Cint(R['sp_tinyint']) -92
sp_int: 37 sp_tinyint: -91 Cint(R['sp_tinyint']) -91
sp_int: 38 sp_tinyint: -90 Cint(R['sp_tinyint']) -90
sp_int: 39 sp_tinyint: -89 Cint(R['sp_tinyint']) -89
sp_int: 40 sp_tinyint: -88 Cint(R['sp_tinyint']) -88
sp_int: 41 sp_tinyint: -87 Cint(R['sp_tinyint']) -87
sp_int: 42 sp_tinyint: -86 Cint(R['sp_tinyint']) -86
sp_int: 43 sp_tinyint: -85 Cint(R['sp_tinyint']) -85
sp_int: 44 sp_tinyint: -84 Cint(R['sp_tinyint']) -84
sp_int: 45 sp_tinyint: -83 Cint(R['sp_tinyint']) -83
sp_int: 46 sp_tinyint: -82 Cint(R['sp_tinyint']) -82
sp_int: 47 sp_tinyint: -81 Cint(R['sp_tinyint']) -81
sp_int: 48 sp_tinyint: -80 Cint(R['sp_tinyint']) -80
sp_int: 49 sp_tinyint: -79 Cint(R['sp_tinyint']) -79
sp_int: 50 sp_tinyint: -78 Cint(R['sp_tinyint']) -78
sp_int: 51 sp_tinyint: -77 Cint(R['sp_tinyint']) -77
sp_int: 52 sp_tinyint: -76 Cint(R['sp_tinyint']) -76
sp_int: 53 sp_tinyint: -75 Cint(R['sp_tinyint']) -75
sp_int: 54 sp_tinyint: -74 Cint(R['sp_tinyint']) -74
sp_int: 55 sp_tinyint: -73 Cint(R['sp_tinyint']) -73
sp_int: 56 sp_tinyint: -72 Cint(R['sp_tinyint']) -72
sp_int: 57 sp_tinyint: -71 Cint(R['sp_tinyint']) -71
sp_int: 58 sp_tinyint: -70 Cint(R['sp_tinyint']) -70
sp_int: 59 sp_tinyint: -69 Cint(R['sp_tinyint']) -69
sp_int: 60 sp_tinyint: -68 Cint(R['sp_tinyint']) -68
sp_int: 61 sp_tinyint: -67 Cint(R['sp_tinyint']) -67
sp_int: 62 sp_tinyint: -66 Cint(R['sp_tinyint']) -66
sp_int: 63 sp_tinyint: -65 Cint(R['sp_tinyint']) -65
sp_int: 64 sp_tinyint: -64 Cint(R['sp_tinyint']) -64
sp_int: 65 sp_tinyint: -63 Cint(R['sp_tinyint']) -63
sp_int: 66 sp_tinyint: -62 Cint(R['sp_tinyint']) -62
sp_int: 67 sp_tinyint: -61 Cint(R['sp_tinyint']) -61
sp_int: 68 sp_tinyint: -60 Cint(R['sp_tinyint']) -60
sp_int: 69 sp_tinyint: -59 Cint(R['sp_tinyint']) -59
sp_int: 70 sp_tinyint: -58 Cint(R['sp_tinyint']) -58
sp_int: 71 sp_tinyint: -57 Cint(R['sp_tinyint']) -57
sp_int: 72 sp_tinyint: -56 Cint(R['sp_tinyint']) -56
sp_int: 73 sp_tinyint: -55 Cint(R['sp_tinyint']) -55
sp_int: 74 sp_tinyint: -54 Cint(R['sp_tinyint']) -54
sp_int: 75 sp_tinyint: -53 Cint(R['sp_tinyint']) -53
sp_int: 76 sp_tinyint: -52 Cint(R['sp_tinyint']) -52
sp_int: 77 sp_tinyint: -51 Cint(R['sp_tinyint']) -51
sp_int: 78 sp_tinyint: -50 Cint(R['sp_tinyint']) -50
sp_int: 79 sp_tinyint: -49 Cint(R['sp_tinyint']) -49
sp_int: 80 sp_tinyint: -48 Cint(R['sp_tinyint']) -48
sp_int: 81 sp_tinyint: -47 Cint(R['sp_tinyint']) -47
sp_int: 82 sp_tinyint: -46 Cint(R['sp_tinyint']) -46
sp_int: 83 sp_tinyint: -45 Cint(R['sp_tinyint']) -45
sp_int: 84 sp_tinyint: -44 Cint(R['sp_tinyint']) -44
sp_int: 85 sp_tinyint: -43 Cint(R['sp_tinyint']) -43
sp_int: 86 sp_tinyint: -42 Cint(R['sp_tinyint']) -42
sp_int: 87 sp_tinyint: -41 Cint(R['sp_tinyint']) -41
sp_int: 88 sp_tinyint: -40 Cint(R['sp_tinyint']) -40
sp_int: 89 sp_tinyint: -39 Cint(R['sp_tinyint']) -39
sp_int: 90 sp_tinyint: -38 Cint(R['sp_tinyint']) -38
sp_int: 91 sp_tinyint: -37 Cint(R['sp_tinyint']) -37
sp_int: 92 sp_tinyint: -36 Cint(R['sp_tinyint']) -36
sp_int: 93 sp_tinyint: -35 Cint(R['sp_tinyint']) -35
sp_int: 94 sp_tinyint: -34 Cint(R['sp_tinyint']) -34
sp_int: 95 sp_tinyint: -33 Cint(R['sp_tinyint']) -33
sp_int: 96 sp_tinyint: -32 Cint(R['sp_tinyint']) -32
sp_int: 97 sp_tinyint: -31 Cint(R['sp_tinyint']) -31
sp_int: 98 sp_tinyint: -30 Cint(R['sp_tinyint']) -30
sp_int: 99 sp_tinyint: -29 Cint(R['sp_tinyint']) -29
sp_int: 100 sp_tinyint: -28 Cint(R['sp_tinyint']) -28
sp_int: 101 sp_tinyint: -27 Cint(R['sp_tinyint']) -27
sp_int: 102 sp_tinyint: -26 Cint(R['sp_tinyint']) -26
sp_int: 103 sp_tinyint: -25 Cint(R['sp_tinyint']) -25
sp_int: 104 sp_tinyint: -24 Cint(R['sp_tinyint']) -24
sp_int: 105 sp_tinyint: -23 Cint(R['sp_tinyint']) -23
sp_int: 106 sp_tinyint: -22 Cint(R['sp_tinyint']) -22
sp_int: 107 sp_tinyint: -21 Cint(R['sp_tinyint']) -21
sp_int: 108 sp_tinyint: -20 Cint(R['sp_tinyint']) -20
sp_int: 109 sp_tinyint: -19 Cint(R['sp_tinyint']) -19
sp_int: 110 sp_tinyint: -18 Cint(R['sp_tinyint']) -18
sp_int: 111 sp_tinyint: -17 Cint(R['sp_tinyint']) -17
sp_int: 112 sp_tinyint: -16 Cint(R['sp_tinyint']) -16
sp_int: 113 sp_tinyint: -15 Cint(R['sp_tinyint']) -15
sp_int: 114 sp_tinyint: -14 Cint(R['sp_tinyint']) -14
sp_int: 115 sp_tinyint: -13 Cint(R['sp_tinyint']) -13
sp_int: 116 sp_tinyint: -12 Cint(R['sp_tinyint']) -12
sp_int: 117 sp_tinyint: -11 Cint(R['sp_tinyint']) -11
sp_int: 118 sp_tinyint: -10 Cint(R['sp_tinyint']) -10
sp_int: 119 sp_tinyint: -9 Cint(R['sp_tinyint']) -9
sp_int: 120 sp_tinyint: -8 Cint(R['sp_tinyint']) -8
sp_int: 121 sp_tinyint: -7 Cint(R['sp_tinyint']) -7
sp_int: 122 sp_tinyint: -6 Cint(R['sp_tinyint']) -6
sp_int: 123 sp_tinyint: -5 Cint(R['sp_tinyint']) -5
sp_int: 124 sp_tinyint: -4 Cint(R['sp_tinyint']) -4
sp_int: 125 sp_tinyint: -3 Cint(R['sp_tinyint']) -3
sp_int: 126 sp_tinyint: -2 Cint(R['sp_tinyint']) -2
sp_int: 127 sp_tinyint: -1 Cint(R['sp_tinyint']) -1
sp_int: 128 sp_tinyint: False Cint(R['sp_tinyint']) 0
sp_int: 129 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 130 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 131 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 132 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 133 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 134 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 135 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 136 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 137 sp_tinyint: True Cint(R['sp_tinyint']) -1
sp_int: 138 sp_tinyint: 10 Cint(R['sp_tinyint']) 10
sp_int: 139 sp_tinyint: 11 Cint(R['sp_tinyint']) 11
sp_int: 140 sp_tinyint: 12 Cint(R['sp_tinyint']) 12
sp_int: 141 sp_tinyint: 13 Cint(R['sp_tinyint']) 13
sp_int: 142 sp_tinyint: 14 Cint(R['sp_tinyint']) 14
sp_int: 143 sp_tinyint: 15 Cint(R['sp_tinyint']) 15
sp_int: 144 sp_tinyint: 16 Cint(R['sp_tinyint']) 16
sp_int: 145 sp_tinyint: 17 Cint(R['sp_tinyint']) 17
sp_int: 146 sp_tinyint: 18 Cint(R['sp_tinyint']) 18
sp_int: 147 sp_tinyint: 19 Cint(R['sp_tinyint']) 19
sp_int: 148 sp_tinyint: 20 Cint(R['sp_tinyint']) 20
sp_int: 149 sp_tinyint: 21 Cint(R['sp_tinyint']) 21
sp_int: 150 sp_tinyint: 22 Cint(R['sp_tinyint']) 22
sp_int: 151 sp_tinyint: 23 Cint(R['sp_tinyint']) 23
sp_int: 152 sp_tinyint: 24 Cint(R['sp_tinyint']) 24
sp_int: 153 sp_tinyint: 25 Cint(R['sp_tinyint']) 25
sp_int: 154 sp_tinyint: 26 Cint(R['sp_tinyint']) 26
sp_int: 155 sp_tinyint: 27 Cint(R['sp_tinyint']) 27
sp_int: 156 sp_tinyint: 28 Cint(R['sp_tinyint']) 28
sp_int: 157 sp_tinyint: 29 Cint(R['sp_tinyint']) 29
sp_int: 158 sp_tinyint: 30 Cint(R['sp_tinyint']) 30
sp_int: 159 sp_tinyint: 31 Cint(R['sp_tinyint']) 31
sp_int: 160 sp_tinyint: 32 Cint(R['sp_tinyint']) 32
sp_int: 161 sp_tinyint: 33 Cint(R['sp_tinyint']) 33
sp_int: 162 sp_tinyint: 34 Cint(R['sp_tinyint']) 34
sp_int: 163 sp_tinyint: 35 Cint(R['sp_tinyint']) 35
sp_int: 164 sp_tinyint: 36 Cint(R['sp_tinyint']) 36
sp_int: 165 sp_tinyint: 37 Cint(R['sp_tinyint']) 37
sp_int: 166 sp_tinyint: 38 Cint(R['sp_tinyint']) 38
sp_int: 167 sp_tinyint: 39 Cint(R['sp_tinyint']) 39
sp_int: 168 sp_tinyint: 40 Cint(R['sp_tinyint']) 40
sp_int: 169 sp_tinyint: 41 Cint(R['sp_tinyint']) 41
sp_int: 170 sp_tinyint: 42 Cint(R['sp_tinyint']) 42
sp_int: 171 sp_tinyint: 43 Cint(R['sp_tinyint']) 43
sp_int: 172 sp_tinyint: 44 Cint(R['sp_tinyint']) 44
sp_int: 173 sp_tinyint: 45 Cint(R['sp_tinyint']) 45
sp_int: 174 sp_tinyint: 46 Cint(R['sp_tinyint']) 46
sp_int: 175 sp_tinyint: 47 Cint(R['sp_tinyint']) 47
sp_int: 176 sp_tinyint: 48 Cint(R['sp_tinyint']) 48
sp_int: 177 sp_tinyint: 49 Cint(R['sp_tinyint']) 49
sp_int: 178 sp_tinyint: 50 Cint(R['sp_tinyint']) 50
sp_int: 179 sp_tinyint: 51 Cint(R['sp_tinyint']) 51
sp_int: 180 sp_tinyint: 52 Cint(R['sp_tinyint']) 52
sp_int: 181 sp_tinyint: 53 Cint(R['sp_tinyint']) 53
sp_int: 182 sp_tinyint: 54 Cint(R['sp_tinyint']) 54
sp_int: 183 sp_tinyint: 55 Cint(R['sp_tinyint']) 55
sp_int: 184 sp_tinyint: 56 Cint(R['sp_tinyint']) 56
sp_int: 185 sp_tinyint: 57 Cint(R['sp_tinyint']) 57
sp_int: 186 sp_tinyint: 58 Cint(R['sp_tinyint']) 58
sp_int: 187 sp_tinyint: 59 Cint(R['sp_tinyint']) 59
sp_int: 188 sp_tinyint: 60 Cint(R['sp_tinyint']) 60
sp_int: 189 sp_tinyint: 61 Cint(R['sp_tinyint']) 61
sp_int: 190 sp_tinyint: 62 Cint(R['sp_tinyint']) 62
sp_int: 191 sp_tinyint: 63 Cint(R['sp_tinyint']) 63
sp_int: 192 sp_tinyint: 64 Cint(R['sp_tinyint']) 64
sp_int: 193 sp_tinyint: 65 Cint(R['sp_tinyint']) 65
sp_int: 194 sp_tinyint: 66 Cint(R['sp_tinyint']) 66
sp_int: 195 sp_tinyint: 67 Cint(R['sp_tinyint']) 67
sp_int: 196 sp_tinyint: 68 Cint(R['sp_tinyint']) 68
sp_int: 197 sp_tinyint: 69 Cint(R['sp_tinyint']) 69
sp_int: 198 sp_tinyint: 70 Cint(R['sp_tinyint']) 70
sp_int: 199 sp_tinyint: 71 Cint(R['sp_tinyint']) 71
sp_int: 200 sp_tinyint: 72 Cint(R['sp_tinyint']) 72
sp_int: 201 sp_tinyint: 73 Cint(R['sp_tinyint']) 73
sp_int: 202 sp_tinyint: 74 Cint(R['sp_tinyint']) 74
sp_int: 203 sp_tinyint: 75 Cint(R['sp_tinyint']) 75
sp_int: 204 sp_tinyint: 76 Cint(R['sp_tinyint']) 76
sp_int: 205 sp_tinyint: 77 Cint(R['sp_tinyint']) 77
sp_int: 206 sp_tinyint: 78 Cint(R['sp_tinyint']) 78
sp_int: 207 sp_tinyint: 79 Cint(R['sp_tinyint']) 79
sp_int: 208 sp_tinyint: 80 Cint(R['sp_tinyint']) 80
sp_int: 209 sp_tinyint: 81 Cint(R['sp_tinyint']) 81
sp_int: 210 sp_tinyint: 82 Cint(R['sp_tinyint']) 82
sp_int: 211 sp_tinyint: 83 Cint(R['sp_tinyint']) 83
sp_int: 212 sp_tinyint: 84 Cint(R['sp_tinyint']) 84
sp_int: 213 sp_tinyint: 85 Cint(R['sp_tinyint']) 85
sp_int: 214 sp_tinyint: 86 Cint(R['sp_tinyint']) 86
sp_int: 215 sp_tinyint: 87 Cint(R['sp_tinyint']) 87
sp_int: 216 sp_tinyint: 88 Cint(R['sp_tinyint']) 88
sp_int: 217 sp_tinyint: 89 Cint(R['sp_tinyint']) 89
sp_int: 218 sp_tinyint: 90 Cint(R['sp_tinyint']) 90
sp_int: 219 sp_tinyint: 91 Cint(R['sp_tinyint']) 91
sp_int: 220 sp_tinyint: 92 Cint(R['sp_tinyint']) 92
sp_int: 221 sp_tinyint: 93 Cint(R['sp_tinyint']) 93
sp_int: 222 sp_tinyint: 94 Cint(R['sp_tinyint']) 94
sp_int: 223 sp_tinyint: 95 Cint(R['sp_tinyint']) 95
sp_int: 224 sp_tinyint: 96 Cint(R['sp_tinyint']) 96
sp_int: 225 sp_tinyint: 97 Cint(R['sp_tinyint']) 97
sp_int: 226 sp_tinyint: 98 Cint(R['sp_tinyint']) 98
sp_int: 227 sp_tinyint: 99 Cint(R['sp_tinyint']) 99
sp_int: 228 sp_tinyint: 100 Cint(R['sp_tinyint']) 100
sp_int: 229 sp_tinyint: 101 Cint(R['sp_tinyint']) 101
sp_int: 230 sp_tinyint: 102 Cint(R['sp_tinyint']) 102
sp_int: 231 sp_tinyint: 103 Cint(R['sp_tinyint']) 103
sp_int: 232 sp_tinyint: 104 Cint(R['sp_tinyint']) 104
sp_int: 233 sp_tinyint: 105 Cint(R['sp_tinyint']) 105
sp_int: 234 sp_tinyint: 106 Cint(R['sp_tinyint']) 106
sp_int: 235 sp_tinyint: 107 Cint(R['sp_tinyint']) 107
sp_int: 236 sp_tinyint: 108 Cint(R['sp_tinyint']) 108
sp_int: 237 sp_tinyint: 109 Cint(R['sp_tinyint']) 109
sp_int: 238 sp_tinyint: 110 Cint(R['sp_tinyint']) 110
sp_int: 239 sp_tinyint: 111 Cint(R['sp_tinyint']) 111
sp_int: 240 sp_tinyint: 112 Cint(R['sp_tinyint']) 112
sp_int: 241 sp_tinyint: 113 Cint(R['sp_tinyint']) 113
sp_int: 242 sp_tinyint: 114 Cint(R['sp_tinyint']) 114
sp_int: 243 sp_tinyint: 115 Cint(R['sp_tinyint']) 115
sp_int: 244 sp_tinyint: 116 Cint(R['sp_tinyint']) 116
sp_int: 245 sp_tinyint: 117 Cint(R['sp_tinyint']) 117
sp_int: 246 sp_tinyint: 118 Cint(R['sp_tinyint']) 118
sp_int: 247 sp_tinyint: 119 Cint(R['sp_tinyint']) 119
sp_int: 248 sp_tinyint: 120 Cint(R['sp_tinyint']) 120
sp_int: 249 sp_tinyint: 121 Cint(R['sp_tinyint']) 121
sp_int: 250 sp_tinyint: 122 Cint(R['sp_tinyint']) 122
sp_int: 251 sp_tinyint: 123 Cint(R['sp_tinyint']) 123
sp_int: 252 sp_tinyint: 124 Cint(R['sp_tinyint']) 124
sp_int: 253 sp_tinyint: 125 Cint(R['sp_tinyint']) 125
sp_int: 254 sp_tinyint: 126 Cint(R['sp_tinyint']) 126
sp_int: 255 sp_tinyint: 127 Cint(R['sp_tinyint']) 127


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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Di 4. Dez 2018, 10:52

Ich wollte nur wissen, was in der Tabelle drin steht. Also, es steht richtig drin, nur schaffst du es in deinem Programmkonstrukt, aus Integer Boolean zu machen.

Deine Verwendung von Cint ist sinnlos, auch die anderen Umwandlungen mit Cstr sind absolut unnötig. Cint ist für etwas anders da, als du es verwendest:
http://gambaswiki.org/wiki/lang/cint

Wenn du weißt, dass in der DB Tabelle Integer steht (ob Smallint, Tinyint oder was auch immer), verwende in Gambas eine Integer Variable und fülle die.
gambas code
Dim i as Integer
Dim R as Result

' Datenbankabfrage
' ...

i = R!sp_tinyint

Print i
Print "Jetzt verwende Integer innerhalb eines String, kucke hier: " & i

Und nebenbei, ich habe kein "Feld" eingelesen, sondern ein Datenbank Result erzeugt. Ein Result ist eine Repräsentation des Ergebnisses einer Abfrage an die Datenbank im Arbeitsspeicher:

http://gambaswiki.org/wiki/comp/gb.db/result

Ein Result ist ein relativ komplexes Objekt. Wenn du die Werte einer DB-Tabelle auslesen und weiter verarbeiten möchtest, ist es nicht sinnvoll, für jede Zeile in einer Schleife eine separate Abfrage an die DB zu starten und das Ergebnis in ein Result zu packen, das dann bei der nächsten Zeile wieder überschrieben wird. Stattdessen ist es sinnvoll, die benötigten Werte aus der DB mit einer einzigen Abfrage auszulesen, sie in ein Result zu packen und dann in einer Schleife das Resultobjekt auszulesen bzw die Werte darin weiter zu verarbeiten.

Dass es also viel einfacher geht und wie, habe ich Dir gezeigt.

Ich meine du kannst das natürlich weiter so machen, das sei dir unbenommen. Es ist "von Hinten durch die Brust ins Auge" und Computer sind geduldig.

Ich sage das aber, weil hier auch Leute mitlesen, die noch lernen, und die von deinem Code völlig in die Irre geführt werden können, wenn sie denken "Oh, so fragt man also eine Tabelle ab".
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Di 4. Dez 2018, 15:02

Hallo 4tionov,

Was meinst du mit
...schaffst du es in deinem Programmkonstrukt, aus Integer Boolean zu machen...
??

Leider liegst du mit deinem Vorschlag falsch, denn auch dein Code mit dem Ausrufezeichen liefert nur -1 in der Variablen i ab, wenn tatsächlich eine Zahl zwischen 1 und 9 in der Datenbank steht. (Du "schaffst" also genau dasselbe wie ich.)

Entscheidend ist offenbar, ob die sql-Abfrage ein "WHERE" enthält, so dass dann nur ein einziger Wert an R übermittelt wird, bei dem die WHERE-Bedingung erfüllt ist. Wenn der Antwort-Wert zwischen 0 und 9 liegt, also einstellig ist, wird die Antwort der Datenbank unsinnig (als BOOLEAN?) interpretiert, obwohl ihr Inhalt nach wie vor ein Integer vom Typ tinyint ist.

Es geht also um die Größe des aus der Datenbank ausgewählten und übertragenen Teils der Datenbank mittels WHERE.

Soweit mal meine Erkenntnisse aus den Tests.

Viele Grüße
Hans35

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Di 4. Dez 2018, 16:43

Hans35 hat geschrieben:
Di 4. Dez 2018, 15:02
Leider liegst du mit deinem Vorschlag falsch, denn auch dein Code mit dem Ausrufezeichen liefert nur -1 in der Variablen i ab, wenn tatsächlich eine Zahl zwischen 1 und 9 in der Datenbank steht. (Du "schaffst" also genau dasselbe wie ich.)
Nein, denn hier ist es richtig:

Code: Alles auswählen

sp_int: 127 sp_tinyint: -1
sp_int: 128 sp_tinyint: 0
sp_int: 129 sp_tinyint: 1
sp_int: 130 sp_tinyint: 2
sp_int: 131 sp_tinyint: 3
sp_int: 132 sp_tinyint: 4
sp_int: 133 sp_tinyint: 5
sp_int: 134 sp_tinyint: 6
sp_int: 135 sp_tinyint: 7
sp_int: 136 sp_tinyint: 8
sp_int: 137 sp_tinyint: 9
sp_int: 138 sp_tinyint: 10
sp_int: 139 sp_tinyint: 11
Entscheidend ist offenbar, ob die sql-Abfrage ein "WHERE" enthält, so dass dann nur ein einziger Wert an R übermittelt wird, bei dem die WHERE-Bedingung erfüllt ist. Wenn der Antwort-Wert zwischen 0 und 9 liegt, also einstellig ist, wird die Antwort der Datenbank unsinnig (als BOOLEAN?) interpretiert, obwohl ihr Inhalt nach wie vor ein Integer vom Typ tinyint ist.
Auch nein. Lass einfach mal das Cint weg. Das produziert den Fehler.

Du veränderst das Ergebnis der Abfrage, indem Du gambas code
CInt(R["sp_tinyint"])
verwendest.

Was soll das CInt für einen Grund haben? Wofür brauchst du das? Schreibe einfach gambas code
R!sp_tinyint
und probiere noch mal.

R!sp_tinyint ist einfach eine einfachere Schreibweise für R["sp_tinyint"].
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Di 4. Dez 2018, 17:39

Du glaubst es noch immer nicht? Es hat nichts mit CInt zu tun!
Hier nochmal, vielleicht überzeugt dich diese Fassung: gambas code
' Gambas class file

'test von tinyint

     Public $Con As New Connection
        
     Public Sub Form_Open()
        Dim i, j, k, l As Integer
        Dim sql As String
        Dim R As Result
        Dim s As String
        
        Dim intTest As Integer
        intTest = -5
        
        $Con.Type = "MySql"
        $Con.Port = "3306"
        $Con.Name = "test"
        $Con.Host = "192.168.1.7"
        $Con.Login = "hans"
        $Con.Password = "myPassword"
        
        Try $Con.open
        If Error Then Message(Error.text)
                          
        For k = 0 To 255
           sql = "update tabtest set sp_tinyint=" & CStr(k - 128) & " where sp_int=" & CStr(k) & ";"
           Try $Con.Exec(sql)
           If Error Then Message(Error.text)
        Next
        
        sql = "select sp_int, sp_tinyint from tabtest order by sp_int;"
        R = $Con.Exec(sql)
 
        For Each R
           'Print "sp_int:";; R!sp_int;; "sp_tinyint:";; R!sp_tinyint
           
           If R!sp_int == 132 Then
             '================
              l = R!sp_tinyint
             '================
           Endif
        Next
            
        Print ""
        
        sql = "select * from tabtest WHERE sp_int=132;"
        '                            =====
        R = $Con.Exec(sql)
           
       '===================
        i = R["sp_tinyint"]
        j = R!sp_tinyint
       '===================
        
        Print "l = ";; l;; "i = ";; i;; "j = ";; j
              
        $Con.Close()
     End Sub

Das bringt folgende Ausgabe:

Code: Alles auswählen


l =  4 i =  -1 j =  -1

Wirklich! Ich kann's ja auch nicht glauben.

CInt war nur mein hilfloser Versuch, doch noch an die richtigen Daten zu kommen, wenn die Sache durch WHERE bereits vermurkst ist.

Im Übrigen kann ich die Abfrage mit WHERE nur dann für unterschiedliche Daten durchtesten, wenn ich sie in eine FOR-Schleife schreibe. Im richtigen Programm brauche ich dann natürlich keine Schleife für alle Hausnummern, sondern nur die Hausnummer von INGE, wenn ich zu der will. Und die soll dann 4 und nicht -1 sein! Die Schleifen zum Testen haben mit schlechtem Programmierstil wirklich nichts zu tun!

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Di 4. Dez 2018, 23:57

Ok, danke du hast recht. Ich hatte das Problem, dass ich deinen Code nicht richtig lesen konnte. :-)

Ich habe es mal kurz in Sqlite nachgebaut:
gambas code
' Gambas module file

Public Sub Main()

    Dim k As Integer
    Dim con As New Connection
    Dim qry As String
    Dim res As Result

    With con
        .Type = "sqlite"
        .Host = "test"
        .Open
    End With

    qry = "create table test (k integer, ti tinyint);"
    con.Exec(qry)

    ' ------------------------------------------------- Tabelle füllen

    For k = 0 To 255
        qry = "insert into test (k, ti) values (" & k & ", " & CStr(k - 128) & ");"
        con.Exec(qry)
    Next

    ' ------------------------------------------------- Test
    qry = "select ti from test  where k = 132;"
    res = con.Exec(qry)

    qry = "select ti from test where ti > -5 and ti  < 5 order by ti;"
    res = con.Exec(qry)
    For Each res
        Print "ti:";; res!ti;; "- CInt(res!ti):";; CInt(res!ti)
    Next

Catch
    Print Error.Text

End
Gibt aus:

Code: Alles auswählen

ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
ti: False - CInt(res!ti): 0
ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
ti: True - CInt(res!ti): -1
Tinyint wird in Gambas als Repräsentation von Boolean angesehen (False = 0, alles andere ist True):

https://lists.gambas-basic.org/pipermai ... 17710.html

Daran hat sich wohl seit 2008 nicht geändert.
Alles Gute,

4tionov

Hans35
Foriker
Beiträge: 13
Registriert: Mo 3. Dez 2018, 15:40
Kontaktdaten:

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von Hans35 » Mi 5. Dez 2018, 00:50

Tinyint wird in Gambas als Repräsentation von Boolean angesehen
Wenn das so wäre, genauer: wenn das immer so wäre, dann wäre es ja gut. Aber der Datentyp (Integer oder Boolean) ist ja variabel! Wenn in der Datenbank die Zahl 12 als Tinyint abgespeichert wird, dann wird dieser Wert, wenn er gelesen wird, als Integer wiedergegeben. Wird da nun 4 abgezogen, so ist das Ergebnis nicht 12-4 = 8, sondern TRUE. Das aber auch nur, bei einer Abfrage mit WHERE. Ohne WHERE bleibt er Integer, und damit 8.

Und wenn man voher nicht weiß, was in der Datenbank enthalten ist (ob der abgefragte Wert zwischen 0 und 9 liegt oder nicht), dann ist der Datentyp ungewiss, und die Zeile 45 in deinem Code erzeugt manchmal die Fehlermeldung und manchmal nicht, je nachdem, ob zuvor in die Datenbank an der betreffenden Stelle eine 4 oder eine 44 eingetragen wurde.

So wie das gemacht ist, ist es, denke ich, für keine vernünftige Anwendung zu gebrauchen.

Mir ist unklar, ob jemand damit irgendetwas Sinnvolles beabsichtigt hat, oder ob das einfach nur ein Bug ist, der möglichst bald behoben werden sollte.

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

Re: Zugriff auf MariaDB 5, Datentyp tinyint

Beitrag von tionov » Mi 5. Dez 2018, 08:22

Zeile 44 gibt es nicht mehr, parallel zu deinem Posting hatte ich meines noch geändert.

Ich habe jetzt keine Zeit, es in Mysql/Mariadb nachzubauen, in Sqlite gibt Gambas das Erwartete aus. Da gibt es auch nicht den von Dir beschriebenen Fehler.

Dein erstes Beispiel war stark verwirrend, Fehlerbehandlung, die unnötige Verwendung von Konvertierungsfunktionen machen es schwierig, das nachzuvollziehen. Ich war auch ursprünglich sofort der Meinung, der Fehler müsse irgendwo in deinem Programmkonstrukt liegen, also wahrscheinlich bei den Konvertierungen (CStr/CInt) zu finden sein.

Versuche bitte, den Code so einzudampfen, dass er das absolute Minimum darstellt, das nötig ist, um den Fehler darzustellen. Das könnte tatsächlich ein Bug sein, dann muss er gemeldet werden, damit er gefixt werden kann. Aber das kann nur sinnvoll gemeldet werden, wenn alles Unnötige weg ist.

Verwende auch Sql "create table", wie gezeigt, damit die Umgebung beim testen identisch ist. Nenne die Versionen von Gambas und Mariadb, vielleicht ist es auch ein Fehler von Mariadb, wer weiß ...

Kannst du English? Dann könntest Du das in der Gambas Mailingliste vortragen, da liest Benoît mit.
Alles Gute,

4tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast