PDA

View Full Version : سوال: پایگاه داده اکسس و VB,Net



mfd1365
پنج شنبه 10 فروردین 1391, 17:57 عصر
سلام
من وقتی میخوام اطلاعاتی رو با vb.net در Access ثبت کنم، هیچ پیغام و ارروری نمیده و ثبت میشه ، اما اطلاعاتی تو Access نشون داده نمیشه که انگار اصلا ثبت نشده.
ممنون میشم اگه بهم کمک کنین.
مرسی:متفکر:

mansour01
پنج شنبه 10 فروردین 1391, 19:12 عصر
در اینکه هیچ خطایی نشون نمیده دلیل بر ثبت اطلاعات نیست ، کد خودتون رو بگذارید تا بشه نظر داد .
اصلا به پایگاه داده متصل میشید ؟ کوئری ارسال می کنید ؟

Hybrid
پنج شنبه 10 فروردین 1391, 20:17 عصر
سلام ،

به احتمال زیاد ایشون پراپرتی CopyToOutputDirectory فایل دیتابیس اضافه شده به پروژه رو روی CopyAlways گذاشتن که باید روی CopyIfNewer باشه.

چک بکنین ببین درست میشه ، اگه درست نشد کدتون رو بزارین تا بهتر قضاوت کرد.

mfd1365
شنبه 12 فروردین 1391, 16:26 عصر
سلام

property رو copyIfNewer گذاشتم اما بازم ج نداد.

کدم اینه: نام دیتابیس:Database1.accdb



کد اتصال به بانک Access:

Public Sub New()
Dim path As String
path = System.AppDomain.CurrentDomain.BaseDirectory & "Database1.accdb;"
constring = "Provider=Provider=Microsoft.ACE.OLEDB.12.0;Data Source= & path ;"
con = New OleDbConnection(constring)
Try
con.Open()
Catch ex As Exception

End Try
End Sub



کد دکمه ثبت:


Private Sub btninsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btninsert.Click
cmd.Connection = con
cmd.CommandText = "insert into tamrin (id,name,lname) values(@id,@name,@lname)"
cmd.Parameters.Add("@id", OleDbType.LongVarChar)
cmd.Parameters("@id").Value = TextBox3.Text
cmd.Parameters.Add("@name", OleDbType.LongVarChar)
cmd.Parameters("@name").Value = TextBox1.Text
cmd.Parameters.Add("@lname", OleDbType.LongVarChar)
cmd.Parameters("@lname").Value = TextBox2.Text
cmd.ExecuteNonQuery()
End Sub



(http://www.pic1.iran-forum.ir/viewer.php?file=51249433793022980118.jpg)

Hybrid
شنبه 12 فروردین 1391, 16:49 عصر
سلام ، به شکل زیر تغییر بده ببین درست میشه ، اگه اررور داد پیغامش رو بزار چون سریع نوشتم :

اول )) این 3 خط زیر رو بالای کلاس در قسمت اعلان ها کپی کن :


Dim cs As String = "Provider=Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\Database1.accdb"
Dim con As New OleDbConnection(cs)
Dim cmd As New OleDbCommand

دوم )) کد زیر رو در رویداد Click دکمتون بنویسید :


With cmd
.Connection = con
.CommandType = CommandType.Text
.CommandText = "insert into tamrin (id,name,lname) values(@id,@name,@lname)"
.Parameters.AddWithValue("@id", TextBox3.Text)
.Parameters.AddWithValue("@name", TextBox1.Text)
.Parameters.AddWithValue("@lname", TextBox2.Text)

If .Connection.State <> ConnectionState.Open Then
.Connection.Open()
End If
End With

cmd.ExecuteNonQuery()

MessageBox.Show("ثبت شد")

con.Close()

mfd1365
شنبه 12 فروردین 1391, 21:54 عصر
سلام، من برنامه رو با چند تاکلاس نوشتم ، اما چون گفتم کدا زیادو تو هم تو هم نشه ، برنامه رو بدون کلاس گذاشتم، اما اتگار نمیشه ، کلاسارو میزارم ، ممنون میشم بازم کمکم کنین:

کد اتصال به بانک Access:

Imports System.Data.OleDb
Imports System.IO
Public Class DataAccess
Dim strsql, constring As String
Dim cmd As OleDbCommand
Dim con As OleDbConnection

Public Sub New()
Dim path As String
path = System.AppDomain.CurrentDomain.BaseDirectory & "Database1.accdb;"
constring = "Provider=Provider=Microsoft.ACE.OLEDB.12.0;Data Source= & path ;"
con = New OleDbConnection(constring)
Try
con.Open()
Catch ex As Exception

End Try

End Sub


کلاس Insert:

Public Function Insert(ByVal tabname As String, ByVal arr(,) As String) As Integer
Dim i As Integer
Dim str As String = ""
' "Insert into tabname (name,famliy,id) Values(@val1,@val2,@val3)"
str = "insert into " + tabname + "("
For i = 0 To arr.GetUpperBound(1)
str += arr(0, i) + ","
Next
str = str.Substring(0, str.Length - 1)
str += ") Values("
For i = 0 To arr.GetUpperBound(1)
str += "@Val" + i.ToString + ","
Next
str = str.Substring(0, str.Length - 1)
str += ")"

cmd = New OleDbCommand
cmd.Connection = con

For i = 0 To arr.GetUpperBound(1)
cmd.Parameters.Add("@val" + i.ToString, OleDbType.LongVarChar)
cmd.Parameters("@Val" + i.ToString).Value = arr(1, i)
Next
Dim idparam As OleDbParameter = cmd.Parameters.Add("@Identity", OleDbType.Integer)
idparam.Direction = ParameterDirection.Output
str += ";select @Identity =SCOPE_IDENTITY();"
cmd.CommandText = str
Try
cmd.ExecuteNonQuery()
Catch ex As Exception

End Try
Return CType(idparam.Value, Integer)
End Function

Public Sub Update(ByVal tabname As String, ByVal arr(,) As String, ByVal cond As String)
Dim i As Integer
Dim Str As String = "update " + tabname + " set "
cmd = New OleDbCommand
cmd.Connection = con

For i = 0 To arr.GetUpperBound(1)
Str += arr(0, i) + "=@Val" + i.ToString + ","
Next
Str = Str.Substring(0, Str.Length - 1)
Str += " Where " + cond

cmd.CommandText = Str

For i = 0 To arr.GetUpperBound(1)
cmd.Parameters.Add("@val" + i.ToString, OleDbType.LongVarChar)
cmd.Parameters("@Val" + i.ToString).Value = arr(1, i)
Next

cmd.ExecuteNonQuery()

End Sub


متد Add در کلاس clsdata

Public Function Add() As Integer
da = New DataAccess()
ds = New DataSet
FillArray()
da.Insert("tbldata", arr)
MsgBox("اطلاعات با موفقیت ثبت شد", MsgBoxStyle.OkOnly, "")

End Function

Private Sub FillArray()

arr(0, 0) = "name"
arr(1, 0) = name
arr(0, 1) = "address"
arr(1, 1) = address
arr(0, 2) = "tell"
arr(1, 2) = tell
arr(0, 3) = "groupid"
arr(1, 3) = groupid

End Sub

کد دکمه ثبت (Insert)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
data.name = txtname.Text
data.address = txtaddress.Text
data.groupid = txtgroup.Text
data.tell = txttell.Text
data.Add()
End Sub
End Class

Hybrid
شنبه 12 فروردین 1391, 22:11 عصر
سلام ، اگه کد هات رو داخل تگ های Code بزاری راحت تر میشه اشکال رو بر طرف کرد ،

داخل همین سایت پروژه ای رو نوشتم ، و OPenSource هست ، یک برنامه ساده ی عکاسی هست که به سبک کلاس نویسی نوشتمش سورسش رو ببین ، مطمئنا نکات خوبی رو واست داره :

آموزش: سورسه برنامه ساده مدیریت عکاسی (http://barnamenevis.org/showthread.php?331652-%D8%B3%D9%88%D8%B1%D8%B3%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%B9%DA%A9%D8%A7%D8%B3%DB%8C&highlight=%D8%B9%DA%A9%D8%A7%D8%B3%DB%8C)

mfd1365
شنبه 12 فروردین 1391, 22:36 عصر
مرسی، زحمت کشیدی

Hybrid
شنبه 12 فروردین 1391, 22:58 عصر
مرسی، زحمت کشیدی

با ویژوال استودیو 2010 نوشتمش. اگه با vs2008 هم بود ویژوال استودیو به طور اتوماتیک Convert میکنه

mfd1365
دوشنبه 14 فروردین 1391, 01:15 صبح
الان VS2008و VS2010 رو دارم، چطوری می تونم Convert کنم؟

کدی که گذاشتم کجاش مشکل داره؟

Hybrid
دوشنبه 14 فروردین 1391, 01:19 صبح
الان VS2008و VS2010 رو دارم، چطوری می تونم Convert کنم؟

با ویژوال استودیو 2010 نوشتمش شما خوب دارین دیگه میخوای چیرو Convert کنی؟؟

اگه پروژه رو باز کنین اگه نیاز به Convert داشته باشه ، به طور خودکار پنجره Convert رو بالا میاره و Convert میکنین

راستش کدتون رو مطالعه نکردم چون داخل تگهای Code قرار ندادین ، سورس رو مشاهده کردین ؟؟؟

mfd1365
دوشنبه 14 فروردین 1391, 01:27 صبح
نه، 2008 دارم .2010 ندارم که ،

mfd1365
دوشنبه 14 فروردین 1391, 01:33 صبح
کد اتصال به بانک Access

Imports System.Data.OleDb
Imports System.IO
Public Class DataAccess
Dim strsql, constring As String
Dim cmd As OleDbCommand
Dim con As OleDbConnection

Public Sub New()
Dim path As String
path = System.AppDomain.CurrentDomain.BaseDirectory & "Database1.accdb;"
constring = "Provider=Provider=Microsoft.ACE.OLEDB.12.0;Da ta Source= & path ;"
con = New OleDbConnection(constring)
Try
con.Open()
Catch ex As Exception

End Try

End Sub


کلاس Insert




Public Function Insert(ByVal tabname As String, ByVal arr(,) As String) As Integer
Dim i As Integer
Dim str As String = ""
' "Insert into tabname (name,famliy,id) Values(@val1,@val2,@val3)"
str = "insert into " + tabname + "("
For i = 0 To arr.GetUpperBound(1)
str += arr(0, i) + ","
Next
str = str.Substring(0, str.Length - 1)
str += ") Values("
For i = 0 To arr.GetUpperBound(1)
str += "@Val" + i.ToString + ","
Next
str = str.Substring(0, str.Length - 1)
str += ")"

cmd = New OleDbCommand
cmd.Connection = con

For i = 0 To arr.GetUpperBound(1)
cmd.Parameters.Add("@val" + i.ToString, OleDbType.LongVarChar)
cmd.Parameters("@Val" + i.ToString).Value = arr(1, i)
Next
Dim idparam As OleDbParameter = cmd.Parameters.Add("@Identity", OleDbType.Integer)
idparam.Direction = ParameterDirection.Output
str += ";select @Identity =SCOPE_IDENTITY();"
cmd.CommandText = str
Try
cmd.ExecuteNonQuery()
Catch ex As Exception

End Try
Return CType(idparam.Value, Integer)
End Function



متد add در کلاس clsdata


Public Function Add() As Integer
da = New DataAccess()
ds = New DataSet
FillArray()
da.Insert("tbldata", arr)
MsgBox("اطلاعات با موفقیت ثبت شد", MsgBoxStyle.OkOnly, "")

End Function

Private Sub FillArray()

arr(0, 0) = "name"
arr(1, 0) = name
arr(0, 1) = "address"
arr(1, 1) = address
arr(0, 2) = "tell"
arr(1, 2) = tell
arr(0, 3) = "groupid"
arr(1, 3) = groupid

End Sub

کددکمه ثبت Insert


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
data.name = txtname.Text
data.address = txtaddress.Text
data.groupid = txtgroup.Text
data.tell = txttell.Text
data.Add()
End Sub
End Class

Hybrid
دوشنبه 14 فروردین 1391, 01:45 صبح
سلام ،


نه، 2008 دارم .2010 ندارم که ،


الان VS2008و VS2010 رو دارم

!

کلاست رو خیلی خیلی پیچیده نوشتی ، از این ساده تر هم میشه بنویسیش ، در سورس کد اون برنامه ی عکاسی اگه ببینی خیلی سادت تر از این حرفاست .

mfd1365
دوشنبه 14 فروردین 1391, 02:05 صبح
میشه کلاس Insert تو برام بزاری؟

Hybrid
دوشنبه 14 فروردین 1391, 02:20 صبح
اینم sample ، مشکلی داشتی بپرس.

mfd1365
دوشنبه 14 فروردین 1391, 02:23 صبح
شرمندم میشه convert کنی به VS2005 برام بزاری؟

ممنونم ازت

Hybrid
دوشنبه 14 فروردین 1391, 02:29 صبح
شرمندم میشه convert کنی به VS2005 برام بزاری؟

ممنونم ازت

دوست عزیز سریع این ویژوال استودیو 2010 رو گیر بیار و نصب کن ، متاسفانه الان خوابم میاد!! ولی داخل اینترنت جستجو کنید برنامه های مبدل زیادی واسه اینکار وجود داره مثلا بنویس

Visual Studio 2010 to 2005 convertor



اگه هم فقط میخوای ساختار کلاس رو مشاهده کنی ، روی کلاس داخل پوشه(Class1.vb) راست کلیک کن و با برنامه NotePad بازش کن و کد های داخلش رو مشاهده کن.

mfd1365
دوشنبه 14 فروردین 1391, 02:31 صبح
مرسی، آقایی، اعصابتو خرد کردما، ببخشید، مرسی ، ازاینکه وقت گذاشتی برام ممنونم ازت

omidamiry
دوشنبه 14 فروردین 1391, 02:42 صبح
سلام سال نو مبارک من وی بی زیاد کارنکردم بیشتر سی شارپ یا همون سی کارکردم.تو برنامه نویسی اگر از ابزار های خود نرم افزار کمک بگیری کارت راحتتر و مشکل کمتری داری. اصطلاح کتابیش میشه مدل متصل تو مدل غیر متصل که شما کارکردی احتمال بروز خطا زیاده که رفع این مشکلات اطلاعات عمومی بالا می خاد.
ضممنا زمانی ی پروژه نیو میکنی خیلی هواست جمع باشه که قسمت هایی که بلد نیستی اد نکنی امکان اذیت داره.
اگر دستوراتت درسته فقط یه امکان وجود داره نحوه اتصال به بانکت درست نیست با اس کیو ال امتحان کن.
با ویزاردها راحتتره خاستی تو سه مرحله آموزش میدم. سال نو مبارک

asady92
یک شنبه 17 اردیبهشت 1391, 19:06 عصر
سلام

نمشه به جای دستورات sql از دستورات خود vb.net بنویسیم

ممنون

Hybrid
یک شنبه 17 اردیبهشت 1391, 20:09 عصر
سلام

نمشه به جای دستورات sql از دستورات خود vb.net بنویسیم

ممنون

سلام دوست عزیز میشه ،

مثلا من بعضی از پروژه ها رو با linq to sql مینویسم اصلا هم یک دستور sql نمینویسم واقعا محشره و خیلی راحته ولی با Ado.net مجبوری دستورات sql رو بنویسی.

ولی بهتره از این تکنولوژی های جدید استفاده کنید.