Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Blob Alana kaydettiğim Fastreport dosyası içeriği
#1
Merhaba Arkadaşlar.
Blob alana kaydettiğim fastreport matbu olarak kullandığım 2000den fazla fr3 dosyam var.
Bu dosyaların içeriğini arattırdığımda fastreport içindeki Türkçe karakterler üzerinden arattırmak istediğimde ÖRNEĞİN: "Kızılcahamam" yazıp arattığımda Bulamıyor fakat "lcahamam" gibi yazdığımda Gridde listelenip bulunmuş oluyor.
Fastreport dosyasını text editörde baktığımda normal gözüküyor, fakat Dbmemo ile ıİÜüĞğÇçÖöŞş karakterlerinin değişik char tiplerinde görülmekte
Kızılcahamam ise dbmemo içerisinde Kızılcahamam Şeklinde görüntüleniyor.
bu badireyi nasıl atlatabilirim.
Aklımda bir fonksiyon var fakat bayağı takla attırmam gerekecek. 
Karakterleri Tr To Eng ve  Eng To Tr fonksiyonu ile yapabilirmiyim bilemiyorum, SQL tarafında Bu aşılabilirmi?

not: Aradığım String alanlar, Blob alanda bulunmaktadır. Mecburen buraya kaydetmem/aramam gerekmektedir.
Teşekkürler.
__________________________
From Now I will only Reading.
Cevapla
#2
Çözdüm... Bayağı uğraştırdı...
Comboboxtaki char case yi ecLowercase yaparak alttaki fonksiyonla çözdüm.
function tr2UTF(S:string):string;
var
n:integer;
begin
result:='';
for n:=1 to length(s) do
 begin
  if s[n]='Ş' then
  Result:=Result+char(197)+char(158)
    else if s[n]='ş' then
    Result:=Result+char(197)+char(159)
      else if s[n]='Ç' then    
      Result:=Result+char(195)+char(135)
        else if s[n]='ç' then
        Result:=Result+char(195)+char(167)
         else if s[n]='Ğ' then
         Result:=Result+char(196)+char(158)
          else if s[n]='ğ' then
          Result:=Result+char(196)+char(159)
              else if s[n]='Ü' then
              Result:=Result+char(195)+char(156)
                else if s[n]='ü' then
                Result:=Result+char(195)+char(188)
                  else if s[n]='Ö' then
                  Result:=Result+char(195)+char(150)
                    else if s[n]='ö' then
                    Result:=Result+char(195)+char(182)
                      else if s[n]='İ' then
                      Result:=Result+char(196)+char(176)
                        else if s[n]='ı' then
                        Result:=Result+char(196)+char(177)
                          else Result:=Result+s[n];
end;
end;


procedure TForm5.RzBitBtn12Click(Sender: TObject);
begin
Application.ProcessMessages;
dm1.UniQuDOSYALIST.Close;
dm1.UniQuDOSYALIST.SQL.Clear;
dm1.UniQuDOSYALIST.SQL.Add('select * From DOSYALIST Where LOWER(FILEBLOB) containing LOWER('''+tr2UTF(COMBOBOX1.Text)+''')');
dm1.UniQuDOSYALIST.SQL.Add(' order by FILE_DATE DESC ');
dm1.UniQuDOSYALIST.Open;
combobox1.SetFocus;
combobox1.SelectAll;
combobox1.Items.Add(combobox1.Text);
combobox1.Color:=clyellow;
end;

Birilerinin işine yarayabilir...
__________________________
From Now I will only Reading.
Cevapla
#3
Çözüme ulaşmışsınız ama sorsam, kullandığınız veritabanı hangisiyse ona üçüncü parti bir Manager uygulama ile baktığınızda ne görüyorsunuz.

MySQL'de dosya isimlerinin table'da tutulmasıyla ilgili benim de karşılaştığım bir durumdu, çözümü MySQL tarafında tablo alanı için ekstra özel COLLATION tanımını yapmak. Çünkü BLOB alanlar genel tablo collation tanımından ayrı tutuluyor olduğunu görmüştüm.

örneğin MySQL için tablo tanımında BLOB alan kısmını

T_Description  BLOB NULL COLLATE utf8mb3_general_ci

şeklinde tanımlayınca Türkçe harf sorguları büyük küçük dahil sorgulanıyor ( sondaki _ci = case insensitive / _cs = case sensitive)
öncesine BINARY koyarsanız ( LIKE BINARY 'Kı%' gibi) o zaman tam uyanı tarıyor...  

SQL sorgularda LIKE ile sorgu yaptığınızda durum nasıl sizde şu an ?
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#4
(24-08-2023, Saat: 15:24)mrmarman Adlı Kullanıcıdan Alıntı: Çözüme ulaşmışsınız ama sorsam, kullandığınız veritabanı hangisiyse ona üçüncü parti bir Manager uygulama ile baktığınızda ne görüyorsunuz.

MySQL'de dosya isimlerinin table'da tutulmasıyla ilgili benim de karşılaştığım bir durumdu, çözümü MySQL tarafında tablo alanı için ekstra özel COLLATION tanımını yapmak. Çünkü BLOB alanlar genel tablo collation tanımından ayrı tutuluyor doluğunu görmüştüm.

SQL sorgularda LIKE ile sorgu yaptığınızda durum nasıl sizde şu an ?

Firebird 2.5x Üstat... databaseyi oluştururuken PXW_TURK olarak yapmıştım. 
İbExpert ile içeriğne baktığımda herşey normal gözüküyor.
Fakat bunu  DBmemoya aktardığımda "ı" harfleri "ı" şeklinde gözüküyor, bu da blob alanda aradığımı bulunamayacak duruma getiriyor.

SQL kodumu Like ettiğimde Yine buluyor, lakin oluşan harfleri görmek için bir değişkene atıp görmek için comboya attığımda karakterler bozuk.
kızılcahamam yazdığımda bulamıyorum ama kızılcahamam şeklinde yazdığımda like ile de bulunabiliyor.
__________________________
From Now I will only Reading.
Cevapla
#5
Anladım.

SQL sorgunuzun sonuna COLATE PXW_TURK gibi ekler yaparak deneme fırsatınız oldu mu ? Belki connection tarafından değişmeye zorlanıyordur. DB tarafında herşeyi normal görmeniz iyi haber.

SELECT * from tablo where ilce like 'Kız%' COLLATE PXW_TURK;

gibisinden.  Bu son sorumdu. Konuyu uzatmak için değil de meraktan sordum. Teşekkürler sabrın için.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
Rica ederim, Ne demek Üstat.
Yarın Projenin olduğu pc başına geçince bunu deneyeceğim, bana da merak oldu.
__________________________
From Now I will only Reading.
Cevapla
#7
(24-08-2023, Saat: 16:43)mrmarman Adlı Kullanıcıdan Alıntı: Anladım.

SQL sorgunuzun sonuna COLATE PXW_TURK gibi ekler yaparak deneme fırsatınız oldu mu ? Belki connection tarafından değişmeye zorlanıyordur. DB tarafında herşeyi normal görmeniz iyi haber.

SELECT * from tablo where ilce like 'Kız%' COLLATE PXW_TURK;

gibisinden.  Bu son sorumdu. Konuyu uzatmak için değil de meraktan sordum. Teşekkürler sabrın için.

Collation PXW_TURK,WIN1254 halinde de bulamadı, Türkçe karakterlere karşı bir gıcıklıkları mı var anlayamadım.
Ancak Yukarıdaki fonksiyonu kullanıp karakter dönüşümünü sağlayınca bulabiliyor.

Kodun son hali bu oldu daha iyi oldu, bence çok da iyi güzel oldu .smile.pngbiggrin.pngbiggrin.png
function tr2UTF(S:string):string;
var
n:integer;
begin
result:='';
for n:=1 to length(s) do
 begin
  if s[n]='Ş' then
  Result:=Result+char(197)+char(158)
    else if s[n]='ş' then
    Result:=Result+char(197)+char(159)
      else if s[n]='Ç' then
      Result:=Result+char(195)+char(135)
        else if s[n]='ç' then
        Result:=Result+char(195)+char(167)
         else if s[n]='Ğ' then
         Result:=Result+char(196)+char(158)
          else if s[n]='ğ' then
          Result:=Result+char(196)+char(159)
              else if s[n]='Ü' then
              Result:=Result+char(195)+char(156)
                else if s[n]='ü' then
                Result:=Result+char(195)+char(188)
                  else if s[n]='Ö' then
                  Result:=Result+char(195)+char(150)
                    else if s[n]='ö' then
                    Result:=Result+char(195)+char(182)
                      else if s[n]='İ' then
                      Result:=Result+char(196)+char(176)
                        else if s[n]='ı' then
                        Result:=Result+char(196)+char(177)
                          else Result:=Result+s[n];
end;
end;


function UP2DOWN(yazi:string):string;
const
 UP  = 'ABCÇDEFGĞHIİJKLMNOÖPQRSŞTUÜVYZX';
 DOWN= 'abcçdefgğhıijklmnoöpqrsştuüvyzx';
var
 i:integer;
begin
 result:=yazi;
 for i := 0 to length(yazi) do
   if pos(yazi[i],up)>0 then
   result[i]:=down[pos(yazi[i],up)];
end;


procedure TForm5.RzBitBtn12Click(Sender: TObject);
VAR
COMBOS:STRING;
begin
Application.ProcessMessages;
COMBOS:=COMBOBOX1.Text;
combobox1.Text:=UP2DOWN(TR2UTF(combobox1.Text));
dm1.UniQuDOSYALIST.Close;
dm1.UniQuDOSYALIST.SQL.Clear;
dm1.UniQuDOSYALIST.SQL.Add('select * From DOSYALIST Where LOWER('+('FILEBLOB')+') containing LOWER('''+(COMBOBOX1.Text)+''')  COLLATE pxw_turk');
dm1.UniQuDOSYALIST.SQL.Add(' order by FILE_DATE DESC ');
dm1.UniQuDOSYALIST.Open;
COMBOBOX1.Text:=UP2DOWN(COMBOS);
combobox1.SetFocus;
combobox1.SelectAll;
combobox1.Items.Add(combobox1.Text);
combobox1.Color:=clyellow;

end;
__________________________
From Now I will only Reading.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 283 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Fastreport Masterdata Column mukoly 7 690 23-02-2024, Saat: 19:54
Son Yorum: hi_selamlar
  Fastreport Barkod Tasarımı delphiX14 7 593 31-01-2024, Saat: 20:10
Son Yorum: mcuyan
  Exe dosyası başka bilgisayarlarda çalışmıyor sbogatekin 4 506 16-01-2024, Saat: 16:38
Son Yorum: RAD Coder
  FastReport etiketi yan yana yazdırma ( Kapandı ) cinarbil 5 515 12-01-2024, Saat: 17:03
Son Yorum: cinarbil



Konuyu Okuyanlar: 1 Ziyaretçi