PDA

View Full Version : مشکل در سرچ کردن کلماتی که در انها حروف ی و ک بکار رفته !!!



gama118
دوشنبه 27 شهریور 1391, 00:13 صبح
سلام
من تو پروژه asp دیتا بیس رو با کد پیج SQL_Latin1_General_CP1256_CI_AS
حالا از طریق فرم ورودی مثلا نام و نام خانوادگی رو تکست باکس میگیرو و بصورت فیلد nvarchar در دیتا بیس دخیره می کنم فرض کنید نام رو کریم رازقی وارد می کنم
حالا از طریق یه تکست باکس مقداری از نام رو میگیرم و میخوام با دستور like در دیتا بیس سرچ کنم
ولی حرف ک و ی رو نمیشناسه و پیدا نمیکنه کلماتی که این دو حرف توش هستن رو با اینکه تو کوئری خود sql server پیدا میکنه ولی از طریق فرم پیدا نمیکنه انگار کدپیچ این دو فرق داره

کدپیج دیتابیس رو درست تنطیم کردم؟

shahab_ksh
دوشنبه 27 شهریور 1391, 00:17 صبح
وقتی که میخاید متن رو به دیتابیس اضافه کنید از تابع Replace ی عربی رو به ی فارسی تبدیل کنید

fakhravari
دوشنبه 27 شهریور 1391, 00:20 صبح
حل مشکل ی - ک با کد زیر
USE samplesql;

DECLARE @Table NVARCHAR(MAX),
@Col NVARCHAR(MAX)

DECLARE Table_Cursor CURSOR
FOR
--پيدا كردن تمام فيلدهاي متني تمام جداول ديتابيس جاري
SELECT a.name, --table
b.name --col
FROM sysobjects a,
syscolumns b
WHERE a.id = b.id
AND a.xtype = 'u' --User table
AND (
b.xtype = 99 --ntext
OR b.xtype = 35 -- text
OR b.xtype = 231 --nvarchar
OR b.xtype = 167 --varchar
OR b.xtype = 175 --char
OR b.xtype = 239 --nchar
)

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Col
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC (
'update [' + @Table + '] set [' + @Col +
']= REPLACE(REPLACE(CAST([' + @Col + '] as nvarchar(max)) ,
NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705))'
)

FETCH NEXT FROM Table_Cursor INTO @Table,@Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor

gama118
دوشنبه 27 شهریور 1391, 22:58 عصر
آخه تعداد فیلدهایی که متن توش ذخیره میشه زیاده روش replace کردن بنطر شما معقوله ؟ سرعت ذخیره کردن رو کم نمیکنه !!!؟ آیا فقط این مشکل در "ی" و "ک" وجود خواهد داشت؟

من متن ر واز تو تکست باکس دخیره می کنم و برای جستجو هم متن رو تو همون تکست باکس وارد می کنم و از اون جستجو می کنم چرا موقع دخیره این حرف با یه کدپیج و موقع جستجو این حرف با یه کد پیج دیگه شناخته میشه ؟ کامپیوتر هم که همونه

یه روش اصولی تر سراغ ندارین ؟

fakhravari
سه شنبه 28 شهریور 1391, 00:11 صبح
عزیز دل
روش زیادی هست.
مشکل اول اینه که دردیتابیس عربی وجود داده > خوب با روش بالا میتوان اونو درست کرد.
بعد بروز رسانی کلی حالا باید از ورود ی ک عربی جلوگیری کرد.
اگر تعداد متد هاتون زیاده و وقت ندارید از یک dll استفاده کنید که این کار را برای شما انجام میدهد .
من در این پروژه ازش استفاده کردم.
به نام FixFarsiCharsModule.dll که از اقای هاشمی نژاد است.
http://barnamenevis.org/showthread.php?319398