Okay, I just grabbed the database for the houses dynamic queries example for this example. It's really fast and cheap and illustrates how you could do a couple of dynamic queries using the ADO programming route. Here's the general idea for the program:
Just like that! You can download my project files and the same db below,
And also have a look at the source code below. I won't go through the design process, the only thing I did that was out of the ordinary was changing the visibility property of the ADO Data Control to false. Anyways, the code:
Option Explicit
Dim strPrice As String
Dim strYear As String
' this button just spits out a count of how many records the latest dyno query returned
Private Sub Command1_Click()
MsgBox Adodc1.Recordset.RecordCount, vbOKOnly, "# of Records Returned"
End Sub
' this button will step through the records one by one and save their ids in a string,
' which is then displayed in a message box.
Private Sub Command2_Click()
Dim duh As String
duh = ""
With Adodc1.Recordset
' move to the first record, top o' the list
.MoveFirst
While Not .EOF
' this saves the value in the ID field of the current record. Hint: you can
' do the same thing for any other column in the db / record / whatever
' (so .Recordset!YearBuilt would return that number for the current record)
duh = duh & " " & !ID
.MoveNext
Wend
End With
MsgBox duh, vbOKOnly, "IDs of Records Returned"
End Sub
Private Sub Form_Load()
' init some values for the query strings (note: it _always_ needs a query for YearBuilt,
' I just set it to be one less than the lowest number in the db. This is a cheap hack.
' It does get requeried on the fly, this just sort of seeds the preliminary results. The
' reason there needs to be a yearbuilt query is that everything else gets anded on the
' end, and without it the logic won't make sense to the sql query dude.)
strPrice = ""
strYear = " YearBuilt > 1964"
With Adodc1
' initialize our connection to the database
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
App.Path & "\housedata.mdb;Persist Security Info=False"
' set up the first query
.RecordSource = BuildQuery()
' refresh the data source to make sure the query goes through. I'm still unclear
' as to how a bunch of this works...
.Refresh
End With
Label2.Caption = "Year Built > " & Slider2.Value
End Sub
' here's some hip query action happening and stuff. (slider1 does price, slider2
' does construction date)
Private Sub Slider1_Change()
strPrice = " and AskingPrice < " & Slider1.Value
Label1.Caption = "Asking Price < $" & Slider1.Value & ".00"
Adodc1.RecordSource = BuildQuery()
Adodc1.Refresh
End Sub
Private Sub Slider2_Change()
strYear = " YearBuilt > " & Slider2.Value
Label2.Caption = "Year Built > " & Slider2.Value
Adodc1.RecordSource = BuildQuery()
Adodc1.Refresh
End Sub
' this function just builds an sql query based on a bunch of substrings that are managed
' by individual controls in this project and are stored globally.
Private Function BuildQuery() As String
BuildQuery = "select * from Houses where " & strYear & strPrice
End Function