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 رو بنویسی.
ولی بهتره از این تکنولوژی های جدید استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.