SQLite und Umlaute... mal wieder

Anfängerfragen zum Programmieren mit PureBasic.
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

SQLite und Umlaute... mal wieder

Beitrag von User_0815 »

Hallo,

ich habe hier eine Sache, die ich nicht wirklich verstehe. Ich habe eine Datenbank erstellt und in diese (leere) Datenbank 4000 Datensätze aus einer CSV-Datei importiert.
Mit SQLiteAdmin und auch mit TKSQLite werden die Daten korrekt angezeigt.
Nur in meinem Listicongadget fehlen die Umlaute (bzw. werden falsch dargestellt), egal ob ich in den Compileroptionen auf Unicode stelle oder aber den Datensatz mit

Code: Alles auswählen

SText.s = PeekS(@SText.s, -1, #PB_UTF8)
darstelle oder auch beides. Es ändern sich zwar die Zeichen (mal ist es ein Rechteck, mal ein Fragezeichen), aber einen Umlaut bekomme ich nie.
Was mache ich falsch und warum zeigen die beiden oben genannten Programme alles richtig an ?

Gruß,

Reiner
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: SQLite und Umlaute... mal wieder

Beitrag von STARGÅTE »

Dein Stück Code ist quatsch.
Ein String ist in PureBasic immer ASCII oder UNICODE, je nach dem was im compiler eingestellt ist.
Ein String in PureBasic ist niemals in UFT-8 hinterlegt.

Den Code würdest du brauchen, wenn in der Datenbank Rohdaten in UTF-8 codierung enthalten sind, welche du mit GetDatabaseBlob() ausliest, und den Speicher dann mittels
SText.s = PeekS(*Buffer, -1, #PB_UTF8)
ausliest.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Re: SQLite und Umlaute... mal wieder

Beitrag von User_0815 »

Hi,

ok, das wusste ich nicht. Ich hatte die Idee aus diesem Beitrag: http://forums.purebasic.com/german/view ... te+umlaute
Aber egal, auch ohne diesen Code bekomme ich keine Umlaute. Hat jemand noch eine Idee ?

Gruß,

Reiner
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: SQLite und Umlaute... mal wieder

Beitrag von Danilo »

User_0815 hat geschrieben:Hat jemand noch eine Idee ?
Hast Du einen Font für das Gadget gesetzt, der die Umlaute nicht enthält?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Re: SQLite und Umlaute... mal wieder

Beitrag von User_0815 »

Hast Du einen Font für das Gadget gesetzt, der die Umlaute nicht enthält?
Eigentlich nicht, daran habe ich gar nichts verändert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite und Umlaute... mal wieder

Beitrag von Kiffi »

@User_0815: Kannst Du mal ein Stück Code zusammenbauen
mit dem wir das nachvollziehen können?

Grüße ... Kiffi
a²+b²=mc²
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Re: SQLite und Umlaute... mal wieder

Beitrag von User_0815 »

Hallo Kiffi,

klar, hier ist er:

Code: Alles auswählen

; PB Version 4.51


Enumeration
  #Window_Main
  #Frame_3D
  #Status_Bar
  #Menu_1
  #Panel_1
  #Panel_2
  #Listview_1
  #Combo_0
  #String_0
  #Text_0
  #ADR_Button_1
  #ADR_Button_2
  #ADR_Button_3
  #END_Button_1
  #Calendar_0
EndEnumeration



Procedure Fill_Listbox ()
  Counter = 1
     UseSQLiteDatabase()
     OpenDatabase(1, "crm.s3db","","",#PB_Database_SQLite )
     DatabaseQuery(1, "SELECT * FROM Adressen;" )
     SendMessage_(GadgetID(#Listview_1),#WM_SETREDRAW,#False,0)
     
     While NextDatabaseRow(1)
 
  recid$ = GetDatabaseString(1, 0)
  matchcode$ = GetDatabaseString(1, 1)
  name1$ = GetDatabaseString(1, 2)
  name2$ = GetDatabaseString(1, 3)
  name3$ = GetDatabaseString(1, 4)
  strasse$ = GetDatabaseString(1, 5)
  plz$ = GetDatabaseString(1, 6)
  ort$ = GetDatabaseString(1, 7)
  kdnr$ = GetDatabaseString(1, 8)
  tel1$ = GetDatabaseString(1, 9)
  tel2$ = GetDatabaseString(1, 10)
  fax$ = GetDatabaseString(1, 11)
  mobil$ = GetDatabaseString(1, 12)
  email1$ = GetDatabaseString(1, 13)
  email2$ = GetDatabaseString(1, 14)
  internet$ = GetDatabaseString(1, 15)
  gebdatum$ = GetDatabaseString(1, 16)
  konditionen$ = GetDatabaseString(1, 17)
  gesumsatz$ = GetDatabaseString(1, 18)
  lbesuch$ = GetDatabaseString(1, 19)
  
   
  AddGadgetItem(#Listview_1, Counter - 1, recid$ + Chr(10) + matchcode$ + Chr(10) + name1$ + Chr(10) + name2$ + Chr(10) + name3$ + Chr(10) + strasse$ + Chr(10) + plz$ + Chr(10) + ort$ + Chr(10) + kdnr$, 0)
    Counter + 1
  Wend
  
  SendMessage_(GadgetID(#Listview_1),#WM_SETREDRAW,#True,0)
     
     FinishDatabaseQuery(1)
     CloseDatabase(1)
EndProcedure




#WindowWidth  = 1020
#WindowHeight = 540

If OpenWindow(#Window_Main, 100, 200, #WindowWidth, #WindowHeight, "Test", #PB_Window_MinimizeGadget)
  CreateStatusBar(#Status_Bar, WindowID(#Window_Main))
    
  Top = 10
  GadgetHeight = 24
  
  CreateMenu(#Menu_1, WindowID(#Window_Main))
  MenuTitle("&Datei")
  ButtonGadget(#END_Button_1, 845, 460, 155, 30, "Ende")
  PanelGadget (#Panel_1, 10, 10, 990, 445)
        AddGadgetItem (#Panel_1, -1, "Adressen")
        ListIconGadget(#Listview_1, 6, 10, 970, 350, "Rec_ID", 50, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection )
        SetGadgetColor(#Listview_1, #PB_Gadget_BackColor , $E6FFFF)
        AddGadgetColumn(#Listview_1,1, "Suchbegriff",100)
        AddGadgetColumn(#Listview_1,2, "Name 1",100)
        AddGadgetColumn(#Listview_1,3, "Name 2",100)
        AddGadgetColumn(#Listview_1,4, "Name 3",100)
        AddGadgetColumn(#Listview_1,5, "Strasse",100)
        AddGadgetColumn(#Listview_1,6, "PLZ",50)
        AddGadgetColumn(#Listview_1,7, "Ort",100)
        AddGadgetColumn(#Listview_1,8, "KdNr",50)
        ComboBoxGadget(#Combo_0, 310, 365, 110, 20)
        AddGadgetItem(#Combo_0,-1,"Suchbegriff")
        AddGadgetItem(#Combo_0,-1,"Name 1")
        AddGadgetItem(#Combo_0,-1,"Ort")
        SetGadgetState(#Combo_0,0)
        StringGadget(#String_0, 80, 365, 210, 20, "")
        TextGadget(#Text_0, 10, 370, 80, 20, "Suchbegriff:")
        ButtonGadget(#ADR_Button_1, 435, 365, 155, 20, "Neuer Kunde")
        ButtonGadget(#ADR_Button_2, 600, 365, 155, 20, "Kunde bearbeiten")
        ButtonGadget(#ADR_Button_3, 765, 365, 155, 20, "Kunde löschen")
       
     CloseGadgetList()
     
     SetActiveGadget(#String_0)
     Fill_Listbox ()
  
  Repeat
    EventID = WaitWindowEvent()
    Select EventID         
     Case #PB_Event_Gadget, #PB_Event_Menu
          welchesgadget = EventGadget()
          Select welchesgadget
              Case #END_Button_1:  EventID = #PB_Event_CloseWindow
           EndSelect
EndSelect
  Until EventID = #PB_Event_CloseWindow
  
  
EndIf

End




; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 26
; FirstLine = 48
; Folding = -
; EnableXP
Gruß,

Reiner
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite und Umlaute... mal wieder

Beitrag von Kiffi »

Hallo Reiner,

sieht auf den ersten Blick OK aus. Jetzt wäre noch der Schnippsel interessant, mit welchem Du das CSV importierst.

Grüße ... Kiffi
a²+b²=mc²
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Re: SQLite und Umlaute... mal wieder

Beitrag von User_0815 »

Hallo Kiffi,

den Import habe ich über SQLiteadmin gemacht, da der Original Datenbestand aus einer Warenwirtschaft kam und aus viel mehr Feldern bestand als ich brauchte.
Der Import ging dort sehr komfortabel und da die Daten dort auch korrekt angezeigt werden (mit Umlauten) bin ich davon ausgegangen, das alles ok war. Ich habe dann noch einmal mit TKSQLite geprüft und auch dort wurden die Umlaute dargestellt (als Kodierung wird UTF8 angezeigt).
Muss ich den Import denn unbedingt selber programmieren ?

Gruß,

Reiner
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite und Umlaute... mal wieder

Beitrag von Kiffi »

User_0815 hat geschrieben:Muss ich den Import denn unbedingt selber programmieren ?
nein, natürlich nicht. Prinzipiell sollte man ja immer in
der Lage sein, SQLite-Datenbanken auszulesen (egal,
wie sie befüllt wurden).

Allerdings habe ich was seltsames feststellen können:

Ich habe mit dem SQLiteAdmin eine DB erstellt und hierin
eine Tabelle mit einem Feld. Das Feld habe ich mit 'öäü'
befüllt.

Öffne ich nun mittels PB die DB, sehe ich keinen Inhalt.

Wenn ich die DB jetzt mit TKSQLite öffne und eine
weitere Zeile 'öäü' hinzufüge, kann ich genau diesen
einen Wert in PB sehen.

Kurzum:

Datenbank mit SQLiteAdmin befüllt -> Keine korrekte Ausgabe in PB
Datenbank mit TkSQLite befüllt -> Korrekte Ausgabe in PB

mmh....

Grüße ... Kiffi
a²+b²=mc²
Antworten