Yorumları: 168
Konuları: 15
Kayıt Tarihi: 16-01-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 910
Acemi
24-08-2023, Saat: 09:15
(Son Düzenleme: 24-08-2023, Saat: 10:31, Düzenleyen: COMMANDX.
Sebep: Düzeltme
)
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.
Yorumları: 168
Konuları: 15
Kayıt Tarihi: 16-01-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 910
Acemi
24-08-2023, Saat: 14:22
(Son Düzenleme: 24-08-2023, Saat: 14:26, Düzenleyen: COMMANDX.)
Çö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.
Yorumları: 168
Konuları: 15
Kayıt Tarihi: 16-01-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 910
Acemi
24-08-2023, Saat: 15:46
(Son Düzenleme: 24-08-2023, Saat: 15:47, Düzenleyen: COMMANDX.)
(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.
Yorumları: 168
Konuları: 15
Kayıt Tarihi: 16-01-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 910
Acemi
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.
Yorumları: 168
Konuları: 15
Kayıt Tarihi: 16-01-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 910
Acemi
25-08-2023, Saat: 09:00
(Son Düzenleme: 25-08-2023, Saat: 09:10, Düzenleyen: COMMANDX.)
(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 .


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.