PDA

View Full Version : سوال: مشکل Update کردن با فیلد Autonumber در اکسس



ali190
شنبه 06 فروردین 1390, 17:30 عصر
باسلام و عرض خسته نباشید خدمت همه دوستان
من در برنامه ام یه مشکل عجیب دارم
به دستورات زیر توجه بفرمائید


PrivateSub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim con As OleDbConnection = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=bank.mdb;")
Dim command As OleDbCommand = New OleDbCommand
command.Connection = con
command.CommandText = "update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = '" & TextBox7.Text & "'"
command.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
command.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
command.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
command.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
command.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
command.Parameters.AddWithValue("@pedar", Trim(TextBox3.Text))
command.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))


con.Open()


command.ExecuteNonQuery()


con.Close()


EndSub

textbox7 شماره id رکوردیست که کاربر در دیتاگرید اون رو انتخاب میکنه
من یه فیلد Id در جدولم دارم که از نوع autonumber هست
متاسفانه دستور update ام با وجود این فیلد کار نمیکنه
اما زمانیکه این فیلد رو از autonumber به text تبدیل میکنم مشکلم حل میشه
آیا امکانش هست دستور update با نوع فیلد autonumber مشکل داشته باشه؟
ممنون میشم کمکم کنید
یاعلی

Mani_rf
شنبه 06 فروردین 1390, 18:36 عصر
نوع فیلد id شما عددی است در صورتی که آن را با مقداری رشته ای مقایسه می کنی. کتیشن ('') های قبل و بعد TextBox7 را حذف کن و دوباره امتحان کن.
بهتر است که مقدار TextBox7 را نیز به عدد تبدیل کنی. یعنی Val(TextBox7.Text)

ali190
شنبه 06 فروردین 1390, 18:45 عصر
سلام
ممنون از توضیحاتتون
این راه رو هم امتحان کردم
متاسفانه نشد
به این دستور که میرسه اشکال میگیره :
command.ExecuteNonQuery()
نکته دیگه اینکه من با همین فرمت دستور delete ام رو به درستی اجرا میکنم:
Dim con As OleDbConnection = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=bank.mdb;")
Dim command As OleDbCommand = New OleDbCommand
command.Connection = con
command.CommandText = "delete * from table1 where id=@id"
command.Parameters.AddWithValue("@id", Trim(TextBox7.Text))
con.Open()

command.ExecuteNonQuery()

con.Close()


ممنون میشم راهنمایم کنید
یاعلی

Mani_rf
شنبه 06 فروردین 1390, 19:02 عصر
برای Update کردن هم ID را به صورت پارامتر بفرست. احتمالا مشکل از همون نوع داده باشه. اگر نشد.
1- در قسمت Server Explorer کد SQL که تولید می کنی را اجرا کن ببین خطایی که میده چیه.
2- اگر نشد؛ متن پیغام خطا را کپی کن اینجا یا از پیغام خطا عکس بگیر ببینیم مشکلش چیه!

ali190
یک شنبه 07 فروردین 1390, 10:09 صبح
سلام خدمت همه عزیزان
پروژه ام رو جهت مشاهده و راهنمایی در اینجا آپلود میکنم
ابتدا رکورد مورد نظر رو انتخاب کنید ، سپس جهت ویرایش رکوردها بر روی دکمه ویرایش کلیک کنید ، بعد از انجام تغییرات بر روی دکمه ثبت تغییرات کلیک کنید تا خطای مربوطه رو مشاهده بفرمائید
ممنون و متشکر از لطف شما
یاعلی

alimanam
یک شنبه 07 فروردین 1390, 13:14 عصر
با سلام وتبریک سال نو ....

دوست عزیز شما تا تونسته بودین لقمه رو هی دورسرتون چرخونده بودی ......... :گیج: واسه همچین کاری اصلاً نیاز به این همه کد نبود که !!! مشکل شما از Bind کردن کنترل های تکس بود . کدها رو این جوری تغییر بده مشکلتون حل میشه ...



Imports System.Data.OleDb
Public Class Form1
Dim cnnstring As String = "provider=microsoft.jet.oledb.4.0;data source=bank.mdb;"

Sub loaddata()
Dim ad As New OleDbDataAdapter("Select * from Table1", cnnstring)
Dim dt As New DataTable
ad.Fill(dt)
grdAuthorTitles.DataSource = dt
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
loaddata()
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Try
Dim cnn As New OleDbConnection(cnnstring)
Dim cmd As New OleDbCommand("update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = " & CInt(TextBox7.Text), cnn)
If cnn.State = ConnectionState.Closed Then cnn.Open()
With cmd
.Parameters.Clear()
.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
.Parameters.AddWithValue("@pedar", Trim(TextBox5.Text))
.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))
.ExecuteNonQuery()
End With
cnn.Close()
MsgBox("Done !", MsgBoxStyle.Information)
loaddata()
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Exclamation)
End Try
End Sub

Private Sub grdAuthorTitles_CellMouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArg s) Handles grdAuthorTitles.CellMouseUp
If Not grdAuthorTitles.Rows.Count = 0 Then
TextBox1.Text = grdAuthorTitles.CurrentRow.Cells(1).Value
TextBox2.Text = grdAuthorTitles.CurrentRow.Cells(2).Value
ComboBox1.Text = grdAuthorTitles.CurrentRow.Cells(3).Value
TextBox3.Text = grdAuthorTitles.CurrentRow.Cells(5).Value
TextBox4.Text = grdAuthorTitles.CurrentRow.Cells(4).Value
TextBox5.Text = grdAuthorTitles.CurrentRow.Cells(6).Value
TextBox6.Text = grdAuthorTitles.CurrentRow.Cells(7).Value
TextBox7.Text = grdAuthorTitles.CurrentRow.Cells(0).Value
End If
End Sub

End Class




موفق باشید ./

asif1358
یک شنبه 07 فروردین 1390, 21:53 عصر
دوستان گرامی
لطفا به مسایل ابتدایی هم توجه کنین! مشکل از این بود که پیش از مقدار دهی Command کانکشن را باز نکرده بود!!!!!!!!!!!!!!!1

ali190
دوشنبه 08 فروردین 1390, 00:00 صبح
سلام
کانکشن که باز بود:


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim con As OleDbConnection = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=bank.mdb;")
Dim command As OleDbCommand = New OleDbCommand
command.Connection = con
command.CommandText = "update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = '" & Val(TextBox7.Text) & "'"
'command.Parameters.AddWithValue("@id", Trim(TextBox7.Text))
command.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
command.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
command.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
command.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
command.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
command.Parameters.AddWithValue("@pedar", Trim(TextBox3.Text))
command.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))
con.Open()
command.ExecuteNonQuery()
con.Close()
End Sub