MySQL Type "L" [erledigt]

Alles zum PostgreSQL-Server

Moderator: Moderatoren

MySQL Type "L" [erledigt]

Beitragvon AUGE_OHR » Mo, 22. Sep 2014 21:40

hi,

ich finde nicht das Gegenstück wobei ich nach BOOL gesucht habe.

nun habe ich das in Hectors Code gefunden ... aber was ist MYSQL_TINY_TYPE ?
Code: Alles auswählen
FUNCTION FieldType(nNum)
local cTypeXbase := "U"

   if nNum >=0
      do case
         case nNum == MYSQL_TINY_TYPE
              cTypeXbase := "L"

         case nNum == MYSQL_SHORT_TYPE      .OR.;
              nNum == MYSQL_TINY_TYPE       .OR.;
              ...
              nNum == MYSQL_INT24_TYPE
              cTypeXbase := "N"
wenn ich z.b.
Code: Alles auswählen
`xxxx` tinyint(1) NOT NULL default '0',
wäre es ein numerischer Wert (0/1)
Zuletzt geändert von AUGE_OHR am Di, 23. Sep 2014 19:45, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10206
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: MySQL Type "L"

Beitragvon georg » Di, 23. Sep 2014 3:34

Hallo, Jimmy -


MySQL bildet BOOL als TinyInt ab. 0 = ist falsch, alles andere wahr.

(Habe "0" ergänzt, war beim morgendlichen Tippen wohl nicht fest genug gedrückt worden, die 0-Taste.)
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: MySQL Type "L"

Beitragvon AUGE_OHR » Di, 23. Sep 2014 4:21

georg hat geschrieben:MySQL bildet BOOL als TinyInt ab. = ist falsch, alles andere wahr.
OK verstanden.
Dann müsste man auch die FUNCTION TipoField(nType,nLen,nDec)
Code: Alles auswählen
       case nType = "L"
//j         lResp := "CHAR(1)"
            lResp := "tinyint(1) NOT NULL default '0'"
ändern.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10206
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: MySQL Type "L"

Beitragvon georg » Di, 23. Sep 2014 6:19

Hallo, Jimmy -


machen wir es doch mal an einem Beispiel klar:

Code: Alles auswählen
create table logval (was char(32), logisch boolean);


Was macht MySQL mit dem Feldtyp "boolean"?

Code: Alles auswählen
mysql> describe logval;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| was     | char(32)   | YES  |     | NULL    |       |
| logisch | tinyint(1) | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)


MySQL macht tinyint(1) draus. Jetzt fügen wir mal ein paar Sätze ein:

Code: Alles auswählen
mysql> insert into logval values('Null', 0), ('Eins', 1), ('zwei', -1);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0


Was ist drin?

Code: Alles auswählen
mysql> select * from logval;
+------+---------+
| was  | logisch |
+------+---------+
| Null |       0 |
| Eins |       1 |
| zwei |      -1 |
+------+---------+
3 rows in set (0.02 sec)


Und jetzt wollen wir die Sätze haben, bei denen das Feld logisch WAHR ist:

Code: Alles auswählen
mysql> select * from logval where logisch;
+------+---------+
| was  | logisch |
+------+---------+
| Eins |       1 |
| zwei |      -1 |
+------+---------+
2 rows in set (0.00 sec)


So ist das (zumindest) in MySQL implementiert.

Soweit ich das nachvollziehen konnte, ist die Änderung (numerische Felder werden bei Wert 0 als FALSCH, und bei allen anderen Werten als WAHR) seit MySQL Version 5.5 implementiert.

Ach, übrigens, es wäre immer gut, wenn Du angibst, auf welche Version von Hector's Klassen Du Dich beziehst ...

Dann denke ich, dass Du zu sehr an alten Zöpfen hängst. :confused2: Die TipoField() Funktion wird m.E. nur dann verwendet, wenn Du eine Tabelle mittels einer DBF-Struktur erstellen willst. Damit bist Du aber auf die DBF-typischen Felder beschränkt, kannst also z.B. keine ENUMs oder TIMESTAMP Feldtypen verwenden.

Ich nie über einen CREATE TABLE mittels einer dbStruct nachgedacht, sondern direkt den CREATE TABLE eingesetzt, da dieser Befehl mir auch die Möglichkeit gibt, direkt PRIMARY KEY etc. zu definieren, also in einem Aufwasch.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: MySQL Type "L"

Beitragvon AUGE_OHR » Di, 23. Sep 2014 19:45

georg hat geschrieben:machen wir es doch mal an einem Beispiel klar:
JA ... jetzt ist es klar, Danke.
georg hat geschrieben:Ach, übrigens, es wäre immer gut, wenn Du angibst, auf welche Version von Hector's Klassen Du Dich beziehst ...
vermutlich die erste Version die Hector veröffentlicht hat.
ich habe nun den Source, mit WinDiff, verglichen und festgestellt das deine "lates" Version wohl die aktuellste ist.
georg hat geschrieben:Dann denke ich, dass Du zu sehr an alten Zöpfen hängst. :confused2: Die TipoField() Funktion wird m.E. nur dann verwendet, wenn Du eine Tabelle mittels einer DBF-Struktur erstellen willst. Damit bist Du aber auf die DBF-typischen Felder beschränkt, kannst also z.B. keine ENUMs oder TIMESTAMP Feldtypen verwenden.
JA ... ist klar.
Das ich die DBF importiere beschränkt mich zwar im ersten Schritt aber damit habe ich dann zunächst einmal bekannte Daten zum spielen.
georg hat geschrieben:Ich nie über einen CREATE TABLE mittels einer dbStruct nachgedacht, sondern direkt den CREATE TABLE eingesetzt, da dieser Befehl mir auch die Möglichkeit gibt, direkt PRIMARY KEY etc. zu definieren, also in einem Aufwasch.
für den PRIMARY KEY gibt es doch die Method CreatePrimaryKey( cTable, aCol ) in deiner Class MySQL ;)

ich habe TEST5.PRG von Hector gesehen und mich gefragt warum er nicht o:CreateTable(cTable,aStruct,cType) verwendet hat
Code: Alles auswählen
   // ? 'create table  form Structure',
   //    oCon:CreateTable( cTable,aStruct,cType)

   // type function type sql
      ? 'create table  form Type Sql',
         cSql := creatable()

         if oCon:RealQuery( cSql ) == 0
            msgbox('error Create')
         endif
...

Static function creatable()
Local cInst
        cInst = "CREATE TABLE IF NOT EXISTS `addressebook` ("
        cInst +=  "`AKey` int(11) NOT NULL auto_increment, "
        cInst += "`FName` varchar(15) NOT NULL default '', "
        cInst += "`LName` varchar(15) NOT NULL default '', "
        cInst += "`Address` varchar(25) NOT NULL default '', "
        cInst += "`City` varchar(18) NOT NULL default '', "
        cInst += "`State` varchar(2) NOT NULL default '', "
        cInst += "`Zip` varchar(5) NOT NULL default '', "
        cInst += "`Picture` longblob NULL default NULL, "
        cInst += "PRIMARY KEY  (`AKey`), "
        cInst += "KEY `Name` (`FName`,`LName`), "
        cInst += "KEY `City` (`City`), "
        cInst += "KEY `State` (`State`) "
        cInst += ") TYPE=MyISAM"
return cInst
sondern explizit "CREATE TABLE ..." ... hm :-k
nun hat Hector in der Table ein FIELD Type "longblob" vorgesehen aber mit solchen Type kommt der Rest der Class (noch) nicht klar :-"

ich arbeite mich z.Z. durch euren MySQL Code und vergleiche es gegen meinen PostgreSQL Code um zu sehen wo Unterschiede auftreten die ich anpassen muss.
die Idee war nun die Änderungen für MySQL in PGU einzubauen so das ich wahlweise PostgreSQL oder MySQL ansprechen kann.
damit hätte ich dann zum Schluss die Bausteine die ich benötige um eine Xbase++ Application mit native MySQL und/oder PostgreSQL zu betreiben.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10206
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: MySQL Type "L" [erledigt]

Beitragvon georg » Mi, 24. Sep 2014 6:02

Hallo, Jimmy -


die Klasse ist von Hector, nicht von mir.

Ich habe ein paar Ergänzungen eingebaut, aber den Rest belassen, wie er ist. Dazu gehört auch eine Methode :CreatePrimaryKey().

Mein Eindruck ist - wenn ich jetzt Einblick in die Anfänge des Projektes bekomme - das Hector sehr stark nachgebessert hat und dabei (wohl auch um eigene Projekte kompatibel zu erhalten) bestimmte Methoden belassen hat.

Ich habe vor einiger Zeit auch ein Konvertierungsprogramm geschrieben, das liest die DBF-Struktur aus und erzeugt direkt die entsprechende CREATE TABLE Anweisung und übernimmt den Import.

Inzwischen erinnert in den meisten meiner Programmen nur noch die leere DBESys() dran, dass das Programm auch mit DBF-Datein könnte ...
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29


Zurück zu SQL-Server

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast