PDA

View Full Version : چرا جای حذف رکورد فرم بسته میشه !



aftabeshargh
سه شنبه 16 اسفند 1390, 14:32 عصر
دستورات ساده زیر باید رکورد رو حذف کنه از دیتابیس اما فرم رو میبنده !!
تو try گذاشتم خطایی که تو برنامه میده عکس زیره
ممنون


If dgv.RowCount = 0 Then
Exit Sub
End If
Try

If MsgBox("با حذف رکورد مورد نظر موافق هستید ؟", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "توجه") = MsgBoxResult.Yes Then
ExecuteQuery("delete tbl_sh where id=" + dgv.CurrentRow.Cells(0).Value.ToString)
End If
Dim dt As New DataTable
dt = SelectQuery("select id as [ردیف],mp as [مبلغ پرداختی],mb as [مبلغ بدهی],ta as [تاریخ]from tbl_sh where ido=" + lblido.Text)

dgv.DataSource = dt


Catch ex As Exception
MsgBox(ex.Message)

End Try

Hybrid
سه شنبه 16 اسفند 1390, 14:39 عصر
سلام دوست عزیز ،

اون end if رو ببر خط آخر ، یک Else هم بالای try قرار بده . در ضمن به جای اون ExitSub هم مثلا یک مسیج باکس قرار بده یا کلا پاکش کن ببین درست میشه.

aftabeshargh
سه شنبه 16 اسفند 1390, 14:53 عصر
رکورد رو حذف میکنه اما بازم بعدش فرم بسته میشه !!!!!!!!! کلافه شدم
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If dgv.RowCount = 0 Then
MsgBox("")
ElseIf MsgBox("با حذف رکورد مورد نظر موافق هستید ؟", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "توجه") = MsgBoxResult.Yes Then
ExecuteQuery("delete tbl_sh where id='" + dgv.CurrentRow.Cells(0).Value.ToString + "'")

Dim dt As New DataTable
dt = SelectQuery("select id as [ردیف],mp as [مبلغ پرداختی],mb as [مبلغ بدهی],ta as [تاریخ]from tbl_sh where ido=" + lblido.Text)

dgv.DataSource = dt
End If

End Sub

Hybrid
سه شنبه 16 اسفند 1390, 15:02 عصر
بنویس else نه elseif . وقتی که تغییرش دادی خط جلوی else رو ببر داخل بدنه else . یعنی چیزی جلوی else نباشه.درضمن دستور delete شما هم اشکال داره ( from رو ننوشتی پایین توضیح دادم).

2 ) دوست عزیز فیلد id داخل بانکتون از نوع autonumber مگه نیست ؟؟ پس چرا اومدی مثل یک رشته باهاش رفتار کردی :


"delete tbl_sh where id='" + dgv.CurrentRow.Cells(0).Value.ToString + "'"

تغییرش بده به :


"delete * from tbl_sh where id=" + dgv.CurrentRow.Cells(0).Value.ToString()

3 ) آخرش این فیلد autonumber نامش id هست یا ido !!!!؟؟؟


select id as [ردیف],mp as [مبلغ پرداختی],mb as [مبلغ بدهی],ta as [تاریخ]from tbl_sh where ido=" + lblido.Text

ببین درست میشه ، در ضمن کدهات رو وقتی اصلاح کردی بزار

aftabeshargh
سه شنبه 16 اسفند 1390, 15:20 عصر
دوست عزیز من برای ارتباط با دیتابیس 2 دوتا روند از قبل تعریف کردم ExecuteQuery و SelectQuery که هیچ مشکلی ندارن و در تمتم فرمهای برنامه ازشون استفاده کردم ، که الان تو این فرم هنگام ویرایش رکورد جدول dgv
به این صورت استفاده میکنم


If MsgBox("با ثبت تغییرات موافقید ؟", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "توجه") = MsgBoxResult.Yes Then
ExecuteQuery("update tbl_sh set mp =N'" + txtmp.Text + _
"',mb=N'" + txtmb.Text + "',ta='" + txttarikh.Text + "' where id =" + dgv.CurrentRow.Cells(0).Value.ToString)

End If

Dim dtb As New DataTable
dtb = SelectQuery("select id as [ردیف],mp as [مبلغ پرداختی],mb as [مبلغ بدهی],ta as [تاریخ]from tbl_sh where ido=" + lblido.Text)

dgv.DataSource = dtb


که هیچ مشکلی ندارند یعنی هم ویرایش میکنه توسط ExecuteQuery و هم فراخوانی میکنه توسط SelectQuery . پس مشکل از این دو نیست و تو بقیه فرم ها هم برا حذف دقیقا از همون کد قبلی که سرش بحث میکنیم استفاده میکنم اما نمیدونم الان چرا فرمم رو میبنده !!!!!!!

ExecuteQuery("delete * from tbl_sh where id=" + dgv.CurrentRow.Cells(0).Value.ToString)

دوست عزیز id اتونامبر و ido نام یک ستون که از جدول tbl_sh انایی که مثل ido هستن فراخوانی میکنم

Hybrid
سه شنبه 16 اسفند 1390, 15:32 عصر
اگه امکان داره پروژت رو بزار.

فرید نجفلو
سه شنبه 16 اسفند 1390, 18:57 عصر
شما باید هم این خطا رو ببینید!!
دوست عزیز شما اومدید در شرطتون از dgv.RowCount = 0 استفاده کردید که چک می کنه آیا گرید سطری داره یانه
اما در دستورتون اومدید از CurrentRow استفاده کردید یعنی اون سطری که انتخابش کردید! در حالی که تو تصویری که گذاشتید هیچ سطری انتخاب نشده!!!
شما باید به جایه dgv.RowCount = 0 بنویسید SelectedRows.Count = 0

xminxmin
سه شنبه 16 اسفند 1390, 22:49 عصر
دوست عزیز :لبخندساده:
شما نه فقط برای این مورد بلکه برای همه موارد می تونید کد رو تریس (Trace) کنید. تا بتونید جایی رو که برنامه خطا داره رو دقیقا پیدا کنید. این کار با F8 و SHIFT+F8 امکان پذیر هست.

البته می دونم که می دونستید اما محض یادآوری بود. :بامزه: