solook
شنبه 05 اردیبهشت 1388, 23:05 عصر
با سلام
من از بانک mysql استفاده میکنم
در نسخه های پیشین دلفی مشکلی نداشتم اما حال که از 2009 استفاده میکنم برای جستجو در بانک هیچ نتیجه ای نمی دهد
فکر کنم مشکل مربوط به نوع کاراکترها باشه . چطوری این مشکل رو حل کنم
vcldeveloper
یک شنبه 06 اردیبهشت 1388, 08:16 صبح
با چی به MySQL وصل شدید؟ دلفی 2009 برنامه های یونیکد تولید میکنه، پس باید ابزاری که باهاش به MySQL وصل شدید، و بانک اطلاعاتی که استفاده می کنید هم از یونیکد پشتیبانی کنند.
solook
یک شنبه 06 اردیبهشت 1388, 08:35 صبح
با Zeos نسخه 7 که از یونیکد پشتیبانی میکنه..
مشکلی با یونیکد ندارم ..دیتابیس رو هم کاملا با فرمت utf8 ذخیره کردم
جالب اینجاست بعضی کلمات رو خوب جستجو میکنه ولی بعضی کلامات رو هیچ چیزی نشون نمیده
vcldeveloper
یک شنبه 06 اردیبهشت 1388, 23:40 عصر
جالب اینجاست بعضی کلمات رو خوب جستجو میکنه ولی بعضی کلامات رو هیچ چیزی نشون نمیده
مثلا چه کلماتی را درست جستجو نمی کنه؟
solook
سه شنبه 08 اردیبهشت 1388, 16:07 عصر
بذارید کامل توضیح بدهم
من برا جستجو در متن اعراب دار و همچنین نادیده گرفتن همزه و تاء و... از تابع زیر استفاده میکنم :
Function AlefHamza(Text,Table,Fild:String;Hamza,Mach:Boolea n):String;
var I:integer;
S1,S2,P:string;
begin
s1:=Text;
P:=Text;
//Ignore Erab
for i:=1 to (length(s1)) do
begin
if(i>1)then
S2:=S2+Trim('[ًٌٍَُِّْ~`]*') +S1[i]
else s2:=s2+s1[i];
end;
Text:=S2;
//Mach Case
if Mach=False then Text:= '''.* '+Text+'.* '''
Else Text:= '''.*'+Text+'.*''';
//Ignore Aracic (Ya & Kaf)
if Pos('ک',P)>=1 then
Text := StringReplace(Text,'ک', '[کك]', [rfReplaceAll]);
if Pos('ك',P)>=1 then
Text := StringReplace(Text,'ك', '[کك]', [rfReplaceAll]);
Text := StringReplace(Text,'ي', '[یي]', [rfReplaceAll]);
Text := StringReplace(Text,'ی', '[یي]', [rfReplaceAll]);
///Ignore Alef Hamza
if Hamza=False then begin
Text := StringReplace(Text,'ا', '[اآأإ]', [rfReplaceAll]);
Text := StringReplace(Text,'و', '[وؤ]', [rfReplaceAll]);
Text := StringReplace(Text,'ه', '[ةه]',[rfReplaceAll]);
end;
Result:='SELECT *FROM '+Table+' WHERE '+Fild+' REGEXP '+Text ;
end;
برگشتی این یک کد اس کیو ال هست که با استفاده از دستور REGEXP اعرابها و همزه ها را در هنگام جستجوی در بانک نادیده میگیره..
مثلا الله رو تبدیل به این میکنه :
SELECT *FROM Quran WHERE Arabic REGEXP '.*[اآأإ][ًٌٍَُِّْ~`]*ل[ًٌٍَُِّْ~`]*ل[ًٌٍَُِّْ~`]*[ةه].*'تا اینجا مشکلی ندارم ..
نسخه های پیشین دلفی مشکلی نداشت .
ظاهرا مشکل اینجاست که دلفی 2009 کارکترها رو به شکل دیگری در میاره .
بانک را تبدیل به یونیکد کردم و در نسخه های پیشین بصورت عادی دلفی نتیجه نداد .معلومه چون کارکترهای دیتا یونیکد هست ولی برنامه بصورت ansi میفرسته ..
وقتی از تابع ansitoutf8 در نسخه های پیشین استفاده کردم دقیقا همون نتیجه دلفی 2009 رو داد یعنی نتایج کم و زیاد بود و گاهی مطابقت نداشت.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.