PDA

View Full Version : آموزش: طرز انتخاب یک فیدل در جدول دیتا بیس و جست و جو بر اساس آن



hamidhassas
جمعه 26 آذر 1389, 21:53 عصر
من برنامه ای نوشتم که تعدادی مشخصات از کاربر گرفته و بعد وارد دیتا بیس کرده حال می خواهم یک TextBox در یک فرم قرار دهم و بعد با زدن یک کلیک بر رویButton1 هر چیزی که در TexBox نوشتم را به شکل مشخص در دیتا بیس جست و جو کند و بعد نتیجه را به من نشان بدهد

جست و جو می خواهم بر اساس نام خانوادگی در دیتابیس صورت بگیرد

اگر امکان داره با VB.Net 2010 انجام بدین و بعد فایل را برای دانلود بگذارید

پیشاپیش متشکرم.

ali_najari
جمعه 26 آذر 1389, 22:43 عصر
دوست عزیز شما فرض کنید در جدولی به نام TBL1 میخواهید بر اساسی یکی از فیلدهای آن به نام Field1 جستوجو کنید:

بعد از کدهای متصل شدن باید از کد زیر برای Select اطلاعات استفاده کنید:


"Select * From TBL1 Where Field1 Like N'%" & Textbox1.text & "%'"

omid-vbAuto
جمعه 26 آذر 1389, 23:30 عصر
دوست عزیز شما فرض کنید در جدولی به نام TBL1 میخواهید بر اساسی یکی از فیلدهای آن به نام Field1 جستوجو کنید:

بعد از کدهای متصل شدن باید از کد زیر برای Select اطلاعات استفاده کنید:


"Select * From TBL1 Where Field1 Like N'%" & Textbox1.text & "%'"

دوست عزیز فکر کنم تو کد بالا N رو باید حذف کنیم تا کد درست کار کند.

ali_najari
شنبه 27 آذر 1389, 14:29 عصر
اگر بانك Access هست N رو نبايد بزاريد!

omid-vbAuto
شنبه 27 آذر 1389, 14:44 عصر
دوست عزیر اگر بخواهیم یک کلمه عینا جستجو شود چکار کنیم؟

هم برای ستونهای متنی و هم برای ستون های عددی.

من از کد زیر استفاده کردم البته برای ستون های عددی جواب می ده برای ستونهای متنی خطا میگره!!!!




ad = New OleDb.OleDbDataAdapter("select * from story where elevation=" & TextBox2.Text, cnnStr)

pedram_ns
شنبه 27 آذر 1389, 15:27 عصر
فکر کنم باید یک پرانتز دیگه هم اضافه کنید.

می تونید بصورت پارامتری هم بنویسید:


ad = New OleDb.OleDbDataAdapter("select * from story where elevation=?", cnnStr)
ad.Parameters.AddWithValue("elevation", TextBox1.Text)

omid-vbAuto
شنبه 27 آذر 1389, 15:47 عصر
فکر کنم باید یک پرانتز دیگه هم اضافه کنید.

می تونید بصورت پارامتری هم بنویسید:


ad = New OleDb.OleDbDataAdapter("select * from story where elevation=?", cnnStr)
ad.Parameters.AddWithValue("elevation", TextBox1.Text)


دوست عزیز تنها فرق کد شما با کد من در? بود.که وقتی اون رو اضافه کردم خطا گرفت !!! مال خودم خطا نمی گرفت.ولی برای نوشته خطا میگره!

کد دومتون هم خطا گرفت و اون این بود:




Error 1 'Parameters' is not a member of 'System.Data.OleDb.OleDbDataAdapter'.

pedram_ns
شنبه 27 آذر 1389, 16:12 عصر
باید ببخشید من کد رو تست نکردم ببینید من به این صورت می نویسم و مشکلی هم ندارم:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\data\database.accdb")
Dim StrSql As String = "select * from company where name=? "
Dim cmd As OleDbCommand = New OleDbCommand(StrSql, con)
cmd.Parameters.AddWithValue("name", TextBox1.Text)
con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()

adapter.Fill(ds, "company")
DataGridView1.DataSource = ds.Tables("company")
con.Close()

omid-vbAuto
شنبه 27 آذر 1389, 16:34 عصر
باید ببخشید من کد رو تست نکردم ببینید من به این صورت می نویسم و مشکلی هم ندارم:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\data\database.accdb")
Dim StrSql As String = "select * from company where name=? "
Dim cmd As OleDbCommand = New OleDbCommand(StrSql, con)
cmd.Parameters.AddWithValue("name", TextBox1.Text)
con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()

adapter.Fill(ds, "company")
DataGridView1.DataSource = ds.Tables("company")
con.Close()


دوست عزیز من دارم با پایگاه داده اکسس کار می کنم.
در ضمن احساس می کنم خیلی از بحث فاصله گرفتیم.من که از شما در مورد کانکشن ساختن و یا دیتا آدپور سوال نکردم! بحث من در مورد یه کوئری هست که طریقه صحیح نوشتنشو می خوام:

باز هم سوالمو تکرار می کنم:

دوست عزیر اگر بخواهیم یک کلمه عینا جستجو شود چکار کنیم؟

هم برای ستونهای متنی و هم برای ستون های عددی.

من از کد زیر استفاده کردم البته برای ستون های عددی جواب می ده برای ستونهای متنی خطا میگره!!!!




ad = New OleDb.OleDbDataAdapter("select * from story where elevation=" & TextBox2.Text, cnnStr)

pedram_ns
شنبه 27 آذر 1389, 20:00 عصر
خوب این کد من هم همین کار شما رو انجام می ده هم برای مقادیر عددی و هم متنی.
شما باید ابتدا یک oledbcommand ایجاد کنید و بعد با تنظیم خاصیت parameter اون می تونید کار مورد نظرتون رو انجام بدید.

omid-vbAuto
شنبه 27 آذر 1389, 20:08 عصر
خوب این کد من هم همین کار شما رو انجام می ده هم برای مقادیر عددی و هم متنی.
شما باید ابتدا یک oledbcommand ایجاد کنید و بعد با تنظیم خاصیت parameter اون می تونید کار مورد نظرتون رو انجام بدید.

من روش پارامتری رو بلد نیستم شما می تونی برای اکسس انجام بدین؟

pedram_ns
شنبه 27 آذر 1389, 20:26 عصر
عزیزم این برای اکسس هست دستور oledbcommand در اکسس بکار می ره و دستور sqlcommandبرای sqlserver.
شما همین کد های من رو امتحان کنید کافیه در فرمتون یک textbox یک دکمه و یک گریدویو بذارید و سرچ کنید اسم جدول و فیلد مورد سرچ رو هم با دیتابیستون تنظیم کنید.

omid-vbAuto
شنبه 27 آذر 1389, 20:58 عصر
عزیزم این برای اکسس هست دستور oledbcommand در اکسس بکار می ره و دستور sqlcommandبرای sqlserver.
شما همین کد های من رو امتحان کنید کافیه در فرمتون یک textbox یک دکمه و یک گریدویو بذارید و سرچ کنید اسم جدول و فیلد مورد سرچ رو هم با دیتابیستون تنظیم کنید.

اون کارهائی رو که شما گفتین انجام دادم.ولی خطا میگره.
شما خودتون کدهارو امتحان کردین؟!!!

pedram_ns
شنبه 27 آذر 1389, 21:12 عصر
بله امتحان کردم چه خطایی دارید؟
دقت کنید حتما نام دیتابیس و جدولتون و فیلد مورد جستجو رو با دیتابیس خودتون ست کنید.
دیتابیس من نامش database هست و در پوشه debug در پوشه data گذاشتم. اگر شما دیتابیس رو در debug گذاشتید در کد کانکشن data رو ننویسید:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\data\database.accdb"

omid-vbAuto
شنبه 27 آذر 1389, 21:33 عصر
بله امتحان کردم چه خطایی دارید؟
دقت کنید حتما نام دیتابیس و جدولتون و فیلد مورد جستجو رو با دیتابیس خودتون ست کنید.
دیتابیس من نامش database هست و در پوشه debug در پوشه data گذاشتم. اگر شما دیتابیس رو در debug گذاشتید در کد کانکشن data رو ننویسید:


Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\data\database.accdb"


من از کد زیر استفاده کردم که بر اساس اون چیزهائی که گفتین.خطا گرفت:





cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & TextBox1.Text & "'"
Dim StrSql As String = "select * from story where elevation=? "
Dim cmd As OleDbCommand = New OleDbCommand(StrSql, cnnStr)
cmd.Parameters.AddWithValue("elevation", TextBox2.Text)
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "story")
DataGridView1.DataSource = ds.Tables("story")




بجای اینکه هی من پست بدم بعد شما پست بدین یه نمونه برنامه بذارین و کارو تموم کنید.(برای اکسس)

ali_najari
یک شنبه 28 آذر 1389, 02:15 صبح
دوست عزيز شما براي اينكه بتونيد از پارمتر استفاده كنيد بايد بعد از "=" پارامتر خودتون رو به اين شكل تعريف كنيد "@Par1" و سپس مقدار پارمتر رو تعيين كنيد در سطر بعد:


cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & TextBox1.Text & "'"
Dim StrSql As String = "select * from story where elevation=@Par1 "
Dim cmd As OleDbCommand = New OleDbCommand(StrSql, cnnStr)
cmd.Parameters.AddWithValue("@Par1", TextBox2.Text)
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "story")
DataGridView1.DataSource = ds.Tables("story")

البته دقيق نميدونم زماني كه داريد مقدار پارامتر را ميديد @ ميخواهد يا خير ولي هر دو حالت رو امتحان كنيد.


cmd.Parameters.AddWithValue("Par1", TextBox2.Text)

omid-vbAuto
یک شنبه 28 آذر 1389, 07:50 صبح
دوست عزيز شما براي اينكه بتونيد از پارمتر استفاده كنيد بايد بعد از "=" پارامتر خودتون رو به اين شكل تعريف كنيد "@Par1" و سپس مقدار پارمتر رو تعيين كنيد در سطر بعد:


cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & TextBox1.Text & "'"
Dim StrSql As String = "select * from story where elevation=@Par1 "
Dim cmd As OleDbCommand = New OleDbCommand(StrSql, cnnStr)
cmd.Parameters.AddWithValue("@Par1", TextBox2.Text)
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "story")
DataGridView1.DataSource = ds.Tables("story")

البته دقيق نميدونم زماني كه داريد مقدار پارامتر را ميديد @ ميخواهد يا خير ولي هر دو حالت رو امتحان كنيد.


cmd.Parameters.AddWithValue("Par1", TextBox2.Text)



دوست عزیز بازم اررور میده :

63796


این هم نوع خطاشه:





Error 1 Value of type 'String' cannot be converted to 'System.Data.OleDb.OleDbConnection'.



اگر ممکنه شما یه کوئری برام بنویسید مثل مال دوستون که به صورت زیر نوشتین.فقط این دفعه برای اکسس و عبارت دقیقا جستجو بشه نه مانند Like که شبیه رو جستجو می کنه.



"Select * From TBL1 Where Field1 Like N'%" & Textbox1.text & "%'"

hero4000
یک شنبه 28 آذر 1389, 09:14 صبح
خوب دوست عزيز شما بايد قبل از خطهائي که دوستمون علي نجاري نوشتن يک OleDbConnection با نام Cnnstr بسازيد و فقط ConnectionString اون رو برابر اون مقدار قرار بدين

pedram_ns
یک شنبه 28 آذر 1389, 09:37 صبح
خوب مشکل مشخصه شما کانکشن تون رو اشتباه ایجاد کردید(همون خط اول)
شما در قسمت data source باید مسیر دیتابیستون رو بدید برای این کار ابتدا بانک اکسس رو در پوشه دیباگ برنامه کپی کنید و کانکشن رو به این صورت ایجاد کنید:


Dim cnnStr As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\database.accdb"

دقت کنید که database نام بانک اکسس هست که شما باید نام بانک خودتون رو بنویسید و اینکه این بانک اکسس با 2007 هست اگر بانک شما با اکسس 2003 نوشته شده کد زیر رو بنویسید


Dim cnnStr As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\database.mdb")این از کانکشن که شما در خط اول کامل اشتباه نوشته بودید.
بعد کوریتون رو برای select می نویسید بعد از اون یک oledbcommand ایجاد می کنید و در خاصیت parameter پارامتر مورد نظرتون رو مشخص می کنید اگر به روش من از علامت سئوال استفاده کنید
باید کدتون رو به این صورت بنویسید:


cmd.Parameters.AddWithValue("elevation", TextBox1.Text)یعنی نام فیلد درون جدول رو در پارامتر می نویسید و اگر با روش آقای نجاری از placeholder بصورت @par1 یا هر نام دیگه استفاده کردید در کد پارامتر اون نام رو می نویسید:


cmd.Parameters.AddWithValue("@par1", TextBox1.Text)و در نهایت هم adapter و dataset رو تنظیم می کنید در واقع مشکل شما با همون خط اول و ایجاد کانکشن هست.

فضای نام هم فراموش نشه:


Imports System.Data
Imports System.Data.OleDb

امیدوارم دیگه حل بشه.

omid-vbAuto
یک شنبه 28 آذر 1389, 18:20 عصر
خوب مشکل مشخصه شما کانکشن تون رو اشتباه ایجاد کردید(همون خط اول)
شما در قسمت data source باید مسیر دیتابیستون رو بدید برای این کار ابتدا بانک اکسس رو در پوشه دیباگ برنامه کپی کنید و کانکشن رو به این صورت ایجاد کنید:


Dim cnnStr As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\database.accdb"

دقت کنید که database نام بانک اکسس هست که شما باید نام بانک خودتون رو بنویسید و اینکه این بانک اکسس با 2007 هست اگر بانک شما با اکسس 2003 نوشته شده کد زیر رو بنویسید


Dim cnnStr As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\database.mdb")این از کانکشن که شما در خط اول کامل اشتباه نوشته بودید.
بعد کوریتون رو برای select می نویسید بعد از اون یک oledbcommand ایجاد می کنید و در خاصیت parameter پارامتر مورد نظرتون رو مشخص می کنید اگر به روش من از علامت سئوال استفاده کنید
باید کدتون رو به این صورت بنویسید:


cmd.Parameters.AddWithValue("elevation", TextBox1.Text)یعنی نام فیلد درون جدول رو در پارامتر می نویسید و اگر با روش آقای نجاری از placeholder بصورت @par1 یا هر نام دیگه استفاده کردید در کد پارامتر اون نام رو می نویسید:


cmd.Parameters.AddWithValue("@par1", TextBox1.Text)و در نهایت هم adapter و dataset رو تنظیم می کنید در واقع مشکل شما با همون خط اول و ایجاد کانکشن هست.

فضای نام هم فراموش نشه:


Imports System.Data
Imports System.Data.OleDb

امیدوارم دیگه حل بشه.



مهندس جان از توجه شما ممنونم.ولی من می خوام کانکشن من طوری باشه که مسیر فایل دیتا بیسمو به وسیله Textbox بگیره.(یعنی کنار فایل EXE ممکنه نباشه).

من اون کدهائی رو که به اون ترتیبی که گفتین اجرا کردم ولی همون طوری که گفتم کانکشن من متغییره اون خطائی رو هم که می داد دلیلش همین بود.:بامزه:


حالا می خوام کدهای شما رو طوری تغییر بدم که کانکشن مسیرو از Textbox بخونه.



بعدش هم آیا روشی به غیر از روش پارامتری که گفتن جهت جستجو نیست؟(البته به غیر از روش پارامتری و Filter بایند):متفکر::متفکر::متفکر:

pedram_ns
یک شنبه 28 آذر 1389, 19:38 عصر
هر چند که کار شما یکم عجیب به نظر می رسه ولی باید کدتون رو به این صورت برای کانکشن بنویسید:


Dim data As String = TextBox2.Text
Dim cnnStr As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\" & data)

در واقع یک تکس باکس دیگه به نام textbox2 اضافه می کنید و مقدار اون رو به متغییر data میدید و در کد کانکشن می ذارید در این کد من فقط کافیه در textbox1 عبارت جستجو رو وارد کنید
و در textbox2 هم آدرس و نام دیتابیس رو نسبت به فایل exe بدید یعنی اگر دیتابیس شما در پوشه data و در کنار فایل exe قرار می گیره بنویسید:


data\database.accdb

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

حالا می شه بگید چه کاری دارید می کنید که به این روش نیاز دارید

omid-vbAuto
یک شنبه 28 آذر 1389, 19:53 عصر
آیا روشی به غیر از روش پارامتری که گفتن جهت جستجو نیست؟(البته به غیر از روش پارامتری و Filter بایند):متفکر::متفکر::متفکر:

omid-vbAuto
دوشنبه 29 آذر 1389, 10:19 صبح
دوستان یعنی هیچ روش دیگه ای نیستش؟ من قبول کنم که دیگه روشی نیست؟