PDA

View Full Version : سوال: چرا دستور select ام رو بعضی اسمها جواب نمیده؟



bamzi software
چهارشنبه 19 اسفند 1388, 00:32 صبح
سلام

یه مشکل عجیب :

دستور select ای که نوشتم رو بعضی اسمها جواب نمیده!!؟؟؟؟خالی جواب میده

مثلا رو این اسمها جواب نمیده:

SELECT namelig, team, tedadbazi, bord, mosavi, bakht, golezade, golekhorde, tafazolegol, emtiaz FROM league_team WHERE namelig='اول ایران' and team='پرسپولیس'

اما رو اینا جواب میده!!!

SELECT namelig, team, tedadbazi, bord, mosavi, bakht, golezade, golekhorde, tafazolegol, emtiaz FROM league_team WHERE namelig='اول ایران' and team='مس'

دلیلش چیه؟؟

Jozef
چهارشنبه 19 اسفند 1388, 02:45 صبح
دوست عزیز نامهای فارسی که در شرط استفاده میکنین رو از داخل خود بانک یه نمونه کپی و در کد بالا قرار بدین ببینین مشکل حل میشه یا نه.

bamzi software
چهارشنبه 19 اسفند 1388, 11:31 صبح
دوست عزیز نامهای فارسی که در شرط استفاده میکنین رو از داخل خود بانک یه نمونه کپی و در کد بالا قرار بدین ببینین مشکل حل میشه یا نه.

این کار رو هم انجام دادم اما باز هم نشد!!
انگار به بعضی اسمها جواب نمیده!!

چه دلیلی میتونه داشته باشه؟؟:ناراحت:

محمد سلیم آبادی
چهارشنبه 19 اسفند 1388, 12:53 عصر
قبل از رشته هایی که از حروف فارسی تهیه شدند از کاراکتر N استفاده کن بطور مثال:

select * from table_name where team = N'سپاهان'

bamzi software
پنج شنبه 20 اسفند 1388, 14:50 عصر
قبل از رشته هایی که از حروف فارسی تهیه شدند از کاراکتر N استفاده کن

ممنون.این کار رو انجام دادم و تقریبا مشکلم حل شد..
حالا موضوع جالب اینه که با قرار دادن کاراکتر N بعضی از query هام که قبلا جواب میداد حالا جواب نمیده!!!
این قبلا جواب میداد:

select distinct serial from formekarbar where namemosabeghe='پارسیان '

اما حالا که N قرار دادم جواب نمیده:

select distinct serial from formekarbar where namemosabeghe=N'پارسیان '

باید چیکار کنم؟
اصلا این کاراکتر N موضوش چی هست؟

محمد سلیم آبادی
پنج شنبه 20 اسفند 1388, 15:09 عصر
N برای حروف Unicode استفاده میشه که اول کلمه ی National (ملی) است.

این کد را امتحان کنید ببینین جواب می ده یا نه (یک کاراکتر space بعد از کلمه وجود داره اونو حذف کردم، در ضمن داده هایتان را دقیق بررسی کنید ببینید مقادیر ستون مرتبط در بانک چگونه ذخیره شدند اصلا وجود دارند یا نه ...)

select distinct serial from formekarbar where namemosabeghe=N'پارسیان'

bamzi software
پنج شنبه 20 اسفند 1388, 17:31 عصر
این کد را امتحان کنید ببینین جواب می ده یا نه (یک کاراکتر space بعد از کلمه وجود داره اونو حذف کردم، در ضمن داده هایتان را دقیق بررسی کنید ببینید مقادیر ستون مرتبط در بانک چگونه ذخیره شدند اصلا وجود دارند یا نه ...)'پارسیان' رو داره از querystring که از دیتابیس انتخاب شده میخونه.دستی ننوشتم که بخواد اشتباه تایپی باشه.
بله،مقادیر وجود دارند.گفته بودم که بدون کاراکتر N جواب میده.!!!

یک مسئله ای که هست اینه : وقتی که میخواد از querystring بخونه خودش در query کاراکتر N رو قرار میده.که بعضی جاها درست جواب میده وبعضی جاها هم جوابی برنمیگردونه!!

farshad22
پنج شنبه 20 اسفند 1388, 19:26 عصر
ببين اول اينكه كه معمولا براي رشته از = استفاده نميكنن.از like استفاده ميشه.
حالا تو بيا براي اينكه هر دو سري را بياره اون مدلي كه خودت نوشته بودي را با اون نوعي كه دوستمون راهنمايي كردن(با N) را با هم به صورت دو شرط با OR بنويس ببين چي ميشه.

bamzi software
پنج شنبه 20 اسفند 1388, 20:54 عصر
حالا تو بيا براي اينكه هر دو سري را بياره اون مدلي كه خودت نوشته بودي را با اون نوعي كه دوستمون راهنمايي كردن(با N) را با هم به صورت دو شرط با OR بنويس ببين چي ميشه.جالب اینه که یه select ای که قبلا جواب میداد الان رو هیچکدوم از حالتهای پایین جواب نمیده:


SELECT namelig, team, tedadbazi, bord, mosavi, bakht, golezade, golekhorde, tafazolegol, emtiaz FROM league_team WHERE namelig=N'اول ايران'AND team=N'پرسپوليس'


SELECT namelig, team, tedadbazi, bord, mosavi, bakht, golezade, golekhorde, tafazolegol, emtiaz FROM league_team WHERE namelig='اول ايران'AND team='پرسپوليس'

farshad22
شنبه 22 اسفند 1388, 09:34 صبح
دیتابیست را با CI_AS collation نصب کردی؟ احتمالا یا از دیتابیس یا از ویندوزته.
با like هم امتحان کن.

bamzi software
شنبه 22 اسفند 1388, 12:34 عصر
با like هم امتحان کن.

بازم جواب نداد:

select distinct serial from formekarbar where namemosabeghe like N'پارسیان '


دیتابیست را با CI_AS collation نصب کردی؟ احتمالا یا از دیتابیس یا از ویندوزته.
یعنی حالا باید چیکار کنم؟
با حروفی مشکل نداره،مثل 'ی'..
چون جاهای دیگه که تو شرط همین کلمه بوده جواب داده،فرقش اینه که ایندفعه داره از یک جدول دیگه select می کنه

علیرضا حسن زاده
شنبه 22 اسفند 1388, 12:53 عصر
با سلام خدمت دوست عزیز
به احتمال زیاد اطلاعات دیتا بیس شما تو یه ویندوز دیگه وارد شده که از کیبورد فارسی استفاده می کرده یا برعکس سیستم شما از کیبورد فارسی استفاده می کنه
اون طوری هم که من متوجه شدم تو اکثر جستجو های شما حرف ی وجود داره:
شما می تونید کل اطلاعات دیتابیس رو با حروف خودتون جایگذاری کنید تا مشکلی در جستجو پیش نیاد یا تو خود برنامه وقتی کوئری رو ایجاد کردین حروف ک و ی رو به صورتی که در پایگاه داده نوشته شده Replace کنید و بعد کوئری رو اجرا کنید من همین مشکل رو داشتم برای تست این هم که مشکل از این کاراکترهاس می تونی قسمتی از کلمه که بدون حرف ی باشه با عملگر لایک جستجو کنی اگه جواب داد مشکل از همین کیبوردهای فارسی که واسه ویندوز ساختن مثلا می تونی برای حستجوی پارسیان فقط پارس رو بزنی اون هم به صورت Like N'%پارس%' که اگه پارسیان رو در جواب نمایش بده مشکل با گفته های بالا حل میشه
موفق باشد

bamzi software
شنبه 22 اسفند 1388, 17:01 عصر
به احتمال زیاد اطلاعات دیتا بیس شما تو یه ویندوز دیگه وارد شده که از کیبورد فارسی استفاده می کرده یا برعکس سیستم شما از کیبورد فارسی استفاده می کنه

بله،برنامه روی هاست هست و توسط کاربر اطلاعات وارد شده.


برای تست این هم که مشکل از این کاراکترهاس می تونی قسمتی از کلمه که بدون حرف ی باشه با عملگر لایک جستجو کنی اگه جواب داد مشکل از همین کیبوردهای فارسی که واسه ویندوز ساختن مثلا می تونی برای حستجوی پارسیان فقط پارس رو بزنی اون هم به صورت Like N'%پارس%' که اگه پارسیان رو در جواب نمایش بده مشکل با گفته های بالا حل میشه


تست کردم،همین طور که گفتین بوده



اون طوری هم که من متوجه شدم تو اکثر جستجو های شما حرف ی وجود داره:
شما می تونید کل اطلاعات دیتابیس رو با حروف خودتون جایگذاری کنید تا مشکلی در جستجو پیش نیاد یا تو خود برنامه وقتی کوئری رو ایجاد کردین حروف ک و ی رو به صورتی که در پایگاه داده نوشته شده Replace کنید و بعد کوئری رو اجرا کنید
اگه میشه این قسمت رو دقیقتر توضیح بدین،ممنون میشم

علیرضا حسن زاده
یک شنبه 23 اسفند 1388, 20:54 عصر
اگه میشه این قسمت رو دقیقتر توضیح بدین،ممنون میشم
برای این کار دوتا راه دارین:

1- تو برنامه ای که نوشتین حروف ی رو با ي و ک رو با ك جایگزین کنی(به تفاوت حروف دقت کن ی فارسی با ي عربی تفاوت داره به دو نقطه زیرش توجه کن واسه ک هم همین طور) حالا چجوری جایگزاری رو انجام بدی به خودت مربوطه مثلا می تونی رشته ای رو که حاوی دستورات SQL هست رو توسط تابع Replace کلاس String استفاده کنی و کاراکترها رو قبل از ارسال به SQL سرور عوض کنی مزیت این روش اینه که تغییری تو دیتابیس نمیدی البته این جایگذاری رو برای دستورات Insert و Update هم باید انجام بدی تا اطلاعات پایگاه دادت از نظم خارج نشه و هرکدوم با یه کدی نمایش داده نشن
2-روش دوم هم اینه که کل فیلدهای رشته ای پایگاه د اده رو که روشون جستجو انجام میدی رو با کاراکترهای فارسی یا اگه فارسی بودن با عربی جایگزین کنی برای این کار هم می تونی از دستورات زیر استفاده کنی:


UPDATE نام جدول SET
نام فیلد=Replace(نام فیلد,N'ی',N'ي')
برای ک هم همین طور.
هر کدوم از روش های مزایا ومعایب خودشون رو دارن که اون هم برمیگرده به اینکه کاربر از چه صفحه کلیدی برای وراد کردن یا جستجوی اطلاعات استفاده می کنه(خیلی صفحه کلید گفتم منظورم برنامه صفحه کلید هست یه فایل DLL تو پوشه System32 ویندوز نه خود صفحه کلید فیزیکی البته ببخشید شما خودتون استادین واسه اونایی که شاید بعدا بیان ببینن گفتم:لبخند:)

اگه بازم مشکلی داشتین در حد توان در خدمتیم
موفق باشید :قلب::بوس:

bamzi software
دوشنبه 24 اسفند 1388, 15:02 عصر
ممنون از راهنمایی شما دوست عزیز

من چون مقداری موضوع برام پیچیده شده می خوام طوری که متوجه شدم رو بگم.شما بفرمایید درسته یا نه:

دیتا بیس روی هاست هست و برنامه صفحه کلید سیستم هاست فارسی هست.
کاربر دیتاها رو از سیستمی وارد می کنه که برنامه صفحه کلید اون عربیه.
حالا وقتی select رو سیستم هاست اجرا میشه به خاطر تضاد کد حروف برنامه صفحه کلیدها دستور select اجرا نمیشه. این درسته؟

اگه این درسته پس من فقط کافیه موقع insert و update حروف عربی رو به فارسی تبدیل کنم.درسته؟یا حتما موقع select هم باید کاری انجام بدم؟