PDA

View Full Version : ثبت اتوماتیک شماره مشتری (شمارنده)



sh
سه شنبه 20 دی 1384, 21:00 عصر
در یه پروژه در نسخه 2005 مشخصات زیر را در نظر بگیرید

در قسمت ثبت مشتریان شماره مشتری باید خودکار و به ترتیب ایجاد و ثبت شود با در نظر گرفتن تکراری نبودن و غیره ..

بانک برنامه هم اکسس هست
از فیلد اتونامبر هم نمیشه استفاده کرد

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

در فرم لود برنامه چک میکنم اگر این جدول حاوی رکورد نیست Textbox عدد 1 را که اولین شماره مشتری میباشد نشان میدهد. در زیر کلید ثبت شماره مشتری هم در جدول مشتریان ثبت شده و هم همان ردیف اول را در دیتاست آپدیت میکند یعنی جدول نگهداری همیشه حاوی 1 ردیف هست

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

Try
If Me.MoshtaricTableAdapter.Fill(Me.SoftCityDataSet.m oshtaric) = 0 Then
TextBox2.Text = 1
Else
Dim x As Int32 = 0
x = Me.SoftCityDataSet.moshtaric.Rows(0).Item("mcode")
TextBox2.Text = x + 1
End If

این روال فرم لود بود حالا در زیر دکمه ثبت :

Dim x As Int32 = 0
x = Me.SoftCityDataSet.moshtaric.Rows.Count
If x = 0 Then
Me.SoftCityDataSet.moshtaric.AddmoshtaricRow(TextB ox2.Text.Trim)
Else
For Each dr As DataRow In Me.SoftCityDataSet.moshtaric
dr.BeginEdit()
dr("mcode") = CInt(TextBox2.Text.Trim)
dr.EndEdit()
Next
End If
Me.MoshtaricTableAdapter.Update(Me.SoftCityDataSet .moshtaric)
Dim x1 As Int32 = 0
x1 = Me.SoftCityDataSet.moshtaric.Rows(0).Item("mcode")
TextBox2.Text = x1 + 1

ولی هزار جور خطا میده بعضی موقع هم به جای اینکه در جدول Moshtaric که کدها نگهداری میشن فقط رکورد اول رو آپدیت کنه میاد رکورد جدید اضافه میکنه در صورتی که من شرط IF گذاشتم که فقط اگر تعداد رکوردها 0 هست رورد اضافه بشه

اگر میشه حتما یه تست کنید که برای مسئله به این سادگی اعصابم خورد شده
خطای مورد نظر هم اینه :

بابک زواری
پنج شنبه 22 دی 1384, 01:07 صبح
شهریار جان امکانش هست این تیکه کدت رو با فرم و بانکش بذاری تا یکم روش کار کنم ؟

sh
شنبه 24 دی 1384, 16:37 عصر
خب بالاخره دو راه حل با کمک دوستان پیدا شد اینجا میگذارم شاید ه درد بقیه هم بخوره

یکی اینکه با یه دستور Select بیشترین مقدار فیلد شماره مشتری رو خوانده (بوسیله MAX) بعد یکی به آن اضافه و ثبت شود

راه دوم هم برگرفته از MSDN
در اکسس 2000 به بالا IDENTITY@@ همیشه حاوی بیشترین مقدار ثبت شده فیلد AutoNumber میباشد
لذا ما در رویداد RowUpdated این مقدار رو بدست آورده و ورد استفاده قرار می دهیم





' Assumes that connection is a valid OleDbConnection object.' Use the DataAdapter to fill and update the DataSet.Dim adapter As OleDbDataAdapter = New OleDbDataAdapter( _ "SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryID", _ connection)adapter.InsertCommand = New OleDbCommand( _ "INSERT INTO Categories (CategoryName) Values(?)", connection)adapter.InsertCommand.CommandType = CommandType.Textadapter.InsertCommand.Parameters.A dd( _ "@CategoryName", OleDbType.Char, 15, "CategoryName")connection.Open() ' Fill the DataSet.Dim categories As DataSet = New DataSetadapter.Fill(categories, "Categories")' Add a new row.Dim newRow As DataRow = categories.Tables("Categories").NewRow()newRow("CategoryName") = "New Category"categories.Tables("Categories").Rows.Add(newRow)' Include an event to fill in the Autonumber value.AddHandler adapter.RowUpdated, _ New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)' Update the DataSet.adapter.Update(categories, "Categories")connection.Close()' Event procedure for OnRowUpdatedPrivate Shared Sub OnRowUpdated( _ sender As Object, args As OleDbRowUpdatedEventArgs) ' Include a variable and a command to retrieve the identity value ' from the Access database. Dim newID As Integer = 0 Dim idCMD As OleDbCommand = New OleDbCommand( _ "SELECT @@IDENTITY", connection) If args.StatementType = StatementType.Insert ' Retrieve the identity value and store it in the CategoryID column. newID = CInt(idCMD.ExecuteScalar()) args.Row("CategoryID") = newID End IfEnd Sub

مطهر
شنبه 24 دی 1384, 18:47 عصر
بعضی مواقع که آدم جستجو می کنه به یه چیزای حالبی می رسه
ها!! منم برم برناممو اصلاح کنم تا شبی نیمه شب زنگ نزنند .. آقا به مشکل بر خوردیم؟؟
http://www.barnamenevis.org/forum/showthread.php?t=13947
http://www.barnamenevis.org/forum/showthread.php?t=35935
http://www.barnamenevis.org/forum/showthread.php?t=35448
فکر کنم این بهتر باشه:
http://www.barnamenevis.org/forum/search.php?searchid=88073