PDA

View Full Version : کمک برای کار با دیتا بیس



john smithair
چهارشنبه 31 شهریور 1389, 14:09 عصر
سلام



امیدورام که ایام به کامتون باشه!!


دوستان من برای کار با دیتا بیس اکسسم از کلاس زیر استفاده میکنم!!
کلاس fill data!!!


Public Class filldata
Dim DatabasePath = IO.Path.Combine(Application.StartupPath, "Students.mdb;")
Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & DatabasePath & "Persist Security Info=False"
Public Sub Fill(ByVal SqlString As String, ByVal Binding As BindingSource)
Dim OleDbConn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConnString)
OleDbConn.Open()
Dim MyDataSet As DataSet = New DataSet()
Dim MyOleDataAdapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter()
MyOleDataAdapter.SelectCommand = New OleDb.OleDbCommand(SqlString, OleDbConn)
MyOleDataAdapter.Fill(MyDataSet)
Binding.DataSource = MyDataSet.Tables(0)
MyOleDataAdapter.Dispose()
MyDataSet.Dispose()
OleDbConn.Close()
OleDbConn.Dispose()
End Sub
End Class


و تو هر فرمی هم که میخوام با این کلاس خب کار کنم از اون یه تعریف این چنینی دارم :

Dim filldata As New filldata
و خب با توجه به این کلاس و تعریف فوق برای ذخیره کردن تغییرای جدولای دینت بیس اکسسم از دستوری مثل مثلا دستور زیر استفاده میکنم:


filldata.Fill("Update Moarefi Set Sm='" & SmTextBox.Text & "' ,Famil='" & FamilTextBox.Text & "', Kelas='" & KelasTextBox.Text & "', Tel='" & TelTextBox.Text & "' Where ID=" & IDTextBox.Text, MoarefiBindingSource)


اما تو اینجا بهم این ارور رو میده!!
البته تغییرات ذخیره میشه ولی این ارور رو هم میده!!!
آیا کسی میتونه بهم کمک کنه؟؟
ممنون که واسه مطالعه این متن وقت گذاشتید!!
و همین طور پیشاپیش از کمک هاتون ممنونم!!

Shahram_Shobeiri
چهارشنبه 31 شهریور 1389, 14:52 عصر
چه اروری میده؟ لطفاً متن ارور را ضمیمه نمایید.

kebriya
چهارشنبه 31 شهریور 1389, 14:55 عصر
چه اروری میده اگه میشه اسم شی از کلاس رو با اسم کلاس یه جور نگیر مثلا بنویس

Dim fd As New filldata

john smithair
چهارشنبه 31 شهریور 1389, 17:35 عصر
بله!!!
ببخشید!!
یادم رفته بود ارورشو بگم چیه!!
این اروور رو میده:

Unhandled exeption has occurred in your application.if you click Continue,the application will ignpre
this error and attempt to continue. if you click Quit, the application will close immediately.

Cannot find table 0.

ممنون میشم اگه کمکم کنید!!!

محسن شامحمدی
چهارشنبه 31 شهریور 1389, 20:11 عصر
خودش نوشته دیگه :شیطان:

Cannot find table 0
دلیلش اینه query شما هیچ جدولی رو بر نگردونده.
به همین دلیله که حتی صفرمین جدول رو هم پیدا نمی کنه

Rezahak
چهارشنبه 31 شهریور 1389, 20:43 عصر
دوست عزیز update کردن باعث ایجاد تغییرات در پایگاه داده می شوند ولی datasource باید حتما نتیجه select را در خود داشته باشد و شما اینجا از دستور update استفاده کرده اید !!!!

Rezahak
چهارشنبه 31 شهریور 1389, 21:19 عصر
ایناهاش اینجا
filldata.Fill("Update Moarefi Set Sm='" & SmTextBox.Text & "' ,Famil='" & FamilTextBox.Text & "', Kelas='" & KelasTextBox.Text & "', Tel='" & TelTextBox.Text & "' Where ID=" & IDTextBox.Text, MoarefiBindingSource)


توی پست اول سه تا box هست

دیدی؟؟؟؟؟؟؟

john smithair
پنج شنبه 01 مهر 1389, 10:03 صبح
سلام!!!
ممنون!!
ولی خب دوستان من یه چی بگم؟
شرمنده ها ولی من الان نفهمیدم باز چی شد و ایراد کار کجاست و الان چکار کنم؟
الان این کد پست قبلی هم که دوستمون rezahack هم گذاشته خب فرقش با کدی که من گذاشتم تو چیه!!!
یعنی چی سه تا باکس داره آخه؟:افسرده:
شرمنده که اینقدر مبتدی ام ولی خب نفهمیدم!!!
اگه میشه یه کم واضح تر توضیح میدید؟
ممنون!!!:لبخندساده:

john smithair
پنج شنبه 01 مهر 1389, 10:10 صبح
خب فکر کنم منظورتون اینه که باید یه جورایی با دستور select کار میکردم تا بدونه با چه جدولی قراره کار کنه!!
خب الان یعنی من چطور باید جدولم رو بروز رسانیش کنم!!
آخه این دستور قبلن برام کار میکرد!!!
حالا اگه من درست فهمیدم و قراره با select کار کنیم تا جدول رو بفهمه خب میشه در مورد کدش یه کم راهنمایی کنید؟:ناراحت::افسرده:
چون من نمیدونم چطور باید کدش رو بنویسم!!
ممنون!!:لبخندساده:

محسن شامحمدی
پنج شنبه 01 مهر 1389, 14:48 عصر
الان این کد پست قبلی هم که دوستمون rezahack هم گذاشته خب فرقش با کدی که من گذاشتم تو چیه!!!
یعنی چی سه تا باکس داره آخه؟:افسرده:
ایشون جواب بنده رو داده بود که گفته بودم دستور sql شما رو نمی بینم و ایشون دستور sql شما رو به من یادآوری کرد و اگر دقت کنید می بینید که بنده هم پست بی موردم رو پاک کردم.
----------------------------------

اگه میشه یه کم واضح تر توضیح میدید؟
به نظر من فرمایشات جناب Rezahak (http://barnamenevis.org/forum/member.php?u=162453) کاملا واضح بود.
می گن اگر شما از دستور select استفاده کنید یک جدول بر می گرده و شما مشکلی نخواهید داشت ولی الان که شما از دستور update استفاده کردید هیچ جدولی برگردونده نمی شه و توی این دستور

Binding.DataSource = MyDataSet.Tables(0)
برای شما error پیش میاد دلیل اینه که شما به وی بی می گی اولین تیبل رو بریز در صورتی که در دیتاست شما اصلا تیبلی وجود نداره(بخاطر استفاده نکردن از دستور select .)

------------------------------------------
برای حل این مشکل:
یک دونه overload از این تابع تعریف می کنیم به این صورت.
Public Sub Fill(ByVal SqlString As String)
Dim OleDbConn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConnString)
OleDbConn.Open()
Dim cmd As New OleDb.OleDbCommand(SqlString, OleDbConn)
cmd.ExecuteNonQuery()
OleDbConn.Close()
OleDbConn.Dispose()
End Sub

حالا از این به بعد هر جا می خواین یک جدول برگردونه می تونید از تابع اولی استفاده کنید و هر دفعه از دستورات update , insert into , create table,delete استفاده می کنید از تابع دومی که من نوشتم استفاده کنید.