Solved

Help streamlining some logic

Posted on 2011-02-11
10
367 Views
Last Modified: 2012-08-14
I have four checkboxes on a form that, when selected correspond to a search term for a single field.

My code surely can be condensed but I'm not as fluent as some of you all!

Please help me make this prettier code:

dim sFieldName as string 'this will become a piece of sql that searches on FieldName

If me.chkBox1 then sFieldName = 'Field like 'mammal'"
end if

if sfieldName = "" and me.chckbox2 then
     sFieldName = "Field like 'reptile'"
    elseif sFieldName <> "" and chkbox2 then
     sFieldName = sFieldName & " OR Field like 'reptile'"
end if

if sfieldName = "" and me.chckbox3 then sFieldName = "Field like 'crustacean'"
    elseif sFieldName <> "" and chkbox3 then sFieldName = sFieldName & " OR Field like 'crustacean'"
end if

if sfieldName = "" and me.chckbox4 then sFieldName = "Field like 'fish'"
    elseif sFieldName <> "" and chkbox4 then sFieldName = sFieldName & " OR Field like 'fish'"
end if

Thanks for the help. :)
0
Comment
Question by:epuglise
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
10 Comments
 
LVL 9

Expert Comment

by:sshah254
ID: 34875767
Why don't you do something like

field in ('mammal', 'reptile', ....).

This should be easier to implement.

Unless you need to use the "like" option (this is done if the search will have a wildcard in it).

Ss
0
 
LVL 11

Accepted Solution

by:
Runrigger earned 500 total points
ID: 34875805

Private Sub Test()
Dim sConditions() As String, sCriteria As String

    'Set the intial size of the array to 1
    ReDim Preserve sConditions(0)
   
    If Me.chckbox1 Then sConditions(UBound(sConditions)) = "Field like 'mammal'"
   
    If Me.chkcbox2 Then
        ReDim Preserve sConditions(UBound(sConditions) + 1)
        sConditions(UBound(sConditions)) = "Field like 'reptile'"
    End If
   
    If Me.chkcbox3 Then
        ReDim Preserve sConditions(UBound(sConditions) + 1)
        sConditions(UBound(sConditions)) = "Field like 'crustacean'"
    End If
   
    If Me.chkcbox4 Then
        ReDim Preserve sConditions(UBound(sConditions) + 1)
        sConditions(UBound(sConditions)) = "Field like 'fish'"
    End If

    sCriteria = Join(sConditions, " OR ")

End Sub
0
 

Author Comment

by:epuglise
ID: 34875857
I may start thinking in arrays... a concept I totally understand but whose language I can not yet speak.  I like this abstraction a lot. Thanks.  I have another similar thorny problem that I'll also be able to use this checking method with!! Thanks.
0
SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

 

Author Comment

by:epuglise
ID: 34875897
That is a great piece of code!  Thanks!
0
 
LVL 11

Expert Comment

by:Runrigger
ID: 34875995
you are very welcome, I am certain that some other experts will be able to streamline further!

try the below, should work regardless of a part of the array being empty

Happy playing.
Regards
Dave



Private Sub Test()
Dim sConditions() As String, sCriteria As String

    'Create a blank array
    ReDim Preserve sConditions(3)
   
    If Me.chckbox1 Then sConditions(0) = "Field like 'mammal'"
   
    If Me.chkcbox2 Then  sConditions(1) = "Field like 'reptile'"
   
    If Me.chkcbox3 Then  sConditions(2) = "Field like 'crustacean'"
   
    If Me.chkcbox4 Then  sConditions(3) = "Field like 'fish'"

    sCriteria = Join(sConditions, " OR ")

End Sub
0
 
LVL 11

Expert Comment

by:Runrigger
ID: 34875997
let me know.
Dave
0
 

Author Comment

by:epuglise
ID: 34920931
Ok Dave, I hit a snag when I have a single condition that is true. I need to know how many items are in the array right? I'd be happy to open another question if necessary. Title suggestions welcomed.
0
 
LVL 11

Expert Comment

by:Runrigger
ID: 34921345
I didn't think that it would join a single entry array, I am surprised!

Check this condition;

If Ubound(sConditions)=0 then
sCriteria=sConditions(0)
else
sCriteria = Join(sConditions, " OR ")
end if
0
 

Author Comment

by:epuglise
ID: 34930049
So the problem was in a new version of the code you gave me i was dealing with text boxes that might or might not have entries. I think I figured it out, but the problem was that it would occasionally populate the first (0) entry of the array with a null so the first element of the join statement was blank. Weird.  I solved it by adding a check to the code (similar to yours) that determined if the (0) entry was empty, and if so, fill it.  Thanks for the follow up help.  BTW they've asked me to build another tool (actually upgrade someone else's) so I'm sure I'll be back with more questions!  
0
 
LVL 11

Expert Comment

by:Runrigger
ID: 34930155
Glad that I was able to help.

Good luck
Dave
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
This article describes a method of delivering Word templates for use in merging Access data to Word documents, that requires no computer knowledge on the part of the recipient -- the templates are saved in table fields, and are extracted and install…
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question