Seite 1 von 2

SQLite und Umlaute... mal wieder

Verfasst: 12.05.2011 21:59
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

Re: SQLite und Umlaute... mal wieder

Verfasst: 12.05.2011 22:43
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.

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 10:59
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

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 11:25
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?

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 13:48
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.

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 14:00
von Kiffi
@User_0815: Kannst Du mal ein Stück Code zusammenbauen
mit dem wir das nachvollziehen können?

Grüße ... Kiffi

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 15:33
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

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 15:43
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

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 16:01
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

Re: SQLite und Umlaute... mal wieder

Verfasst: 13.05.2011 16:48
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