ورود

View Full Version : سوال: سوال درباره‌ي ديتابيس : نمايش اطلاعات در ليست‌باكس



mehdi_7070
پنج شنبه 20 تیر 1387, 11:26 صبح
سلام
فرض كنيم يك ديتابيس داريم به اين شكل :

Test test1/test2/test3
A a1/a2
B b1
حالا ما Test را جستجو مي‌كنيم و قاعدتا چيزي كه براي ما برمي‌گردونه اين هست : test1/test2/test3
من مي‌خوام كه اين‌ها توي يك ليست‌باكس جدا از هم نمايش داده بشه . مثل تصوير زير :
http://barnamenevis.org/forum/attachment.php?attachmentid=20180&d=1215674321
در ضمن ، مشخص نيست كه حتما كاراكتر "/" وجود داره يا حتما دو تا "/" وجود داره . ممكن هست اصلا نباشه و يا 10 تا "/" داشته باشيم .
چيزي كه به ذهن خودم رسيد اين هست كه بياييم طول رشته را بگيريم و از اول شروع كنيم چك كردن تا به / برسيم ، بعد اون كاراكترها را به ليست اضافه كنيم و ... . راه بهتري هست؟
با تشكر

Mbt925
پنج شنبه 20 تیر 1387, 11:38 صبح
بالاخره باید یه جداکننده وجود داشته باشه حالا یا یدونه "/" یا هزارتا.

در این صورت می تونید از تابع Split استفاده کنید.



Split(expression[, delimiter])


این تابع به صورت زیر استفاده میشه:





Dim str1 As String
Dim strSplit() As String

str1 = "m/n//a/b///c"

strSplit = Split(str1, "/")




در این حالت یه مشکل کوچیک وجود داره : وجود چند "/" کمی ایجاد مشکل می کنه . (با تست کردن کد بالا متوجه خواهید شد)

برای رفع این مشکل یه تابع براتون نوشتم که هر تعداد "/" رو به یکی تبدیل می کنه:





Private Function ConvertMultiSlash_To_Slash(ByRef strMain As String)

Do While True

strMain = Replace(strMain, "//", "/")

If InStr(strMain, "//") = 0 Then

Exit Do

End If

Loop

End Function




بنابراین کد قبل رو به صورت زیر تغییر بدید:





Private Sub Form_Load()

Dim str1 As String
Dim strSplit() As String

str1 = "m/n//a/b///c"

Call ConvertMultiSlash_To_Slash(str1)

strSplit = Split(str1, "/")

End Sub

mehdi_7070
پنج شنبه 20 تیر 1387, 11:58 صبح
خيلي ممنون Mbt925 عزيز
سوالي كه دارم اين هست كه خروجي Split چه‌طوري هست؟
مثلا در خط آخر داريم :

strSplit = Split(str1, "/")
حالا براي نمايش در ليست‌باكس بايد چه‌كار كنيم؟ چون مثلا Print strSplit خطا ميده .

Mbt925
پنج شنبه 20 تیر 1387, 12:04 عصر
همونطور که مشخصه، خروجی این تابع در متغیر strSplit قرار گرفته که یه آرایه از نوع رشته است.

حالا باید این آرایه رو پیمایش کنید و تک تک خونه هاشو در لیست باکس قرار بدید:





For i=0 to Ubound(strSplit)
List1.AddItem strSplit(i)
Next

mehdi_7070
پنج شنبه 20 تیر 1387, 12:14 عصر
ولی خطا میده :
Run-time error 13:
type mismatch

+ ببخشید . درست شد