PDA

View Full Version : سوال: مشکل در آپدیت کردن جدول



majidjan
چهارشنبه 13 اردیبهشت 1391, 13:41 عصر
با سلام
من تو یکی از فرم هام میخوام که جدولی به نام لیگ رو بر حسب داده های تکست باکس آپ کنم ولی نمیدونم چرا اجرا نمیشه !
میشه منو راهنمایی کنین که اشکال این کد کجاست؟
آیا دستور where من غلطه؟!! چون فکر میکنم مشکل از اون جاست.

SetData(" update lig set ligname=N'" & Trim(TextBox7.Text) & "',timname='" & Trim(TextBox1.Text) & "',timcity='" & Trim(TextBox5.Text) & "',play += '" & Trim(TextBox18.Text) & "',wins+='" & Trim(TextBox8.Text) & "' where ligname=N'" & Trim(TextBox7.Text) & "' and timname=N'" & Trim(TextBox1.Text) & "' and timcity=N'" & Trim(TextBox5.Text) & "' ")

A_1397
چهارشنبه 13 اردیبهشت 1391, 14:11 عصر
دوست عزیز چه ارروری میده؟ تصویرش رو بزار لطفا

majidjan
چهارشنبه 13 اردیبهشت 1391, 14:16 عصر
ارور نمیده !
ثبت نمیکنه مثل اینکه با دستور where مشکل داره و هیچ سطری رو انتخاب نمیکنه و خب ثبت هم نمیکنه !
در واقع چون تو دستور where سه شرط دارم فکر کنم مشکل از اونجا باشه وقتی تک تک مینویسم شرط ها رو اجرا میشه ولی چند شرط باهم رو اجرا نمیکنه.

A_1397
چهارشنبه 13 اردیبهشت 1391, 14:30 عصر
مطمینی رکوردی با این سه شرطی که وارد میکنی وجود داره؟! :متفکر:
این Nی که بعد از نام فیلدت میزاری چیه؟

فرید نجفلو
چهارشنبه 13 اردیبهشت 1391, 14:39 عصر
سلام
دوست عزیز دومورد هست که باید به اونا توجه کنید
1: شما فیلد کلید رو معلوم نکردید و اینجا هم دارید سطری رو با چند تکست باکس ویرایش می کنید و با همون تکست باکس ها جستجو می کنید که در این صورت اگه بعد از لود اطلاعات تکست اکس ها ویرایش بشن شما دیگه نمی تونید اطلاعات اصلی رو داشته باشد پس سطر مورد نظرتون رو هرگز پیدا نمی کنید
احتمال بیشتر هم همینه
2: در استفاده از اوپراتور =+ محتاط باشید چون من دیدم که در اسکیو ال 2005 و پایینتر همچنین اکسس به اون ایراد می گیره

فرید نجفلو
چهارشنبه 13 اردیبهشت 1391, 14:50 عصر
مطمینی رکوردی با این سه شرطی که وارد میکنی وجود داره؟! :متفکر:
این Nی که بعد از نام فیلدت میزاری چیه؟

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

N'String'
--بجای
'string'
اگه رشته مورد نظر فارسی هست حتما از این روش استفاده کنید چون گاهی وقت ها برای مثال در عملیات جستجو با حروف نظیر ی ممکنه با مشکل برخورد کنید ولی با استفاده از N این مشکل حل میشه

majidjan
چهارشنبه 13 اردیبهشت 1391, 15:45 عصر
در مورد کلید باید بگم همون سه شرط کلید جدوله یعنی جدول ما سه کلید نام لیگ ، نام تیم و شهر تیم رو داره که باهم کلید اصلی رو مشخص میکنه.
در مورد =+ هم مشکلی نیست یعنی مساوی هم بزارم اجرا نمیشه مشکل فقط تو قسمت where ه.
گفتم که اگه به جای سه شرط یه شرط رو استفاده کنم تو قسمت where درسته که برنامه غلط میشه ولی خب به هر حال دستور sql اجرا میشه .
میگم نکنه به جای AND باید از چیز دیگه استفاده کنم؟
در مورد N هم همونطور که دوستمون گفتن برای درست کار کردن تو متن های فارسی هستش.(البته اگه اشتباه نکنم!!)

majidjan
چهارشنبه 13 اردیبهشت 1391, 15:55 عصر
در مورد اونی هم که میگید سطری رو با چند تکس باکس ویرایش میکنید و بعد جستجو میکنید ...
این دستور من هم اجرا نمیشه
SetData(" update lig set play = N'" & Trim(TextBox18.Text) & "' where ligname=N'" & Trim(TextBox7.Text) & "' and timname=N'" & Trim(TextBox1.Text) & "' and timcity=N'" & Trim(TextBox5.Text) & "' ")
این دستور که دیگه مشکل قبلی رو نداره؟!! :متفکر:

A_1397
پنج شنبه 14 اردیبهشت 1391, 10:20 صبح
در مورد N:
اگه شما در اسکیو ال با مقادیر رشته ای کار می کنید بهتره از این روش اسفاده کنید:

N'String'
--بجای
'string'
اگه رشته مورد نظر فارسی هست حتما از این روش استفاده کنید چون گاهی وقت ها برای مثال در عملیات جستجو با حروف نظیر ی ممکنه با مشکل برخورد کنید ولی با استفاده از N این مشکل حل میشه
خب در این صورت این دستور رو درست نوشتم؟
Recordset1.Fields("field1").value=N & Recordset2.Fields("field1").value

فرید نجفلو
پنج شنبه 14 اردیبهشت 1391, 11:38 صبح
خب در این صورت این دستور رو درست نوشتم؟
Recordset1.Fields("field1").value=N & Recordset2.Fields("field1").value
سلام
نخیر درست نیست چون در Recordset مقادیر به صورت رشته ای داده می شن شما از N زمانی استفاده می کنید که در حال نوشتن یک دستور SQL از جمله SELECT هستید و می خواید اون دستور رو به طور مستقیم اجرا کنید در حالی که در این روش دستور اصلی توسط شما اجرا نمی شه و Recordset خودش دستور رو ایجاد و اجرا می کنه که به احتمال زیاد اونم دستور رو به نحوه صحیح ایجاد می کنه
و N رو هم به صورت رشته وارد نکردید(خطای کامپایل در VB.NET و خطای منطقی در VB6 داره)

در ضمن چرا شما از Recordset استفاده کردید !!! امیدوارم که این کد در دات نت نوشته نشده باشه

فرید نجفلو
پنج شنبه 14 اردیبهشت 1391, 11:54 صبح
در مورد اونی هم که میگید سطری رو با چند تکس باکس ویرایش میکنید و بعد جستجو میکنید ...
این دستور من هم اجرا نمیشه
SetData(" update lig set play = N'" & Trim(TextBox18.Text) & "' where ligname=N'" & Trim(TextBox7.Text) & "' and timname=N'" & Trim(TextBox1.Text) & "' and timcity=N'" & Trim(TextBox5.Text) & "' ")
این دستور که دیگه مشکل قبلی رو نداره؟!! :متفکر:



دوست عزیز اگه می خواید کاملا مطمئن بشید که دارید دستور رو به صورت صحیح وارد می کنید یک Brack Point بذارید و این دستور کپی و به صصورت مستقیم در SQL اجرا کنید اگه درست اجرا شد باید متد SetData هم بررسی بشه اگه نشد دستور رو به صورت Slect بنویسید یعنی به این صورت:
update lig set play = N'بازی' where ligname=N'لیگ' and timname=N'تیم' and timcity=N'شهر'
--تبدیل شود به
Select * From lig Where ligname=N'لیگ' and timname=N'تیم' and timcity=N'شهر'


دستور دوم باید حداقل (و در اصل) یک رکورد رو برای شما نمایش بده اگه نمایش نداد شما در وارد کردن پارامتر ها مشکلی دارید و ممکنه بین عملیات لود و ویرایش اطلاعات رو ویرایش می کنید و به این صورت سطر مورد نظر رو پیدا نمی کنید (شاید در جایی از برنامه به صورت ناخواسته ویرایش میشن که شما متوجه نمی شید یا فاطله خالی و مشابه اون وجود داره که دیده نمی شه)

majidjan
پنج شنبه 14 اردیبهشت 1391, 15:14 عصر
Brack Point ای که گفتی رو بلد نیستم ولی خب تقریبا فهمیدم منظورتون چیه
شما میگید بجای آپدیت select کن ببین اصلا اون اطلاعاتتو انتخاب میکنه ؟!! منم بجای آپ select کردم و تو یه دیتا گرید اطلاعات رو Set کردم یعنی اگه اطلاعاتی با آن سه شرط تو جدول وجود داشته باشه تو دیتاگرید نشون بده ولی همون طور که تو update عمل نمیکنه تو select هم انتخاب نمیکنه انگار که سطری وجود نداره در حالی که وجود داره !!
فکر کنم تو دستور where باید یه مشکلی باشه که نمیاره
مثلا اشکالاتی همچون فارسی بودن و غیره
دو سه روزه منو درگیر کرده :عصبانی++:
دیگه نمیدونم چیکار کنم :گریه:

majidjan
پنج شنبه 14 اردیبهشت 1391, 15:37 عصر
ای وای برمن ای وای بر من
میگن جوینده یابنده است !!!
بالخره با هزار جور اینور اونور کردن یه کار کردم که کار کنه !
دست همگی درد نکنه.
بازم اگه مشکلی بود مزاحم میشم و میدونم هم میشم !! :خجالت:
مثلا اینکه یه طوری حل شد حالا میشه اطلاعات دیتا گریدم رو بتونم یه طوری به چاپ برسونم؟
چون اطلاعات دیتا گریدم به وسیله دستورات sql ایجاد شده و من از چندین جدول و غیره این اطلاعات رو استخراج کردم و تو دیتا گرید ریختم ولی تو ReportViewer نمیدونم چجوری کار کنم ، فقط بلدم از یه جدول و از فیلدهای خاص آن خروجی بگیرم و چاپ کنم از کریستال ریپورت هم هیچی نمیدونم برای همین میخوام تو ReportViewer باشه.

ممنون بابت همه چی

فرید نجفلو
پنج شنبه 14 اردیبهشت 1391, 18:50 عصر
دوست عزیز شما باید منبع گزارش رو به صورت دینامیکی به گزارش بدید و معمولا با دیتا ست و دیتا تیبل یه بررسی تو سایت و تالار خود کریستال داشته باشد