PDA

View Full Version : مشکل با SQL(سوال یک مبتدی)



aminbrleevb
جمعه 27 دی 1387, 17:44 عصر
با سلام و عرض خسته نباشید
من به تازگی شروع به کار با sql کرده ام
و برایم در ابتدای کار یه مشکلی پیش اومده باید بگم که من تو sql خیلی تازه کارم
تا الانم ساختن یه دیتا بیس به همراه یه جدول رو یاد گرفتم و بلدم با دات نت چجوری محتویات جدولم رو وارد یه دیتاگرید کنم ولی یه مشکلی که دارم اینه که من فقط یه بار به جدولم دیتا اضافه کنم و بعد از اون دیگه نمیتونم و برنامم ارور میده که در زیر کد دکمه اضاف کردن یه سطر رو میزارم و پایینش رجع به ارور توضیح میدم
همونجوری که مشاهده میکنید در زیر کد زیر را در درون یه دکمه قرار دادم


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
strsql = "insert into jadval1(esm,famil,tt,mt)values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "')"
cmd.CommandText = strsql
cmd.Connection = acon
DataGridView1.TabIndex = 2
cmd.ExecuteNonQuery()
ds.Tables("jadval1").Clear()
da.Fill(ds, "jadval1")


End Sub




وقتی جدولم خالیه برای بار اول محتویات هر چهار تکست باکس در جدول قرار میگیره ولی بار های بعدی در خط روبرو ارور میده در



cmd.ExecuteNonQuery()


اینم کد ارور



eror

Violation of PRIMARY KEY constraint 'PK_jadval1'. Cannot insert duplicate key in object 'jadval1'.
The statement has been terminated


من می خوام پس از هر بار کلیک کردن یه سطر یه انتهای جدول اضافه کنه لطفا بگید مشکل از کجاست

و یه سوال دیگه هم اینه که آیا SQL برنامه قوی هست هدف من استفاده از آن در یه هاست هست آیا برنامه SQL برنامه قوی هست و پشتبیانی خوبی داره یا نه در کل نظرتون را راجع به اینکه من SQL رو انتخاب کردم بگید
با تشکر

linux
جمعه 27 دی 1387, 22:56 عصر
PK یا همون کلید اصلی شما تکراری هست بخاطر این خطا میده.

aminbrleevb
جمعه 27 دی 1387, 23:17 عصر
با تشکر از شما
ولی اگه یه کم بیشتر توضیح میدادین چیزی میشد
این همه من سوال کردم بهتون هم گفتم که بلد نیستم بگو کد بالا رو چیکار کنم که دیگه اذیت نکنه
لطفا با حوصله جواب بدین
باتشکر

Javadxp
جمعه 27 دی 1387, 23:45 عصر
جدول شما دارای یه کلید اصلیه (Primary key). کلید اصلی نباید NULL یا تکراری باشه. این خطا هم به خاطر وجود مقدار تکراری برای کلید اصلیتونه. اگه ممکنه شما فیلدهای جدولتون رو بنویسین تا بهتر بتونیم بحث کنیم.

aminbrleevb
شنبه 28 دی 1387, 02:11 صبح
دوست من فیل هلی جدول من (esm,famil,tt,mt) هستند
من واقعا شرمندم که نمیدونم چی کار کنم فقط خواهشم اینه که کمک کنید
یه دیتابیس ساختم که چهر تا ستون داره ستون اولی رو ست کردم و تیک ستون آخری رو گذاشتم و همه چیو تو پستای قبلی گفتم
با تشکر

aminbrleevb
شنبه 28 دی 1387, 12:34 عصر
آقا تورو خدا کمک کنین

slashslash2009
شنبه 28 دی 1387, 13:48 عصر
ببین بهتره کلیدت رو برداری از روی فیلدت و یا اینکه رکورد تکراری وارد نکنی راست کلیک روی فیلد مورد نظر و remove primary key رو بزن خودتو خلاص کن البته این کارهارو باید تو قسمت sqlserver management انجام بدی . یا از خود visual stodio قسمت server explorer بعد فایلتو باز کنی تو این قسمت و بعدش رو جدولت راست کلیک کنی وopen teble defintion رو بزنی و کلیدتو پاک کنی .

vcldeveloper
شنبه 28 دی 1387, 16:48 عصر
سعی کنید برای تاپیکتون عنوان مناسب انتخاب کنید. 90% افرادی که اینجا تاپیک ایجاد می کنند با SQL یا SQL Server مشکل دارند، پس عنوان شما کمکی به پی بردن کاربران تالار به موضوع تاپیک شما نمیکنه.
تاپیک هایی که عنوان مناسب نداشته باشند، حذف خواهند شد!

aminbrleevb
شنبه 28 دی 1387, 16:55 عصر
با تشکر از شما دوست عزیزم اون مشکل من خوشبختانه رفع شد
حالا چندتا سوال دیگه دارم که یکی یکی میپرسم
1 من وقتی یه فیلد رو delete می کنم در datagrid تغییرات رو نمیبینم و مجبورم برنامه رو ببندم و دوباره باز کنم آیا برای رفع این مشکل راهی وجود داره
2 وقتی من یه فیلر رو به دیتا بیم ضافه میکنم data grid به بالاترین سطر خود میره
من از کد زیر استفاده کردم ولی جواب نداد
a = DataGridView1.RowCount
DataGridView1.TabIndex = a - 1
3 من vb6 تا الان کار میکردم یه دستوری تو ویبی وجود داره که می خوام ببینم معادلی تو دات نت داره یا نه
1 DoEvents
2 On Error Resume Next
با تشکر فراوان
............................................
با تشکر از شما آقای کشاورز
آیا من باید خود مشکلم رو به عنوان اسم تاپیک به کار ببرم
در این صورت عنوان خیلی بزرگ میشه عیبی نداره

vcldeveloper
شنبه 28 دی 1387, 17:23 عصر
آیا من باید خود مشکلم رو به عنوان اسم تاپیک به کار ببرم
در این صورت عنوان خیلی بزرگ میشه عیبی نداره
همین که عبارتی به کار ببرید که موضوع کلی تاپیک را برساند کفایت میکنه، مثلا برای همین تاپیک می تونستید بنویسید "مشکل در وارد کردن داده به جدول".

موفق باشید

aminbrleevb
شنبه 28 دی 1387, 17:36 عصر
با تشکر از شما مدیر عزیز و مهربان
................................................
سوال دیگه ای دارم
وقتی ما یه تکست داریم و می خواهیم مقدار اون تکست رو در یهمتغیر ببریم دستور
a=textbox1.text
که باعث میشه مقدار اون تکست در متغیر a قرار بگیره حالا من می خوام همین کارو با دیتاگرید بکنم ولی نمیدونم چی کار کنم می خوام وقتی روی یکی از سطرها سلکت میکنم مقدار اون وارد یه متغیر بشه
با تشکر

slashslash2009
شنبه 28 دی 1387, 18:48 عصر
با تشکر از شما دوست عزیزم اون مشکل من خوشبختانه رفع شد
حالا چندتا سوال دیگه دارم که یکی یکی میپرسم
1 من وقتی یه فیلد رو delete می کنم در datagrid تغییرات رو نمیبینم و مجبورم برنامه رو ببندم و دوباره باز کنم آیا برای رفع این مشکل راهی وجود داره
با تشکر فراوان
............................................


باید جدولتو refresh کنی . بعد از هر بار insert یا delete باید این کارو کنی از دوباره جدولتو پر کن


DataTable dt = new DataTable();
connect consql = new connect();
dt = consql.MySelect("select * from input where code='" + comboBox1.Text + "'");
dataGridView1.DataSource = dt;

من که این کارو میکنم البته این کدو بهتره تو یه private بنویسی

aminbrleevb
شنبه 28 دی 1387, 18:53 عصر
با تشکر از شما دوست عزیز
ولی کد بالا نتونست مشکل منو حل کنه بزارین یه جور دیگه بگم فرض کنید که یه جدول داریم که اون جدول دارای چندین سطر و ستون هست و یه تکست باکس هم داریم من می خوام وقتی روی یکی از خونه های این جدول کلیک میکنم مقدار اون سلول در تکست باکس نمایش پیدا کنه
و اگه ممکنه بگید که چجوری میشه وقتی بر روی یکی از خونه های جدول کلیک می کنیم مثلا شماره raw رو بهمون بده و چجوری میشه روی یکی از سطر ها بدون کلیککردن و فقط با یه کد سلکت کرد
با تشکر
................
منظورم 2 پست پیش بود

slashslash2009
شنبه 28 دی 1387, 20:30 عصر
اگه می خوای روی هر سلول از دیتاگرید کلیک کردی فقط همون خونرو مثلا تو یه تکست باکس یا لیبل بهت نشون بده ازین کد استفاده کن :


label25.Text = dataGridView1.CurrentCell.Value.ToString();

aminbrleevb
شنبه 28 دی 1387, 20:48 عصر
با تشکر از شما دوست عزیزم
حالا یه مشکلی دیگه پیش اومده به کد زیر دقت کنید
dell = DataGridView1.CurrentCell.Value
cmd.CommandText = "DELETE FROM jadval1 WHERE esm=dell"
متاصفانه در خط دوم متغیر مقدار dell را قبول نمی کند آیا راه حلی برای رفع این مشکل وجود دارد
بازم مرسی

slashslash2009
شنبه 28 دی 1387, 21:12 عصر
DELETE FROM jadval1 WHERE esm=dell
این کد مربوط میشه به زبان sql و شما دارید به نحوی در سی شارپ استفاده میکنید پس باید یه جوری درستش کنی البته قبل از اینکه یک کد باشه یک رشته هست بهتره اونو اینجوری بنویسیش :


cmd.CommandText = "DELETE FROM jadval1 WHERE esm='" + dell.ToString() + "'";

slashslash2009
شنبه 28 دی 1387, 22:20 عصر
این یکی رو نمیدونم بهتره یه سرچی کنی شاید یه چیزی پیدا کنی .

aminbrleevb
شنبه 28 دی 1387, 22:53 عصر
با تشکر از شما دوست عزیزم اون مشکل من خوشبختانه رفع شد
حالا چندتا سوال دیگه دارم که یکی یکی میپرسم
(1) وقتی من یه فیلر رو به دیتا بیسم اضافه میکنم data grid به بالاترین سطر خود میره
من از کد زیر استفاده کردم ولی جواب نداد


a = DataGridView1.RowCount
DataGridView1.TabIndex = a - 1

(2) من vb6 تا الان کار میکردم یه دستوری تو ویبی وجود داره که می خوام ببینم معادلی تو دات نت داره یا نه

DoEvents

On Error Resume Next
با تشکر فراوان

slashslash2009
یک شنبه 29 دی 1387, 10:51 صبح
بهتره این مشکلتو بری تو تاپیک سی شارپ مطرح کنی