PDA

View Full Version : مشکل unicode و nvarchar در دلفی



M.Hashemi
سه شنبه 14 مرداد 1393, 17:51 عصر
با سلام
تا جایی که گشتم چیزی خاصی پیدا نکردم پس مجبور شدم سوال کنم :
من از پایگاه داده sql server 2008 r2 sp2 express edition استفاده می کنم و connection string من این است :

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aaa;Data Source=test-PC\SQLEXPRESS;
و از نگارش Delphi XE6 update 1 استفاده می کنم.
حالا سوالاتم :
1- زمانی که می خواهم جستجو فارسی بنویسم باید در query خود قبل از کلمه مورد نظر N را قرار بدم تا unicode بشه، حالا من امدم بعضی از select ها را بردم تو stored procedure که نمیشه جایش N اضافه کرد و زمانی می خواهم جسجو کنم درست کار نمی کند (البته فقط فارسی).
چطور باید جستجوی فارسی را در stored procedure نوشت و در دلفی استفاده کرد که به مشکل نخورم؟؟؟
2- فرق بین NChar و NVarChar تا جایی که من میدونم این است که اگر مثلا تعداد کارکتر ها را 100 انتخاب کنیم اما فقط 2 کارکتر را ذخیره کنیم در NChar میاد 98 تا space میگذاره اما در NVarChar این کار را نمی کند که هم حافظه کمتری می گیرد و هم منطقی تر است.
اما زمانی که از NVarChar استفاده می کنم در dbgrid کلمه widememo نوشته می شود که خیلی از سایت های معتبر مانند about برای رفع این مشکل گفتند باید از کد زیر در ongettext مربوط به dbgrid استفاده کرد :

text := copy(adotable1.text,1,50)
که هم کار نمیکنه (مثل این که برای memo است نه برای widememo) و هم به نظرم منطقی نیست و باید راه حل بهتری باشه.
چطور میتونیم از NVarChar در دلفی استفاده کنیم؟؟؟
3- فرق بین char و nchar یا varchar و nvarchar در sql همان unicode بودن ان است پس چرا باید از N قبل از کلمات unicode استفاده کرد؟
---
*تمام چیز های را که گفتم هم تست کردم و هم در search هایم متوجه شدم.
لطفا اساتید محترم در مورد این سوالات کمکم کنید چون واقعا گیرم.
ممنون
با تشکر

sajjad300000
دوشنبه 12 بهمن 1394, 11:15 صبح
با سلام
تا جایی که گشتم چیزی خاصی پیدا نکردم پس مجبور شدم سوال کنم :
من از پایگاه داده sql server 2008 r2 sp2 express edition استفاده می کنم و connection string من این است :

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aaa;Data Source=test-PC\SQLEXPRESS;
و از نگارش Delphi XE6 update 1 استفاده می کنم.
حالا سوالاتم :
1- زمانی که می خواهم جستجو فارسی بنویسم باید در query خود قبل از کلمه مورد نظر N را قرار بدم تا unicode بشه، حالا من امدم بعضی از select ها را بردم تو stored procedure که نمیشه جایش N اضافه کرد و زمانی می خواهم جسجو کنم درست کار نمی کند (البته فقط فارسی).
چطور باید جستجوی فارسی را در stored procedure نوشت و در دلفی استفاده کرد که به مشکل نخورم؟؟؟
2- فرق بین NChar و NVarChar تا جایی که من میدونم این است که اگر مثلا تعداد کارکتر ها را 100 انتخاب کنیم اما فقط 2 کارکتر را ذخیره کنیم در NChar میاد 98 تا space میگذاره اما در NVarChar این کار را نمی کند که هم حافظه کمتری می گیرد و هم منطقی تر است.
اما زمانی که از NVarChar استفاده می کنم در dbgrid کلمه widememo نوشته می شود که خیلی از سایت های معتبر مانند about برای رفع این مشکل گفتند باید از کد زیر در ongettext مربوط به dbgrid استفاده کرد :

text := copy(adotable1.text,1,50)
که هم کار نمیکنه (مثل این که برای memo است نه برای widememo) و هم به نظرم منطقی نیست و باید راه حل بهتری باشه.
چطور میتونیم از NVarChar در دلفی استفاده کنیم؟؟؟
3- فرق بین char و nchar یا varchar و nvarchar در sql همان unicode بودن ان است پس چرا باید از N قبل از کلمات unicode استفاده کرد؟
---
*تمام چیز های را که گفتم هم تست کردم و هم در search هایم متوجه شدم.
لطفا اساتید محترم در مورد این سوالات کمکم کنید چون واقعا گیرم.
ممنون
با تشکر




سلام
کافیه جدول های بانک رو به جای nvarchar از varchar استفاده کنییییییییییییییییییییییی یییییییییی..................
سجاد داوند