الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في عملية البحث

مغلق
بدأه حبيب الامس في 27 يناير 2007 · 19 رد · 1,235 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

عندي سؤال ياجماعة وياريت احد يفيدني فية لوتكرمتو

انا مسوي مشورع بالـــ ASP.NET ومسوي صفحتين الأولي أسمها MainPage وهذه الصفحة فيها معلومات الموظفين مثل (الاسم , الرقم الوظيفي , تاريخ الإلتحاق بالوظيفة , مسمي الوظيفة و القسم ) والصفحة الثانية سميتها Search وفيها خانات فاضية المستخدم يعبيها بنفسه.

فلو أدخل المستخدم مثلا أسم الموظف وضغط على زر البحث يودية على الاسم اللي بصفحة MainPage واذا كان الاسم غير موجود يعطية رسالة ان الاسم غير موجود وهكذا.

المشكلة لو المستخدم عبي أكثر من خانة مثل (الاسم و الرقم الوظيفي و تاريخ الإلتحاق بالوظيفة) وضغط على زر البحث المفترض انه يودية الي الصفحة اللي فيها معلومات الموظف حتي لو ماعبي باقي البيانات.

بإختصار شديد صفحة البحث فيها أكثر من خانة وانا ابغي المستخدم يدخل اللي يبغي يعني مو شرط يعبي كل الفراغات يعني مجرد انه يدخل خانة او خانتين او أكثر حسب ماهو يبغي وبعدين يضغط على زر البحث يودية الي صفحة MainPage

ياريت يكون الكود بلغة VB

شاكر ومقدر لكم تعاونكم

#2

مافية إجابة

يا ريت الخبراء يفيدوني إن أمكن

شاكر لكم

#3

الجواب يتعلق بقدر السؤال

انت اعطينا المشكلة في الكود واحنا نساعدك

أما انك تطلب كود كامل .. لا تكون طماع

حاول واحنا وراك

#4

طيب المشكلة معروفة ومشهورة وسأتفرض ما يلي لحلها:

1 - لديك الحقول التالي في الصفحة التي يمكن للمستخدم أن يملأها:

txtFirstName ( الاسم الأول )
txtLastName ( الكنية )
txtAddress ( العنوان )

ويوجد زر البحث نكتب فيه الشيفرة التالية:

Dim Query as String = ""
Dim Sql as String = ""
Dim op as String = ""

' من أجل إدخال الاسم الأول في البحث
If txtFirstName.Text.Trim() <> "" Then
	Query = " FirstName like '%" & txtFirstName.Text.Trim() & "%' "
	op = " OR "
End If

' من أجل إدخال الكنية في البحث
If txtLastName.Text.Trim() <> "" Then
	Query = op & " LastName like '%" & txtLastName.Text.Trim() & "%' "
	op = " OR "
End If

' من أجل إدخال العنوان في البحث
If txtAddress.Text.Trim() <> "" Then
	Query = op & " Address like '%" & txtAddress.Text.Trim() & "%'"
End If

If Query = "" Then
	Sql = " select * from tblUsers"
Else
	Sql = " select * from tblUsers" & Query
End If

Dim rdr as SqlDataReader = Command.ExecuteReader(Sql)

افترضت افتراضات, أعتقد أنه بالإمكان إسقاطها على مالديك من حقول وأسماء أعمدة وجداول

#5

السلام عليكم ورحمة الله وبركاته

ماشاء الله عليك اخوي اسماعيل ماقصرت واشكرك على حسن تعاونك

بس ياخوي فيه بعض الاشياء اللي مافهمتها ياريت اخوي تشرحها لي

انا عندي قاعدة البيانات بالاكسس واسمها EmployeeInfo

واسم الحقول اللي عندي:

txtFirstName ( الاسم الأول )

txtLastName ( الكنية )

txtAddress ( العنوان )

اوكي اخوي للحين كل شي واضح على مااظن

المشكلة اللي تواجهني بالكود اللي ارسلته لي انت

مع العلم اني غيرت المسميات على حسب الموجود عندي بالجدول ولكن المشكلة تكمن في ان صفحة البحث لما اضغط على زر البحث المفترض انه يرسلني للصفحة الثانية اللي فيها بيانات المستخدم اللي انا دخلته ولكن للاسف ماحدث شي ياريت اخوي تفيدي اكثر

المشكلة الثانية اللي ماني فاهمها هو هذا الكود

Dim rdr as SqlDataReader = Command.ExecuteReader(Sql)

الصراحة ماني عارف افهم هذا الكوماند ياريت اخوي تشرحلي وظيفته

عارف اني ثقلت عليك اخوي بس استحملني لاني مستعجل على الكود كثير وانا لسا مبتدأ بالبرمجة

الله يجزيك الف خير وشاكر لك اخوي

تم تعديل هذه المشاركة بواسطة حبيب الامس في 29 يناير 2007 في 08:31

#6

طيب, سأعدل الشيفرة بحيث تنقلك إلى صفحة أخرى:

1 - في زر البحث اكتب الشيفرة التالية من أجل الانتقال إلى صفحة اسمه search.aspx حيث سيتم عرض النتائج:

Dim url as String = "";

url = "http://localhost/YOUR_PROJECT/search.aspx?fn=" & txtFirstName.Text.Trim() _
		 & "&ln=" & txtLastName.Text.Trim() & "&addr=" & txtAddress.Text.Trim()
Response.Redirect(url, True)

2 - في الصفحة التي اسمها search.aspx سوي تابع اسمه GetResults():

Protected Sub Page_Load(Sender as Object, e As EventArgs)

	GetResults()

End Sub

Private Sub GetResults()

Dim Query as String = ""
Dim Sql as String = ""
Dim op as String = ""

' من أجل إدخال الاسم الأول في البحث
If Request("fn") <> "" Then
	Query = " FirstName like '%" & Request("fn") & "%' "
	op = " OR "
End If

' من أجل إدخال الكنية في البحث
If Request("ln") <> "" Then
	Query = op & " LastName like '%" & Request("ln") & "%' "
	op = " OR "
End If

' من أجل إدخال العنوان في البحث
If Request("Addr") <> "" Then
	Query = op & " Address like '%" & Request("Addr") & "%'"
End If

If Query = "" Then
	Sql = " select * from tblUsers"
Else
	Sql = " select * from tblUsers" & Query
End If

' طبعاً هنا لا تنسى الاتصال بقاعدة البيانات
Dim rdr as SqlDataReader = Command.ExecuteReader(Sql)
If rdr.Read() Then

	 ' First Name --> rdr("FirstName").ToString()
	 ' Last Name --> rdr("LastName").ToString()
	 ' Address --> rdr("Address").ToString()

End If
rdr.Close()

End Sub

:unsure:

#7

تسلم يالغالي والله تعبتك معي كثير بس للاسف صاير عندي اخطاء وماشتغل عندي البحث

المشكلة تكمن في الكود التالي:

If Request("fn") <> "" Then
	Query = " FirstName like '%" & Request("fn") & "%' "
	op = " OR "
End If

ماذا تقصد بالاسم هذا

FirstName

وكذلك هناك مشكلة تكمن في الكود التالي:

If Query = "" Then
	Sql = " select * from tblUsers"
Else
	Sql = " select * from tblUsers" & Query
End If

ماذا تقصد بـــ

tblUsers

وأخيراً هناك خطأء في الكود التالي:

Dim rdr as SqlDataReader = Command.ExecuteReader(Sql)
If rdr.Read() Then

	 ' First Name --> rdr("FirstName").ToString()
	 ' Last Name --> rdr("LastName").ToString()
	 ' Address --> rdr("Address").ToString()

End If
rdr.Close()

أعتقد السبب يكمن في ان قاعدة البيانات عندي معمولة بالاكسس وليست SQL ياريت تعلمني الطريقة الصحيحة للاتصال بقاعدة بيانات بالاكسس

شكرا جزلا والله اني منحرج منك كثرا

:(

#8

FirstName: اسم عمود افترضته من عندي

tblUser: اسم جدول أيضاً افترضته أيضاً من عندي.

الربط مع Access نستخدم :

OleDBConnection
OleDBCommand
OleDbDataRead

المكتبات السابقة موجودة في فضاء الأسماء:

Imports System.Data.OleDB
#9

السلام عليكم ورحمة الله وبركاته

أشكرا والله يااخي الكريم الصراحة احرجتني كثير

بس للاسف لايزال الخطاء موجود والصفحة لاتعمل

وهذا الكود كامل بعد التعديلات على الاسماء كما طلبت

Imports System.Data.OleDB
Partial Class Search
	Inherits System.Web.UI.Page
	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		GetResults()
	End Sub
	Private Sub GetResults()

		Dim Query As String = ""
		Dim Sql As String = ""
		Dim op As String = ""

		' من أجل إدخال الاسم الأول في البحث
		If Request("fn") <> "" Then
			Query = " name like '%" & Request("fn") & "%' "
			op = " OR "
		End If

		' من أجل إدخال الرقم الوظيفي في البحث
		If Request("ln") <> "" Then
			Query = op & " id like '%" & Request("ln") & "%' "
			op = " OR "
		End If

		' من أجل إدخال رقم التلفون في البحث
		If Request("on") <> "" Then
			Query = op & " tel like '%" & Request("on") & "%' "
			op = " OR "
		End If

		' من أجل إدخال القسم في البحث
		If Request("Addr") <> "" Then
			Query = op & " dep like '%" & Request("Addr") & "%'"
		End If

		If Query = "" Then
			Sql = " select * from Table1"
		Else
			Sql = " select * from Table1" & Query
		End If

		' طبعاً هنا لا تنسى الاتصال بقاعدة البيانات
		OleDbConnection()
		OleDbCommand()
		OleDbDataRead()

	End Sub
	Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim url As String = ""
		url = "~/HomePage.aspx?fn=" & TextBox1.Text.Trim() _
						& "&ln=" & TextBox2.Text.Trim() & "&on=" & TextBox3.Text.Trim() _
						& "&addr=" & TextBox2.Text.Trim()
		Response.Redirect(url, True)
	End Sub
End Class

الرجاء مراجعة الكود وهل هناك خطا في الكود الكامل

اسف للمرة المليون على ازعاجك اخي الكريم

#10

أخي الأسطر هذه ماذا تعني:

OleDbConnection()
OleDbCommand()
OleDbDataRead()

أرجو مراجعة الرابط التالي:

http://www.w3schools.com/aspnet/aspnet_dbconnection.asp

وأيضاً هذا:

http://www.easerve.com/developer/tutorials/asp-net-tutorials-adding-records-access-database.aspx
#11

الكود هذا

OleDbConnection()
OleDbCommand()
OleDbDataRead()

حسب ماشرحت لي طريقة الكونكشن مع الاكسس

اذا انا غلطان ياريت تنورني

#12

السلام عليكم اخوي

الصراحة استفدت كثير من الموقعين اللي عطيتني اياهم كثير كثير

وهذا هو الكود النهائي بعد اضافة بعد التعديلات ياريت تشوف ليه الخطا لازال ظاهر في الكونكشن

Imports System.Data.OleDB
Partial Class Search
	Inherits System.Web.UI.Page
	<%@ Import Namespace="System.Data.OleDb" %>
	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		GetResults()
	End Sub
	Private Sub GetResults()

		Dim Query As String = ""
		Dim Sql As String = ""
		Dim op As String = ""

		' من أجل إدخال الاسم الأول في البحث
		If Request("fn") <> "" Then
			Query = " name like '%" & Request("fn") & "%' "
			op = " OR "
		End If

		' من أجل إدخال الرقم الوظيفي في البحث
		If Request("ln") <> "" Then
			Query = op & " id like '%" & Request("ln") & "%' "
			op = " OR "
		End If

		' من أجل إدخال رقم التلفون في البحث
		If Request("on") <> "" Then
			Query = op & " tel like '%" & Request("on") & "%' "
			op = " OR "
		End If

		' من أجل إدخال القسم في البحث
		If Request("Addr") <> "" Then
			Query = op & " dep like '%" & Request("Addr") & "%'"
		End If

		If Query = "" Then
			Sql = " select * from Table1"
		Else
			Sql = " select * from Table1" & Query
		End If

		' طبعاً هنا لا تنسى الاتصال بقاعدة البيانات
		Dim dbconn, sql2, dbcomm, dbread
		dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
		data source=" & server.mappath("Employee.mdb"))
		dbconn.Open()
		sql2 = "SELECT * FROM Table1"
		dbcomm = New OleDbCommand(sql2, dbconn)
		dbread = dbcomm.ExecuteReader()
		dbread.Close()
		dbconn.Close()
	End Sub
	End Namespace
	Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim url As String = ""
		url = "~/HomePage.aspx?fn=" & TextBox1.Text.Trim() _
						& "&ln=" & TextBox2.Text.Trim() & "&on=" & TextBox3.Text.Trim() _
						& "&addr=" & TextBox2.Text.Trim()
		Response.Redirect(url, True)
	End Sub
End Class

الخطا يكمن في كود الكونكشن هذا

		Dim dbconn, sql2, dbcomm, dbread
		dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
		data source=" & server.mappath("Employee.mdb"))
		dbconn.Open()
		sql2 = "SELECT * FROM Table1"
		dbcomm = New OleDbCommand(sql2, dbconn)
		dbread = dbcomm.ExecuteReader()
		dbread.Close()
		dbconn.Close()

والسبب في الكود هو عدم وجود مايسمي

Namespace

بالشكل الصحيح

ودمت لنا فخرا ياعزيزي

تم تعديل هذه المشاركة بواسطة حبيب الامس في 30 يناير 2007 في 13:23

#13

إذا لم تضف السطر التالي إلى رأس الصفحة فأضفه:

Imports System.Data.OleDb

أخي العزيز أنصحك باقتناء كتاب حول التعامل مع قواعد البيانات من خلال ADO.NET ;)

#14

اهلا اخي

لقد تمت اضافة الكود في اعلي الصفحة وهو واضح في ردي السابق ولايزال الخطا موجود

:(

#16

هلا اخوي كل ماحاولت اضيف البرنامج في المرفقات مايظهر معي شي

ياريت تفيدني يااخوي

شاكر ومقدر لك

تم تعديل هذه المشاركة بواسطة حبيب الامس في 3 فبراير 2007 في 08:37

#17

هلا أخوي انا رفعت الملف في الموقع الي تحت بعد الضغط على كلمة (كمل) راح ينزل عندك الملف

ياريت تشوف لي البرنامج وتشوف الخطا اللي فيه

http://www.tntup.com/file.php?file=5b34850...5192ac912fbb41a

شاكر لك عزيزي

#18

مافي رد يااخوان ؟؟؟؟؟؟؟؟؟

:(

#19

السطر التالي فيه خطأ لأنه لا يجوز كتابة سلسلة نصية على سطرين بهذه الطريقة:

dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("Employee.mdb"))

والصحيح هو:

dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("Employee.mdb"))

أي تكتبها كلها على سطر واحد

#20

هلا اخوي مشكور وماقصرت على الرد

وبالفعل عملت اللي انت قلته لي ومافيه اي خطا بس المشكلة تكمن في الاتي:

اذا كتبت في صفحة البحث وفي الاسم الاول مثلا (omar) المفترض انه يرسلني الي الصفحة الرئيسية وفيها معلومات الشخص المدخل بياناته (omar) بس للاسف ماحصل هالكلام ابدا

ياريت يااخوي تجرب البرنامج لان البرنامج عندك الحين وش بنفسك انه مايظهر معلومات الشخص المراد

شاكر لك ومقدر

هذا الموضوع مغلق.

مواضيع مشابهة