SQLite karakter sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

SQLite karakter sorunu

Mesaj gönderen AliZairov »

İyi akşamlar. Ne hikmetse benim player projesinde hep bi sorun çıkıyo. Bende sorunu şimdilik geçip başka işleri görüyorum zaman kaybı olmasın diye. Şöyle bir küçük tablom var. Kanallar için.

Kod: Tümünü seç

tablo - channels
value - name ve url varchar olarak
Bağlantı FireDAC ayarlarım

Kod: Tümünü seç

var
  DB: string;
begin
  DB := ExtractFilePath(ParamStr(0)) + 'Database\db.s3db';
  with Main do
  begin
    FDC.DriverName := 'SQLITE';
    FDQ.Connection := FDC;
    FDC.Params.Values['Database'] := DB;
    FDC.Params.Values['CharacterSet'] := 'utf8';
    FDC.Open;
  end;
Ben türkçe karakter veri eklediğimde - ? - ve latın harf olarak görünüyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen mrmarman »

Türkçe karakter içerecek metin alanlarını veritabanına atarken UTF8Encode( strIcerik ); şeklinde encode ederek kaydetmeyi dener misin ?
Resim
Resim ....Resim
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen AliZairov »

Iyi akşamlar Muharrem abi. Yok öylede aynı.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen mrmarman »

SQLite veritabanını yedekle ve yeni baştan bu setup ile create ederek dener misin ? Belki de CREATE ederken farklı, open ederken farklı character set kullanıyorsundur ..
Resim
Resim ....Resim
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen AliZairov »

Yok normal kodlama kullandım.

Kod: Tümünü seç

    With FDQ do
    begin
      Active := False;
      //Connection := FDC;
      SQL.Clear;
      SQL.Add( 'CREATE TABLE IF NOT EXISTS channels (' );
      SQL.Add( ' name nvarchar(50),');
      SQL.Add( ' url nvarchar(250)');
      SQL.Add( ' );');
      ExecSQL;
    end;
mysql de yaparken unikod desteği seçe biliyorduk sorun vermiyordu.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: SQLite karakter sorunu

Mesaj gönderen brs »

AliZairov yazdı:İyi akşamlar. Ne hikmetse benim player projesinde hep bi sorun çıkıyo. Bende sorunu şimdilik geçip başka işleri görüyorum zaman kaybı olmasın diye. Şöyle bir küçük tablom var. Kanallar için.

Kod: Tümünü seç

tablo - channels
value - name ve url varchar olarak
Bağlantı FireDAC ayarlarım

Kod: Tümünü seç

var
  DB: string;
begin
  DB := ExtractFilePath(ParamStr(0)) + 'Database\db.s3db';
  with Main do
  begin
    FDC.DriverName := 'SQLITE';
    FDQ.Connection := FDC;
    FDC.Params.Values['Database'] := DB;
    FDC.Params.Values['CharacterSet'] := 'utf8';
    FDC.Open;
  end;
Ben türkçe karakter veri eklediğimde - ? - ve latın harf olarak görünüyor.


Selam bende bu kodları kullanıyorum Türkçe karakter sorunu olmuyor...

Kod: Tümünü seç

      StrDatabase := 'C:\DB\Database.db';
    begin
      with FDConnection do
      begin
        Connected := False;
        LoginPrompt := False;
        params.Clear;
        params.Values['Database'] := StrDatabase;
        params.Values['DriverID'] := 'SQLite';
        params.Values['CharacterSet'] := 'utf8';
        Connected := True;
      end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen mrmarman »

Sen dediğimi yaptın mı ?Veritabanını yedekle, sil ve yeniden create edip dener misin ?!

Sonraki aşama nerede görüntülediğin ile ilişkili. Orada Unicode seçili olmayabilir. Önce bir AsString ile okduğun değerleri ShowMessage ile bakacaksın, onda doğru ise yeni bir DBEdit vs. koyup onun üzerinde deneyeceksin vs vs.
Resim
Resim ....Resim
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen AliZairov »

Iyi geceler. Abi dediğini yapmadım çünkü öyle büyük bir iş yapmıyorum. ShowMessage denedim aynı sorun.

Kod: Tümünü seç

    with Main.FDQ do
    begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO channels ');
      SQL.Add('( name , url )');
      SQL.Add(' VALUES ');
      SQL.Add(' (:d0 , :d1 ) ');
      ParamByName('d0').AsString := 'ƏÜĞ';
      ParamByName('d1').AsString := 'http';
      ExecSQL;
    end;

    with Main.FDQ do
    begin
      SQL.Clear;
      SQL.Text := 'Select * From channels';
      Open();
    end;

ShowMessage(Main.FDQ.FieldByName('name').Text); // ƏÜĞ - ?UG gibi çıktı veriyo.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen mrmarman »

Giriş için statik bir string değişken kullanarak dener misin ? Edit'den falan giriş yapma orada da bozuluyor olabilir.

Kod: Tümünü seç

Var
  strVeri : String;
begin
  strVeri := 'ĞÜŞİÖÇğüşiöçıııı';
...
...
end;
şeklinde atama yapıp veritabanı kaydet ve geri oku.

Okuduğun değer bozluyorsa veritabanı tarafında sorun arasın, aksi halde veri girişi yaptığın EDIT vs. neyse orada...

Bir de veri girişi yaptığın veritabanını burada paylaş bir de ben bakayım.
Resim
Resim ....Resim
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen AliZairov »

Günaydın. Öylede olmadı malesef. Procedure böyle yaptım yine aynı.

Kod: Tümünü seç

procedure GO;
const
  S = 'ĞÜŞİÖÇğüşiöçıııı';
var
  DB: string;
begin
  DB := ExtractFilePath(ParamStr(0)) + 'Database\db.s3db';
  with Main do
  begin
    FDC.DriverName := 'SQLITE';
    FDQ.Connection := FDC;
    FDC.Params.Values['Database'] := DB;
    FDC.Params.Values['CharacterSet'] := 'utf8';
    //FDC.Open;
  end;
    
    with Main.FDQ do
    begin
      SQL.Clear;
      SQL.Text := 'Delete from channels';
      ExecSQL;
    end;
    
    with Main.FDQ do
    begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO channels ');
      SQL.Add('( name , url )');
      SQL.Add(' VALUES ');
      SQL.Add(' (:d0 , :d1 ) ');
      ParamByName('d0').AsString := S;
      ParamByName('d1').AsString := '';
      ExecSQL;
    end;

    with Main.FDQ do
    begin
      SQL.Clear;
      SQL.Text := 'Select * From channels';
      Open();
    end;
  ShowMessage(Main.FDQ.FieldByName('name').Text);
  Application.Terminate;

   {
    With FDQ do
    begin
      Active := False;
      //Connection := FDC;
      SQL.Clear;
      SQL.Add( 'CREATE TABLE IF NOT EXISTS channels (' );
      SQL.Add( ' name nvarchar(50),');
      SQL.Add( ' url nvarchar(250)');
      SQL.Add( ' );');
      ExecSQL;
    end;
  end;
  }
end;
Database.zip
(498 Byte) 36 kere indirildi
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: SQLite karakter sorunu

Mesaj gönderen AliZairov »

İyi geceler. Karakter sorunu benim işletim sistemi ayarlarından kaynaklanıyor. Başka pcde sorun olmadı hemen hemen. Malesef çözüm bulamadım. Latın harf kullandım.
Cevapla