View Full Version : Really need help... VISUAL BASIC
Falcon_Spines
Mar 5, 2004, 08:19 AM
Hey kailangan ko ng tulong sa Visual Basic 6.0 about searching arrays...
Basically... gagawa ako ng PLATE NUMBER SEARCHER.
The idea is that.... mag iistore ako ng plate numbers sa array... then yun GUI interface may:
4 textboxs (2 for inputting letters and 2 for inputting text), 1 commandbutton and 1 listbox.
ang mangyayari is that dapat 4 characters lang ang iinput sa 4 textboxes.
Tapos pag click niya sa command button lalabas sa listbox yun mga potential matches duun sa nilagay sa textbox.
Example....
pag nagtype ka ng a, b, 1 & 2 sa mga textbox lalabas sa listbox yun mga potential matches doon sa pre-stored array. like...
abc 123
vba 421
mba 216
this means that yun mga wala sa specifications like:
ghi 987
wer 998
koi 546
hindi madidisplay.
tapos kung wala sa prestored array yun hinahanap... lalagay sa listbox... "search not found"
(siguro I need to prestore about 500 arrays with the format XXX 000 therein X's are letters and 0's are numbers.)
Please patulong dito... kulang ata ako sa utak for visual basic eh... I really need this or i'll flunk my compuer class... PM me nalang kung may suggestions kayo or anything. Salamat nang marami!!
bronze_freak
Mar 5, 2004, 09:41 AM
IMO, the problem with arrays kase, ang searching dun is from top to bottom, so lets say 5,000 records *** isesearch mo, imagine, from record 1 to 5,000 ang pagsearch...i guess it will take some time just to seek the required records. Thats why i recommend you to use a database for faster searching. :D
'*** Code ***
'ikaw na bahala kugn san mo gusto ilagay *** database. hee hee.
Private Const cnstDbName = "C:\PlateNumber.mdb"
'*******
Sub Form_load()
If Dir(cnstDbName) = "" Then CreatePlateNumberDbase
End Sub
'*******
Sub CreatePlateNumberDbase()
dim Db as Database
Set Db = DBEngine.Workspaces(0).CreateDatabase(cnstDbName, dbLangGeneral)
Set Tb = Db.CreateTableDef("tblPlateNumber")
With Tb
.Fields.Append .CreateField("plate_number", dbText, 100)
.Fields("plate_number").AllowZeroLength = True
End With
Set Idx = Tb.CreateIndex("IDX")
Idx.Fields.Append Idx.CreateField("plate_number")
Tb.Indexes.Append Idx
Db.TableDefs.Append Tb
Db.Close
End Sub
'*******
Sub Command1_Click()
dim Db as Database,Rs as Recordset,sql$
list1.clear
if text1 <> "" and text2 <> "" and text3 <> "" and text4 <> "" then
Set Db = DBEngine.Workspaces(0).OpenDatabase(cnstDbName, dbLangGeneral)
sql="SELECT plate_number FROM tblPlateNumber WHERE (instr(plate_number,'" & text1 & "') > 0) AND
(instr(plate_number,'" & text2 & "') > 0) AND
(instr(plate_number,'" & text3 & "') > 0) AND
(instr(plate_number,'" & text4 & "') > 0) ORDER BY plate_number ASC;"
Set Rs = db.openrecordset(sql)
If not Rs.Eof then
do until rs.eof
list1.additem rs!plate_number
rs.movenext
loop
Else
msgbox "No Records Found!",vbinformation,"ERROR"
End If
rs.close
Db.Close
End If
End Sub
hope this helps. :D :up:
Bugster
Mar 5, 2004, 04:36 PM
tama ka jan bronze_freak mas mabilis nga mag access ng data pag nkadatabase ka... lago na kung sql server ang gamit mo...
bronze_freak
Mar 6, 2004, 12:52 PM
Originally posted by bronze_freak
'*******
Sub CreatePlateNumberDbase()
dim Db as Database,Tb as TableDef, Idx as Index
Set Db = DBEngine.Workspaces(0).CreateDatabase(cnstDbName, dbLangGeneral)
Set Tb = Db.CreateTableDef("tblPlateNumber")
With Tb
.Fields.Append .CreateField("plate_number", dbText, 100)
.Fields("plate_number").AllowZeroLength = True
End With
Set Idx = Tb.CreateIndex("IDX")
Idx.Fields.Append Idx.CreateField("plate_number")
Tb.Indexes.Append Idx
Db.TableDefs.Append Tb
Db.Close
End Sub
i forgot to declare the items in bold...:hiya:
elyserva
Mar 6, 2004, 01:14 PM
Mag-Access ka na lang! Unless it's your school project! :D
Falcon_Spines
Mar 7, 2004, 11:55 AM
School project po siya...:(
500 arrays lang naman yun required sa akin na ilagay sa hindi naman siguro mabagal magsearch?
**BTW.... saan ilalagay yun database na sinasabi mo? Sorry talaga ah... i really suck at programming...
elyserva
Mar 7, 2004, 12:19 PM
You can use Access as your database. But in your case, I don't think you can do that. Required ng problem mo yung mag create ka ng array e!
codehacker
Mar 7, 2004, 11:41 PM
if its a school project, stick with the arrays... if its not go work on a database. the truth is, sobrang bagal ng array lalo na pag di ka pa sanay magprogram. If you're going to go brute force para magsearch, di maganda. It'd take more programming experience naman if you want to improve and use difference theories para sa search. Pag DB, madali lang magsearch dito, parang select * from platnumbers where platenumber like ..... masoks...
bronze_freak
Mar 8, 2004, 11:15 AM
Originally posted by Falcon_Spines
School project po siya...:(
500 arrays lang naman yun required sa akin na ilagay sa hindi naman siguro mabagal magsearch?
**BTW.... saan ilalagay yun database na sinasabi mo? Sorry talaga ah... i really suck at programming...
ah ganun ba....sige here's the code if you want the array. :D
'******
Dim gArray() as String,ArrayCount as Long
'******
Function SearchPlateNumber(List1 as Listbox,Byval text1 as string, _
byval text2 as string, byval text3 as string, _
byval text4 as string) as Boolean
Dim ii as long
List1.clear
SearchPlateNumber=false
for ii = lbound(gArray) to ubound(gArray)
if trim(gArray(ii)) <> "" then
if (instr(1,gArray(ii),text1,vbTextCompare ) > 0)
and (instr(1,gArray(ii),text2,vbTextCompare ) > 0)
and (instr(1,gArray(ii),text3,vbTextCompare ) > 0)
and (instr(1,gArray(ii),text4,vbTextCompare ) > 0) then
list1.additem gArray(ii)
SearchPlateNumber=true
end if
end if
next
End Function
'******
Sub Command1_Click() 'used for searching
If Not SearchPlateNumber(List1, TextBox1, TextBox2, TextBox3, TextBox4) then
msgbox "No Records Found!"
End If
End Sub
'******
Sub Form_Load()
ArrayCount=0
redim preserve gArray(ArrayCount) as string
End Sub
'******
Sub Command2_Click() 'used to manually input platenumbers into the array
txtPlateNumber=trim(ucase(txtPlateNumber))
if txtPlateNumber <> "" then
AddToArray txtPlateNumber
else
msgbox "Plate Number is Mandatory."
end if
txtPlateNumber=""
end Sub
'******
Sub AddToArray(Byval PlateNumber as string)
ArrayCount=ArrayCount + 1
Redim Preserve gArray(ArrayCount) As String
gArray(ArrayCount) = txtPlateNumber
End Sub
Alright..ok na ba ito :?: :D If you want to validate the format of the plate numbers inputted...much better. :D
vBulletin® v3.6.12, Copyright ©2000-2009, Jelsoft Enterprises Ltd.