PDA

View Full Version : خطا در join کردن دو جدول اس کیو ال



programerinfonet
سه شنبه 02 آبان 1391, 15:06 عصر
سلام دوستان
من میخوام دوتا از جداولم رو با هم دیگه join کنم و تو دیتاگرید نمایش بدم اما با خطای زیر مواجه میشم
94264

اینم کدمه

string d;
SqlDataAdapter adap;
DataSet ds = new DataSet();
d = "Select ashkhasgroups.id,ashkhasgroups.groupname,ashkhasgr oups.discription,ashkhas.name,ashkhas.tel,ashkhas. mobile,ashkhas.address From ashkhasgroups INNER JOIN ashkhas ON ashkhasgroup.groupname = ashkhas.groups";
adap = new SqlDataAdapter(d, my_con);
adap.Fill(ds, "ashkhas");
dgv.DataSource = ds.Tables["ashkhas"];

programerinfonet
سه شنبه 02 آبان 1391, 16:00 عصر
یکی کمک کنه
یعنی کسی تا به حال به این مشکل بر نخورده بود ؟؟؟؟؟

morteza271
سه شنبه 02 آبان 1391, 16:50 عصر
سلام.
مهندس به این قسمت از کوئری تون دقت کنید :
ON ashkhasgroup.groupname = ashkhas.groups
مگه اسم جدول شما ashkhasgroup یا ashkhasgroups ؟؟؟

programerinfonet
سه شنبه 02 آبان 1391, 19:05 عصر
سلام.
مهندس به این قسمت از کوئری تون دقت کنید :
ON ashkhasgroup.groupname = ashkhas.groups
مگه اسم جدول شما ashkhasgroup یا ashkhasgroups ؟؟؟

بله دوست عزیز
من اسم یکی از جدولام ashkhasgroup و دیگری ashkhas هست

morteza271
سه شنبه 02 آبان 1391, 19:16 عصر
بله دوست عزیز
من اسم یکی از جدولام ashkhasgroup و دیگری ashkhas هست

دوست عزیز یعنی واقعا متوجه اشتباهتون نشدید؟؟؟؟؟!!!!!!!!!
به کوئری تون دقت کنید در قسمت Select اسم جدول رو ashkhasgroups گذاشتین و در قسمت From اسم همون جدول رو گذاشتین ashkhasgroup کدومشون درسته؟؟؟؟!!!!!!!!!

هر کدوم که اشتباهه رو درست کنید.
در متن خطاتون هم مشخصه دقیقا فقط یه خورده دقت کافیه!!!!!!!!!!
این قسمت از کوئری تون رو نگاه کنین :
ON ashkhasgroup.groupname = ashkhas.groups

programerinfonet
سه شنبه 02 آبان 1391, 19:34 عصر
دقیقأ حق با شماست متوچه شدم کدمو اصلاح کردم و برنامه اجرا شد خطا نداد اما دیتاگرید هم خالیه

این کدم شده


string d;
SqlDataAdapter adap;
DataSet ds = new DataSet();
//d = "select * from ashkhas";
d = "Select ashkhasgroups.id,ashkhasgroups.groupname,ashkhas.n ame,ashkhas.tel,ashkhas.mobile,ashkhas.address From ashkhasgroups INNER JOIN ashkhas ON ashkhasgroups.groupname = ashkhas.groups";
adap = new SqlDataAdapter(d, my_con);
adap.Fill(ds, "ashkhas");
dgv.DataSource = ds.Tables["ashkhas"];
dgv.Columns["id"].Visible = false;
dgv.Columns["groupname"].HeaderText = "نام گروه";
dgv.Columns["name"].HeaderText = "نام مشتری ";
dgv.Columns["tel"].HeaderText = " تلفن تماس ";
dgv.Columns["mobile"].HeaderText = " موبایل ";
dgv.Columns["address"].HeaderText = "نشانی";
dgv.Columns["groupname"].Width = 120;
dgv.Columns["name"].Width = 150;
dgv.Columns["tel"].Width = 100;
dgv.Columns["mobile"].Width = 100;
dgv.Columns["address"].AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMod e.Fill;

programerinfonet
سه شنبه 02 آبان 1391, 19:53 عصر
من تو این کد حسابی گیج شدم کمک کنید توروخدا

veniz2008
سه شنبه 02 آبان 1391, 20:14 عصر
سلام.دستور sql شما مشکلی نداره. همیشه در چنین مواقعی اول کوئری رو در sql تست کنید ببینید نتیجه میده یا نه. اگر اونور مشکل نداشتید با دیتاتیبل امتحان کنید.

programerinfonet
سه شنبه 02 آبان 1391, 20:22 عصر
دوست عزیز من اولین پروژمه که با sql مینویسم زیاد تسلط ندارم
الان دقیقأ چی کار کنم که مشکلم حل بشه

programerinfonet
سه شنبه 02 آبان 1391, 20:43 عصر
کدمو تو sql query هم بردم و نتیجه ی اجرا همون خالی بود
حالا چی کار کنم
معادل صحیح این کد چیه
یکی کمک کنه
کمک

veniz2008
سه شنبه 02 آبان 1391, 22:15 عصر
شاید واقعا نتیجه کوئری خالی باشه. هر دو جدولی که در کوئری نوشتید به دقت بررسی کنید. مشکل شما از کوئری نیست.

programerinfonet
سه شنبه 02 آبان 1391, 22:23 عصر
نه من هر جدولی رو که تو کدم آوردم توشون رکورد ثبت شده هست

veniz2008
سه شنبه 02 آبان 1391, 22:32 عصر
فیلدهایی رو که در کوئری با هم مساوی قرار دادی ( ashkhasgroups.groupname = ashkhas.groups ) درون هر دو جدول مساوی هستن؟( حداقل باید یکی از هر کدومشون با هم برابر باشن تا خروجی داشته باشی.). اگر میتونی یه عکس از داده های هر دو جدول بگیر و بزار.

morteza271
سه شنبه 02 آبان 1391, 22:48 عصر
سلام دوست عزیز.
همانطور که دوستان هم توضیح دادن باید در دو جدولتون سطرهایی وجود داشته باشه که مقدار ستون groupname از جدول ashkhasgroups با مقدار ستون groups از جدول ashkhas مساوی باشه.
فقط در این صورت هست که کوئری شما خروجی خواهد داشت. چک کنید ببینید که این مورد در جدوال شما صدق میکنه یا نه!!
اگه بازم مشکلتون برطرف نشد از داده های داخل هر دو جدول به صورت جداگانه عکس بگیرین و اینجا بذارین تا زودتر به مشکلتون برطرف بشه...

programerinfonet
چهارشنبه 03 آبان 1391, 13:47 عصر
بله اینم عکس کوئری sql
94298

veniz2008
چهارشنبه 03 آبان 1391, 14:35 عصر
اگر میتونی یه عکس از داده های هر دو جدول بگیر و بزار.

اگه بازم مشکلتون برطرف نشد از داده های داخل هر دو جدول به صورت جداگانه عکس بگیرین و اینجا بذارین تا زودتر به مشکلتون برطرف بشه...

بله اینم عکس کوئری sql ما گفتیم از کوئری عکس بگیر و بذار؟؟؟

programerinfonet
چهارشنبه 03 آبان 1391, 14:47 عصر
دوست عزیز اینم عکی جدولام کوئری و ... کدمم که قبلأ دادم

SELECT ashkhasgroups.id, ashkhasgroups.groupname, ashkhas.name, ashkhas.tel, ashkhas.mobile, ashkhas.address
FROM ashkhasgroups INNER JOIN
ashkhas ON ashkhasgroups.groupname = ashkhas.groups

94299

programerinfonet
چهارشنبه 03 آبان 1391, 14:51 عصر
در واقع فیلد groupsدر جدول ashkhas از فیلد groupname در جدول groups گرفته میشود یعنی هر دو یکی هستند جدول گروه ها ، گروه ها تعریف شده و در جدول اشخاص اشخاص تعریف می شود که گروه اشخاص رو کار بر از همون گروه هایی که قبلأ تعریف کرده انتخاب می کنه
امیدوارم تونسته باشم مفهوم رو برسونم

veniz2008
چهارشنبه 03 آبان 1391, 15:12 عصر
والا از همون پست های اول مفهوم رسیده. چیزی کم و کسر نیست حاجی جز " داده های درون این دو جدول". :عصبانی++:
عزیز داخل این دو جدول چه داده هایی زدی؟. منظور من و troski دیزاین نیست. منظور ما اون اعداد و حروفی هست که وارد کردی. از اونها عکس بگیر و بذار. :گریه: :گریه:

programerinfonet
چهارشنبه 03 آبان 1391, 15:22 عصر
اینم عکس داده هام که با فلش هم ارتباطشون رو مشخصی کردم
94301

veniz2008
چهارشنبه 03 آبان 1391, 15:39 عصر
جان عزیزت گرفتی ما رو؟خدا وکیلی خیلی اذیت کردی دوست عزیز.
آخه مهندس، کجای groupsname و groups با هم برابرن؟. این که یکیش از نوع رشته وارد کردی اون یکی عدد. چیزی که در inner join و بعد از ON میاد باید با هم برابر باشن. مثلا جفتشون 9 باشه یا مثلا جفتشون کرج باشه. برو یه کم sql یاد بگیر. برو عزیز.
خداحافظ شما.

programerinfonet
چهارشنبه 03 آبان 1391, 16:32 عصر
دوست عزیز شرمنده دیگه من همون اول گفتم که با این دستور اصلأ کار نکردم
حالا شما به این نمونه برنامه نگاه بکن همه چیز دستگیرت میشه

تو این برنامه من میخوام وقتی نام گروه رو تو جدول groups اصلاح کردم . فیلد groups در جدول ashkhas هم اصلاح بشه
94303

veniz2008
چهارشنبه 03 آبان 1391, 16:44 عصر
تو این برنامه من میخوام وقتی نام گروه رو تو جدول groups اصلاح کردم . فیلد groups در جدول ashkhas هم اصلاح بشه
94303
واسه تصحیح باید از update استفاده کنی. شما موقعی که داری groupsname رو تصحیح میکنی، باید id ( منظورم کلید هستش) رو برداری و بعد با یه دستور update بیای و در جدول اشخاص همون رکورد رو تصحیح کنی.( یعنی به اخر دستور update یه where اضافه میکنی و میگی آی دی اون شخص همونی باشه که برداشتی).
فیلد id در هر دو جدول با هم ارتباط دارن؟(یعنی کلید اصلی و کلید خارجی داری؟)

programerinfonet
چهارشنبه 03 آبان 1391, 16:51 عصر
آخه این دوستمون troski گفت که به جای دستور آپدیت به این شکل عمل کن که به جای ذخیره کردن نام گروه برو کدشو از جدولش بخون و اونو ذخیره کن تا نامش از جدولش خونده بشه و این طوری دیگه مجبور نیستی برای هر جدول یک دستور update بنویسی
منم میخوام برنامه یک پارچه باشه دیگه یعنی یک مشخصه در تمام جداول یکی باشه نه اینکه اصلاح شد تو بقیه جداول همون به شکل قبل بمونه

programerinfonet
چهارشنبه 03 آبان 1391, 16:54 عصر
چون تو یکسری برنامه ها دیدم یک فیلد رو تو دیتاگرید نام نشون میده اما میریم تو بانک اطلاعاتیش می بینیم به جای نام کدش هست

veniz2008
چهارشنبه 03 آبان 1391, 17:06 عصر
عزیز من troski منظورش یه چیز دیگه بوده شما اشتباه متوجه شدی. بله شما به جای نام ( که میتونه تکراری باشه) باید کد (همون id که تکراری هم نیست) ذخیره کنید. ولی هرطوری که شما ذخیره کنید در نهایت برای تصحیح حتما باید از دستور update استفاده کنید. اون چیزی که troski گفته بخاطر این بوده که جدولت استاندارد باشه. حالا همون id ای که ذخیره کردی رو بردار و در دستور update جلوی where بذار تا فقط همون رکورد تصحیح بشه. اگه where نذاری همه رکوردها رو تصحیح میکنه.

morteza271
چهارشنبه 03 آبان 1391, 17:08 عصر
دوست عزیز واقعا گرفتی ها .................................................. .....
شما خودتون توی عکس با فلش ارتباطشون رو باهم نشون دادین حالا اومدین توی کوئری تون نوشتین :
ashkhasgroups.groupname = ashkhas.groups

آخه دوست عزیز یه خورده دقت کن فقط با سوال پرسیدن که کارتون جلو نمیره!!!!!!!!
شما باید اینطوری بنوسید :
ashkhasgroups.id = ashkhas.groups

امیدوارم بنونین پروژتون رو تموم کنین ولی اینم بگم حسابی اذیت کردین...............
موفق باشید

morteza271
چهارشنبه 03 آبان 1391, 17:12 عصر
آخه این دوستمون troski گفت که به جای دستور آپدیت به این شکل عمل کن که به جای ذخیره کردن نام گروه برو کدشو از جدولش بخون و اونو ذخیره کن تا نامش از جدولش خونده بشه و این طوری دیگه مجبور نیستی برای هر جدول یک دستور update بنویسی
منم میخوام برنامه یک پارچه باشه دیگه یعنی یک مشخصه در تمام جداول یکی باشه نه اینکه اصلاح شد تو بقیه جداول همون به شکل قبل بمونه
دوست عزیز من کی به شما گفتم به جای دستور update ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟:عصبانی++:
من گفتم به جای اینکه برین نام گروه رو در تمام جدوال ذخیره کنید فقط id اونا رو ذخیره کنید و با join نشون بدین. و وقتی که خواستین مثلا نام گروه رو عوض کنین به جای اینکه برین در همه جدوال update بزنید فقط بر روی جدول ashkasgroups ویرایش رو انجام می دین و سطر مورد نظر رو ویرایش می کنید.

تو رو خدا یه خورده برین مطالعه کنید ...........

programerinfonet
چهارشنبه 03 آبان 1391, 17:19 عصر
نه این جوری نمیشه دوست عزیز وقت شما رو ه میگیرم به این عکس نگاه کن ، این تصویر یکی از جداول بانک یک نرم افزار حسابداریه که وقتی میری توی نرم افزار اون قسمتی رو که من قرمز دورش کشیدم اسامیه اصلیش نمایش داده میشه اینایی که تو جدول ذخیره میشه کدشه
94306

دقیقأ منم عین همینو میخوام میخوام به جای نام مشتری کدش ذخیره بشه ولی توی دیتاگرید برنامه اسمش نمایش داده بشه
بازم عذرخواهی می کنم

programerinfonet
چهارشنبه 03 آبان 1391, 17:24 عصر
بالاخره درست شد دوستان
دست دست دست
ولی ببخشیدااااااااااااااااا
چی کار کنم نمی گرفتم دیگه