Aktuelle Zeit: 22.03.2019 04:19

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Neue Mysql-Funktion(en)
BeitragVerfasst: 27.02.2019 10:43 
Offline

Registriert: 08.07.2009 10:53
Hallo Pur'ler

Lange hab ich ohne Hilfe gearbeitet... aber jetzt stehe ich an.
Meine Suche ergab auch noch keine Hilfe.

Mein Problem:
Hab eine Kundenverwaltung (bin eigentlich Rauchfangkehrer (Schornsteinfeger) mit EDV-Wurzeln *g*) mit mySQL (bzw. seit kurzem MariaDB) und PureBasic unter OSX geschrieben.
Erst unter Windows - dann auf OSX - Früher mit ODBC - dann mit mysql.lib von http://hex0rs.coderbu.de (danke - mindestens ein Bier steht *g*)

Und nun unter 5.7 sollte die DB-Abfragen wieder mit Boardmitteln funktionieren.

Erste Tests... verliefen mit Fehlern... Dann mal eine Test.pb geschrieben um die neue Sache zu lernen - insbesondere für den Übergang zur 5.7 um beide Versionen aktiv zu halten (falls weitere Probleme auftauchen sollten):

Code:
Debug #PB_Compiler_Version;

CompilerIf (#PB_Compiler_Version >= 570)
  UseMySQLDatabase()
  If OpenDatabase(db, "host=xxx.xxx.xxx.xxx port=yyyy dbname=zzzz", "user", "password")
    Debug "Verbunden zu MySQL"
  Else
    Debug "Verbindung fehlgeschlagen: "+DatabaseError()
  EndIf
CompilerElse
  XIncludeFile "mysql.pbi"
  UseMySQLDatabase()
  If OpenDatabase(db, "host=xxx.xxx.xxx.xxx port=yyyy dbname=zzzz", "user", "password", #PB_Database_MySQL)
    Debug "Verbunden zu MySQL"
  Else
    Debug "Verbindung fehlgeschlagen: "+DatabaseError()
  EndIf
CompilerEndIf

 
 Debug Str(#PB_Compiler_Version)

 
  query$ = "SELECT `Brennstoff` FROM `Feuerstaetten2014`  group by `Brennstoff`  ORDER BY `Brennstoff` ASC"
  If DatabaseQuery(db, query$)
    While NextDatabaseRow(db)
      Brennstoff$    = GetDatabaseString(db,0)
      If (Brennstoff$ <> "")
        Debug "original:"+Brennstoff$
; Meine Versuche Umlaute wieder lesen zu können:
        Debug "URLencode UTF8:"+URLEncoder(Brennstoff$, #PB_UTF8)
        Debug "URLencode ASCII:"+URLEncoder(Brennstoff$, #PB_Ascii)
       
        *Text = UTF8(Brennstoff$)
        Encoded$ = Base64Encoder(*Text, MemorySize(*Text))
        *DecodedBuffer = AllocateMemory(1024)
        Base64Decoder(Encoded$, *DecodedBuffer, 1024)
        Debug " UTF8:"+ PeekS(*DecodedBuffer, -1, #PB_UTF8)

      EndIf
      Debug "--------------------------------------------"
    Wend
  Else
    MessageRequester("Datenbankfehler","Startwerte "+Chr(13)+query$)
  EndIf
 
  CloseDatabase (db)


Meine, leider Fehlerhafte, Ausgabe ist folgende (Nur ein Ausschnitt):
Code:
570
Verbunden zu MySQL
570
--------------------------------------------
--------------------------------------------
original:HEL - Ofenhei
URLencode UTF8:HEL%20-%20Ofenhei
URLencode ASCII:HEL%20-%20Ofenhei
 UTF8:HEL - Ofenhei


bzw. mit altem Compiler -> so wäre es korrekt...

Code:
561
Verbunden zu MySQL
561
--------------------------------------------
--------------------------------------------
original:HEL - Ofenheizöl
URLencode UTF8:HEL%20-%20Ofenheiz%C3%B6l
URLencode ASCII:HEL%20-%20Ofenheiz%F6l
 UTF8:HEL - Ofenheizöl


Datenbank hatte ich standardmäßig auf Latin1 und habs auch auf UTF8 konvertiert (natürlich nur eine Kopie davon)
Erst dachte ich das die interne Verarbeitung Probleme macht... aber anscheinend kommen die Daten schon falsch bzw. vielleicht sogar abgeschnitten rüber...

Bitte um Hilfe... was kann ich noch tun, probieren oder ändern.
Hab ich die Lösung nur noch nicht richtig gesucht?

Grüße

Robert

_________________
Hauptsächlich Purebasic für OSX


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Neue Mysql-Funktion(en)
BeitragVerfasst: 27.02.2019 20:27 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo babelfish!

Zitat:
Brennstoff$ = GetDatabaseString(db,0)


Der Fehler tritt ja schon hier beim Auslesen auf.
Da bringt irgendeine andere Auslesemethode mit selbigen Bezug (auf Brennstoff$) ja auch nichts.

???


Du könntes jetzt mal folgendes Ausprobieren:

Code:
feldgroesse = DatabaseColumnSize(db, 0)
daten = AllocateMemory(feldgroesse)
GetDatabaseBlob(db, 0, @daten, feldgroesse)
Debug PeekS(@daten, feldgroesse, #PB_UTF8) ;Dein Brennstoff$ - String


Was kommt dabei raus ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Neue Mysql-Funktion(en)
BeitragVerfasst: 28.02.2019 07:30 
Offline

Registriert: 08.07.2009 10:53
ccode_new hat geschrieben:

Was kommt dabei raus ?


Danke - Habs eingebaut:
Code:
...
        Debug " UTF8:"+ PeekS(*DecodedBuffer, -1, #PB_UTF8)
       
; Mit Hilfe aus dem Forum:
        feldgroesse = DatabaseColumnSize(db, 0)
        daten = AllocateMemory(feldgroesse)
        GetDatabaseBlob(db, 0, @daten, feldgroesse)
        Debug "Mit Hile aus dem Forum:"+PeekS(@daten, feldgroesse, #PB_UTF8) ;Dein Brennstoff$ - String
       
       
      EndIf
      Debug "--------------------------------------------"
...


Ich finde es wird immer Mysteriöser:
Sobald ein Umlaut dabei ist kommt gar nichts mehr... sonst alles normal.
Und unter der MYSQL.lib gehts gar nicht da dort keine Blob's unterstützt werden.

Code:
--------------------------------------------
original:Hackgut
URLencode UTF8:Hackgut
URLencode ASCII:Hackgut
 UTF8:Hackgut
Mit Hile aus dem Forum:Hackgut
--------------------------------------------
original:HEL
URLencode UTF8:HEL
URLencode ASCII:HEL
 UTF8:HEL
Mit Hile aus dem Forum:HEL
--------------------------------------------
original:HEL - Ofenhei
URLencode UTF8:HEL%20-%20Ofenhei
URLencode ASCII:HEL%20-%20Ofenhei
 UTF8:HEL - Ofenhei
Mit Hile aus dem Forum:
--------------------------------------------

_________________
Hauptsächlich Purebasic für OSX


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Neue Mysql-Funktion(en)
BeitragVerfasst: 02.03.2019 17:20 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo Robert,

hast du dein Problem schon behoben bekommen ?

Wie es sich unter MacOS verhält weiß ich nicht, aber unter Windows/Linux funktioniert eine korrekte UTF8-Stringrückgabe.

Unter MySQL hast du auch das CHARSET auf utf8 eingestellt ?

(Standard: 3 Byte - Länge) ?
Bei mir 4 Byte.

Zitat:
## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
#character_set_server=utf8


Hast du mal "utf8mb4" probiert ? (4 Byte Länge) Einfach mal als Test.

Welche Länge wird bei dir als Feldgröße zurückgegeben ?

Welcher Datentyp wird verwendet ?

CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Neue Mysql-Funktion(en)
BeitragVerfasst: 02.03.2019 21:14 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ich habe hier einen NAS mit MySQL-Server an laufen (LinkStation).

- Server: Localhost via UNIX socket
- Server Version: 5.0.70-log
- Protokoll-Version: 10
- MySQL-Zeichensatz: UTF-8 Unicode (utf8)

Hier brauche ich nichts umwandelt.
Alle Strings funktionieren auch mit Sonderzeichen...

Windows, Linux, MacOS alles ok hier mit der libmariadb.* (dll/so/dylib) .

Muss also wo anders dran liegen...

P.S. Unter MacOS funktioniert ODBC nicht

Habe bereits ein Bugreport im englischen Forum geschrieben.

Der Fehler ist das PB versucht mit der Größe von Type wchar_t = 2 byte mit iODBC zu arbeiten
Aber unter MacOS ist aber iODBC der Type wchar_t = 4 byte gross...

Blöde Macke. Unter Linux gab es keine Probleme mit wchar_t = 2 byte...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye