پيدا كردن يك كلمه در يك جمله با asp

nima_isp

Member
سلام

من يه سوال برام پيش اومده و اونم اينه كه ما يه جمله داريم كه يكي از فيلد هاي يه ديتا بيس هست كه به فارسي هم هست

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

مرسي
 

mazoolagh

Active Member
اگر ديتابيس access هست بهتره كه اسم فيلد رو انگليسي بگذاري و عبارت فارسي رو براي caption استفاده كني كه به اين مشكلات برخورد نكني. اسم فيلد ميتونه فارسي باشه و كار هم ميكنه ولي مشكلات اجرايي داره بخصوص در محيط كد نويسي كه هم نوشتن و هم اصلاح كد دردسر داره!
 

pgh_on

New Member
کد:
[align=left]
keyword = Request("keywordtext")

if keyword<>"" then

     sts = Split(keyword," ")

  DO WHILE NOT ObjectRecordSet.EOF

         k = TRIM(ObjectRecordSet("فيلدي كه ميخواهد بر روي آن جستجو انجام شود"))

         sns = Split(k , " " )
         
         for l = 0 to UBound(sns)
              for n = 0 to UBound(sts)
                    if sts(n) = sns(l)  then
                           sres = sres + 1
                        
                                 Response.write ("اطلاعات مورد نظر شما")
             
                           n = UBound(sts)
                           l = UBound(sns)
                          srf = 1
                     end if
               next
           next
ObjectRecordSet.MoveNext
LOOP

end if

[/align]
 

nima_isp

Member
كار نميكنه



کد:
<html>
<head>
	<META http-equiv=Content-Type content="text/html; charset=UTF-8">
</head>
</html>
<% 
dim objrs2
DIM objconn2
set objconn2=server.createobject("ADODB.connection")
objconn2.connectionstring="DRIVER={Microsoft Access Driver (*.mdb)};"&_
					"dbq=" & Server.MapPath("book.mdb")

objconn2.open
set objrs2=server.createobject ("ADODB.Recordset")
objrs2.open "main",objconn2, , , 2

keyword = "نیما"

if keyword<>"" then 

     sts = Split(keyword," ") 

  DO WHILE NOT objrs2.EOF 

         k = TRIM(objrs2("motarjem")) 

         sns = Split(k , " " ) 
          
         for l = 0 to UBound(sns) 
              for n = 0 to UBound(sts) 
                    if sts(n) = sns(l)  then 
                           sres = sres + 1 
                        
                                 Response.write ("اطلاعات مورد نظر شما") 
              
                           n = UBound(sts) 
                           l = UBound(sns) 
                          srf = 1 
                     end if 
               next 
           next 
objrs2.MoveNext 
LOOP 

end if 
objrs2.close
set objrs2=nothing
objconn2.close
set objconn2=nothing 
%>
 

alinasirii

New Member
سلام به بچه هاي خوب ايران
اگه ميخواي توي بانك اطلاعاتي جستجو كني فقط از دستورهاي sql استفاده كن هم سرعتش بيشتره هم يه خطه!!!!
 

mazoolagh

Active Member
آقا نيما!
برداشت من از سوال شما اينه كه نام فيلد مورد نظر در ديتابيس فرضا چيزي شبيه (نام و نام خانوادگي) است. در هر صورت اين نام مشخص و ثابت است و جستجو در آن معني نداره مگر اينكه شما براي هر فرضا نفر به جاي يك ركورد يك فيلد به جدول اضافه كردين كه اشتباه مسلم طراحي است حال چه فارسي باشه چه انگليسي.
احتمالا اگر منظور شما چيز ديگري است واضحتر بيان كنيد.
 

naeim_crack

Active Member
سلام
اقا منظورش این نیست
ببین این اق یه دیتابیس داره که مثلا یه فیلدش به اسم name هستش داخل این فیلد naem یک سری رکورد اضافه شده مثل نیما رضاییان و علی ابراهیمی و .نیما عبادی
حالا این می خواد وقتی در قسمت جستجو میره به جای اینکه اسم کامل رو بده می خواد وقتی نوشت نیما هم نمیا عباید و هم نیما رضاییان رو براش پیدا کنه
با strsearch میشه و لی با فارسی مشگل داره
 

mazoolagh

Active Member
آها! حالا فهميدم!

کد:
select FIELD from TABLE where FIELD like '%' + N'مازولاق' + '%'
 

nima_isp

Member
من نميدونم چه طوري از دستورا sql توي acess و با زبان asp ميشه استفاده كرد ميشه كامل تر بگيد
 

mazoolagh

Active Member
كد پايين صد در صد هر جستجوي فارسي و لاتين حتي مخلوط و با فاصله رو هم انجام ميده. براي مسير و نام ديتابيس و نام جدول و نام فيلد مقادير مربوط به خودتون رو بذارين.
ضمنا بسته به اين كه هنگام ورود اطلاعات چه كدپيجي بوده ممكنه لازم باشه دو تا خط مربوط تبديل كدهاي حروف (ي) و (ك) رو فعال يا غيرفعال كنيد (اينجا غيرفعال هست تا مشخص باشه)

کد:
<html dir=rtl >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<title>FARSI SEARCH</title>
</head>

<body>
<FORM name="F1" method=post action="FARSI_SEARCH.ASP">
<label for "T1">عبارت مورد نظر :</label>
<input type=text name="T1" dir=rtl maxlength=50>
<input type=submit value="جستجو">
<%
IF LEN(REQUEST.FORM("T1"))>0 THEN
	DATABASE_PATH = "databases\CLINIC_DATA.mdb"
	TABLE_NAME = "TARIFF"
	FIELD_NAME = "SERVICE"
	DIM CONN
	SET CONN = Server.CreateObject("ADODB.Connection")
	CONN.OPEN ("Driver={Microsoft Access Driver (*.mdb)};Dbq=" & SERVER.MAPPATH(DATABASE_PATH))
	DIM RS
	SET RS = Server.CreateObject("ADODB.Recordset")
	SQLQ = "SELECT " & FIELD_NAME & " FROM " & TABLE_NAME & " WHERE " & FIELD_NAME & " LIKE '%" & FX(REQUEST.FORM("T1")) & "%'"
	RS.OPEN SQLQ, CONN
%>
<table>
<%
	DO WHILE NOT RS.EOF
	X = UNI(RS("SERVICE"))
%>
<tr>
<td><%=X%></td>
</tr>
<%	
		RS.MOVENEXT
	LOOP
%>
</table>
<%
	RS.CLOSE
	SET RS = NOTHING
	CONN.CLOSE
	SET CONN = NOTHING
END IF

FUNCTION UNI(X)
Z=""
FOR I=1 TO LEN(X)
	Z = Z & "&#" & ASCW(MID(X,I,1)) & ";"
NEXT
UNI=Z
END FUNCTION

FUNCTION FX(X)
Z=""
DIM RX, MTC, MTCS
SET RX = NEW REGEXP
RX.PATTERN = "&#....;"
DO WHILE RX.TEST(X)
	SET MTCS = RX.EXECUTE(X)
	FOR EACH MTC IN MTCS
		Y = MID(MTC.VALUE,3,4)
'		IF Y=1740 THEN Y=1610	'yeh
'		IF Y=1705 THEN Y=1603	'kaf
		Z = Z & LEFT(X,MTC.FIRSTINDEX) & CHRW(Y)
		X = RIGHT(X,LEN(X)-7)
		EXIT FOR
	NEXT
LOOP
FX = TRIM(Z & X)
END FUNCTION
%>
</FORM>
</body>
</html>
 

جدیدترین ارسال ها

بالا