ورود

View Full Version : مشکل در حذف و پیغام های رکوردست



moos111
یک شنبه 30 فروردین 1388, 10:46 صبح
دوستان سلام ، خسته نباشید.
ببخشید میشه بگید مشکل این تابع چیه؟
مخ ما رو ترکوند همش پیغام میده
توجه : تو یکی دو تا فیلد با فیلد name_n هم نام (یکسان) پیغام نمیده اما اگه چند تا بشه یا فیلد ها مختلف باشه پیغام میده.

Private Sub Delete_nasia()
If Ad2.Recordset.BOF = True Then
Exit Sub
End If

If Ad2.Recordset.EOF = False Then
For i = 0 To Ad2.Recordset.RecordCount
If Ad2.Recordset.BOF = True Then
Exit Sub
End If
If Cb_0.Text = Ad2.Recordset.Fields("name_n") Then
Ad2.Recordset.Delete
End If

Ad2.Recordset.MoveNext

If Ad2.Recordset.EOF = True Then
If Ad2.Recordset.RecordCount = 0 Then
Ad2.Refresh
Exit Sub
Else
If Ad2.Recordset.RecordCount > 0 Then
Ad2.Recordset.Update
Ad2.Refresh
Ad2.Recordset.MoveFirst
Exit Sub
End If
End If
End If
Next
End If
End Sub


این پیغامشه :
run-time error '-2147217864(80040e38)':
row cannot be located for updating.some values may have been changed since it was last read

بعضی وقتها هم اینو میده :
run-time error '-2147467259(80004005)':
key column information is insufficient or incorrect. too many rows were affected update.

red11011
دوشنبه 31 فروردین 1388, 09:04 صبح
پیغام اولی میگه رکوردهایی که قصد انجام این عمل روی اونها رو دارین تغییر کردن
پیغام دومی هم میگه شما رکوردهایی دارین که دارای مقادیر یکسانی هستن و من نمیدونم کدومشون رو باید تغییر بدم

البته یکم خودمونی گفتم و ببیخشید که تحت الفضی ترجمش نکردم اینجوری بهتر متوجه میشین

moos111
دوشنبه 31 فروردین 1388, 12:41 عصر
خواهش می کنم شما بزرگواریت

من هر چی روی این تابع کار میکنم نمی دونم مشکلش چیه ؟

شما می تونید ببینید مشکل از کجاست یا تابعی بنویسید که بتونه هر اسمی رو که در تکس باکس زدیم و سپس گزینه پاک کردن را زدیم هر چی رکوردهایی که در جدول با نوشته تکس باکس یکی بود را حذف کند
مثلا : رکورد های جدول ما به صورت زیر هستش
علی
حسن
علی
حسین
حسن
حسن
علی
علی
حسین
علی

و من می خواهم مثلا اگر علی رو در تکس باکس زدیم تابع از اولین رکورد تا آخرین رکورد بگرده و هر رکورد "علی " بود را حذف کنه

سپاسگذار میشم اگه کسی بتونه این کار رو برام انجام بده یا مشکل تابع زیر را بگه :


Private Sub Delete_nasia()
If Ad2.Recordset.BOF = True Then
Exit Sub
End If

If Ad2.Recordset.EOF = False Then
For i = 0 To Ad2.Recordset.RecordCount
If Ad2.Recordset.BOF = True Then
Exit Sub
End If
If Cb_0.Text = Ad2.Recordset.Fields("name_n") Then
Ad2.Recordset.Delete
End If

Ad2.Recordset.MoveNext

If Ad2.Recordset.EOF = True Then
If Ad2.Recordset.RecordCount = 0 Then
Ad2.Refresh
Exit Sub
Else
If Ad2.Recordset.RecordCount > 0 Then
Ad2.Recordset.Update
Ad2.Refresh
Ad2.Recordset.MoveFirst
Exit Sub
End If
End If
End If
Next
End If
End Sub


این پیغامشه :
run-time error '-2147217864(80040e38)':
row cannot be located for updating.some values may have been changed since it was last read

بعضی وقتها هم اینو میده :
run-time error '-2147467259(80004005)':
key column information is insufficient or incorrect. too many rows were affected update

red11011
سه شنبه 01 اردیبهشت 1388, 08:20 صبح
فعلا این رو داشته باش

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Command1_Click()
If cnn.State = 1 Then cnn.Close
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\delet.mdb;"
rs.CursorLocation = adUseClient
rs.Open "DELETE From t where name='" & Text1.Text & "' ;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
If rs.State = 1 Then rs.Close
rs.Open "select * from t ;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
Set Me.DataGrid1.DataSource = rs
End Sub

Private Sub Form_Load()
If cnn.State = 1 Then cnn.Close
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\delet.mdb;"
rs.CursorLocation = adUseClient
rs.Open "select * from t ;", cnn, adOpenKeyset, adLockPessimistic, adCmdText
Set Me.DataGrid1.DataSource = rs
End Sub
Private Sub Form_Unload(Cancel As Integer)
cnn.Close
Set cnn = Nothing
Set rs = Nothing
End Sub

moos111
سه شنبه 01 اردیبهشت 1388, 17:58 عصر
میشه با استفاده از شی adodc این تابع رو تعریف کنید.
یکی تابع هم اگه می تونید و زحمتی نیست بدون استفاده از دستورات SQl با حلقه ها بنویسید. چون می خوام بدونم مشکل کجاست .

با تشکر و سپاس فراوان

xxxxx_xxxxx
سه شنبه 01 اردیبهشت 1388, 18:24 عصر
ببينيد شما خيلي شرط هاي اضافي استفاده كرديد كه اصلاً هيچ نيازي به اونها نيست. و چند اشتباه كوچيك ديگه كه مهم هستند.
من چيزهايي كه به كد شما اضافه كردم رو با رنگ قرمز مشخص كردم.
همچنين سعي كنيد كدهاي برنامه رو منظم بنويسيد تا خوانايي بيشتري داشته باشند.
و همچين در دستورات شرطي اگر يك دستور بعد از آن اجرا خواهد شد آن را جلوي خود خط if بنويسيد. اينطوري نيازي به end if نداريد.
اين كد هيچ تضميني براي صحيح اجرا شدن نداره.



Private Sub Delete_nasia()
If Ad2.Recordset.BOF = True Then Exit Sub
If Ad2.Recordset.EOF = False Then
For i = 0 To Ad2.Recordset.RecordCount - 1
If Ad2.Recordset.BOF = True Then Exit Sub
If Cb_0.Text = Ad2.Recordset.Fields("name_n") Then
Ad2.Recordset.Delete
Ad2.Refresh
End If
Ad2.Recordset.MoveNext
If Ad2.Recordset.EOF = True Then
If Ad2.Recordset.RecordCount = 0 Then
Ad2.Refresh
Exit Sub
Else
If Ad2.Recordset.RecordCount > 0 Then
Ad2.Recordset.Update
Ad2.Refresh
Ad2.Recordset.MoveFirst
Exit Sub
End If
End If
End If
Next
End If
End Sub

xxxxx_xxxxx
سه شنبه 01 اردیبهشت 1388, 19:05 عصر
اين اون چيزي هست كه شما مي خواين:


On Error Resume Next
Adodc2.Recordset.MoveFirst
For i = 0 To Adodc2.Recordset.RecordCount - 1
If Adodc2.Recordset.Fields("Name") = Text1.Text Then
Adodc2.Recordset.Delete
Adodc2.Refresh
End If
Adodc2.Recordset.MoveNext
Next i

red11011
چهارشنبه 02 اردیبهشت 1388, 08:37 صبح
دوست گرامی دستورات کار با اکثربانکهای اطلاعاتی دستورات sql هستن اکیدا به شما توصیه میکنم از این دستورات استفاده کنید و سعی کنید اونها رو یاد بگیریدو دنبال روشهای غیر استاندارد نباشید مگه اینکه مجبور باشین!!

moos111
چهارشنبه 02 اردیبهشت 1388, 13:31 عصر
دوستان عزیز red11011 (http://barnamenevis.org/forum/member.php?u=97424) و xxxxx_xxxxx (http://barnamenevis.org/forum/member.php?u=46030) از جواب هایتان سپاسگذارم.

دوست عزیز xxxxx_xxxxx (http://barnamenevis.org/forum/member.php?u=46030) وقتی از adodc.Refresh استفاده می کنیم اولین رکورد ، فعال یا فوکوس را می گیرد پس Recordset.MoveNext بی تاثیر می شود . و دوباره از نو شروع می کند .

دوست عزیز red11011 (http://barnamenevis.org/forum/member.php?u=97424) مرجعی برای دستورات SQL دارید یا فایل آموزشی (صرفا فارسی باشد) . من از تابع شما استفاده کردم خیلی راحت و سریع عملیات رو انجام داد میشه فهمید که کد های که در این تابع های SQL به کار رفته چه جوری هستش ؟

red11011
شنبه 05 اردیبهشت 1388, 07:48 صبح
http://www.barnamenevis.org/forum/showthread.php?t=104724
این لینک رو ببینید بهتون میتونه کمک کنه