PDA

View Full Version : سوال: نحوه استفاده از تابع split در کوئری



nazanin_90
سه شنبه 05 اردیبهشت 1391, 23:27 عصر
با سلام
در بخش کوئری اکسس به چه صورتی باید از تابع split استفاده نمود مثلاً تابع زیررا می خواهیم در یک کوئری بکار ببریم:



Exper1= Split(A, "-")(1)



در تابع فوق A فیلد جدول می باشد
با تشکر

Abbas Amiri
چهارشنبه 06 اردیبهشت 1391, 10:48 صبح
شما به این ترتیب نمیتوانید فیلد قابل مشاهده ای ایجاد کنید خروجی تابع Split یک آرایه رشته ای است باید یک تابع دیگر ایجاد و عضو مورد نظر از مجموعه بازگشتی از تابع Split را بدست آورید
دو مثال برایتان می آورم:
اولی جهت برای بدست آوردن عضوهای متناظر از یک رشته مانند "strTag= "DefaultValue:=Test;Enabled:=0;Visible:=1 استفاده میشود.


Public Function getTheValue(strTag As String, strValue As String) As String
' Sample:
' getTheValue("DefaultValue:=Test;Enabled:=0;Visible:=1", "DefaultValue")
' Return : "Test"
' ************************************************** ***********
On Error Resume Next
Dim workTb() As String
Dim Ele() As String
Dim myVariabs() As String
Dim i As Integer
workTb = Split(strTag, ";")
ReDim myVariabs(LBound(workTb) To UBound(workTb), 0 To 1)
For i = LBound(workTb) To UBound(workTb)
Ele = Split(workTb(i), ":=")
myVariabs(i, 0) = Ele(0)
If UBound(Ele) = 1 Then
myVariabs(i, 1) = Ele(1)
End If
Next
For i = LBound(myVariabs) To UBound(myVariabs)
If strValue = myVariabs(i, 0) Then
getTheValue = myVariabs(i, 1)
End If
Next
End Function

ودومی nامین عضواز مجموعه رشته ای مانند" strSearch="Tehran,Esfahan,Mashhad,Shiraz بدست می آورد


Private Function GetSection(strSearch As String, Optional Delemiter As String = ",", Optional Nth As Integer = 1) As String
Dim workTb() As String, k As Integer, j As Integer
workTb = Split(strSearch, Delemiter)
k = UBound(workTb)
If k < Nth - 1 Then Exit Function
GetSection = workTb(Nth - 1)
End Function

برای مورد دوم استفاده ازتابع choose هم وجودارد

nazanin_90
چهارشنبه 06 اردیبهشت 1391, 17:30 عصر
شما به این ترتیب نمیتوانید فیلد قابل مشاهده ای ایجاد کنید خروجی تابع Split یک آرایه رشته ای است باید یک تابع دیگر ایجاد و عضو مورد نظر از مجموعه بازگشتی از تابع Split را بدست آورید
دو مثال برایتان می آورم:
اولی جهت برای بدست آوردن عضوهای متناظر از یک رشته مانند "strTag= "DefaultValue:=Test;Enabled:=0;Visible:=1 استفاده میشود.


Public Function getTheValue(strTag As String, strValue As String) As String
' Sample:
' getTheValue("DefaultValue:=Test;Enabled:=0;Visible:=1", "DefaultValue")
' Return : "Test"
' ************************************************** ***********
On Error Resume Next
Dim workTb() As String
Dim Ele() As String
Dim myVariabs() As String
Dim i As Integer
workTb = Split(strTag, ";")
ReDim myVariabs(LBound(workTb) To UBound(workTb), 0 To 1)
For i = LBound(workTb) To UBound(workTb)
Ele = Split(workTb(i), ":=")
myVariabs(i, 0) = Ele(0)
If UBound(Ele) = 1 Then
myVariabs(i, 1) = Ele(1)
End If
Next
For i = LBound(myVariabs) To UBound(myVariabs)
If strValue = myVariabs(i, 0) Then
getTheValue = myVariabs(i, 1)
End If
Next
End Function

ودومی nامین عضواز مجموعه رشته ای مانند" strSearch="Tehran,Esfahan,Mashhad,Shiraz بدست می آورد


Private Function GetSection(strSearch As String, Optional Delemiter As String = ",", Optional Nth As Integer = 1) As String
Dim workTb() As String, k As Integer, j As Integer
workTb = Split(strSearch, Delemiter)
k = UBound(workTb)
If k < Nth - 1 Then Exit Function
GetSection = workTb(Nth - 1)
End Function

برای مورد دوم استفاده ازتابع choose هم وجودارد

با سلام و عرض تشکر از جناب امیری
در رخداد کلیک یک کمند باتن در یک فرم با استفاده از کد زیر میتوانم قسمتی از رشته شماره حساب(Num_Hesab) را در فیلد شماره مشتری(Num_Moshtari) جدا و قرار بدهم ولی می خواهم که این عملیات مستقیماً از طریق کوئری انجام شود

جدول دارای دو فیلد شماره حساب و شماره مشتری است.شماره حساب مثلاً 1-125-235-2 میباشد
که با اجرای کد فوق عدد 235 در فیلد شماره مشتری قرار داده میشود.و اینکار برای کلیه رکوردها قابل اجرا است
با تشکر




Dim db As Database, rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("TNum_Hesab")
Do While rs.EOF = False
rs.Edit
rs.Fields("Num_Moshtari") = Split(rs.Fields("Num_Hesab"), "-")(1)
rs.Update
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

Abbas Amiri
چهارشنبه 06 اردیبهشت 1391, 18:07 عصر
فانکشن GetSection را Public تعریف و برای بدست آوردن قسمت دوم رشته موردنظر به ترتیب زیر عمل کنید


rs.Fields("Num_Moshtari") = GetSection(rs.Fields("Num_Hesab"),"-",2)