Tutorial 3: Accessing Databases Using The ADO Data Control: Contents
Tutorial 3: Accessing Databases Using The ADO Data Control: Contents
With that going, you can push the play button (center of the top tool bar) and see
what it looks like. There are a couple of things you can do with it:
• You can add CDs to the Database by entering some info in the textboxes and
pushing the "Add This Info" button
o This has changed: now, the "Add Entry" button will not enable until all
three textboxes contain text.
o The "Track Count" textbox will only accept numeric characters
o This program does not check for duplicate entries in the database. If
you do that, it'll crash. :)
• You can select a row from the grid and hit the "Remove Selected" button to
remove it permanently from the database
• The form now resizes properly. So, if you resize the form, the grid and frames
will resize appropriately (to a certain point)
Build Example Program 6 from Scratch:
Okay, let's get down and dirty. :) This one's quite a bit bigger than the other one
(although the bigger is more or less useless stuff that was thrown in for fun, haha!).
Software Design
Okay, as mentioned at the top of this article, we're going to use the ADO (ActiveX
Data Objects) data control for getting at data instead of the common data control
used in Example 3. I know what you're thinking: who cares. :) In any case, ADO can
provide you with a little more customizability and a little bit more speed, but it's also
a little more difficult to use. No problem, though, there's a cheap way around
everything, so let's dive right in.
1. First thing first, start up VB with a Standard Exe project.
2. Go to the Project menu and select Components (near the bottom). You
want to add two new controls to your project:
o the Microsoft ADO Data Control (OLEDB) and
o the Microsoft Hierarchical FlexGrid Control 6.0 (note this is not the
FlexGrid as used in Example 3)
the add components dialog
3. Okay, now do the following stuff to your main form:
1. Change the caption of your main form to something hip and jive ...
2. Add a Heirarchical FlexGrid to your form by picking the tool and
drawing it on your main form.
3. Add an ADO data source control to the form using the tool and
drawing on the form. Change its visibility property to False.
4. Add two frames to the form using the tool and drawing them on
the form.
Change for one frame:
its caption to Add Entry
its (name) to fraAddEntry
Change for the other (second) frame:
its caption to Remove Entry
its (name) to fraRemoveEntry
5. Draw the following controls in the Add Entry frame (yes, actually in the
frame):
A text box with the (name) txtArtistName
A label above that text box with the caption Artist Name
A text box with the (name) txtAlbumTitle
A label above that text box with the caption Album Title
A text box with the (name) txtTrackCount
A label above that text box with the caption Number of Tracks
A command button with the (name) cmdAddEntry and the
caption Add this info
2. Now, to the Remove Entry frame, add the following controls:
A command button with the (name) cmdRemoveEntry and the
caption Remove Selected
A label with the caption Select the entry you want to remove
and click the button:
4. Now, the most complicated part is formatting the Heirarchical FlexGrid (which
is called MSFHlexGrid1) to do what you want. It's fairly customizable, but
here's all I did for this example program:
1. the AllowBigSelection property was set to False
2. the AllowUserResizing property was set to 0
3. the FixedCols property was set to 0 while the FixedRows property
was set to 1 (this is recommended for pretty displaying of stuff)
4. the FocusRect property was set to 0
5. the HighLight property was set to 1
6. the ScrollBars property was set to 2
7. the ScrollTrack property was set to True
8. the SelectionMode property was set to 1 (selection by row only)
5. In the form design window, double click the form, which should bring up the
code window with a blank Form_Load() subroutine.
o You'll notice this time that we do the data and database hookup in
code instead of in the property sheet.
For the ConnectionString property of the ADO Data Control, you can
build it in the property sheet. There's a wizard in there that will do it
from scratch for you, but it's pretty annoying to surf through. That's
why I just included this string instead (it was built in the wizard
though)
You need two global variables, and they appear right above the
Form_Load() method.
For the FlexGrid DataSource, note that the Set
command/directive/whatever is used!! Here's the code:
Option Explicit
' the record source just tells the data control what and how
' to pull out of the database. Just raw SQL here.
.RecordSource = "select * from CDs order by ArtistName"
End With
' set the Flex Grid data source to be the ADO data control.
Set MSHFlexGrid1.DataSource = Adodc1
' position all the controls happily and store the form minimum size
MinHeight = Form1.Height
MinWidth = Form1.Width
Call Form_Resize
End Sub
6. Okay, that's done. From the event ComboBox at the top of the code window,
pick the Resize event. You should then get a shell for the Form_Resize()
method. This gets called whenever you resize the form, and we'll just use it to
make a resized form look pretty. Here's what to fill in:
Private Sub Form_Resize()
' check to see if the form is getting too small (Note: this is just
to avoid
' the math necessary to shrink all the textboxes, hahahaha!!)
If MinHeight > Form1.Height Then
Form1.Height = MinHeight
Exit Sub
ElseIf MinWidth > Form1.Width Then
Form1.Width = MinWidth
Exit Sub
End If
' resize the happy columns to look pretty (40% for each text
column, 20% for Track)
MSHFlexGrid1.ColWidth(0) = 0.4 * MSHFlexGrid1.Width
MSHFlexGrid1.ColWidth(1) = MSHFlexGrid1.ColWidth(0)
MSHFlexGrid1.ColWidth(2) = MSHFlexGrid1.Width -
(MSHFlexGrid1.ColWidth(0) * 2) - 60
' reposition and resize the frames on the screen to fit nicely
(there was no
' science here, just did it by trial and error)
fraAddEntry.Top = (Form1.ScaleHeight / 2) + 100
fraAddEntry.Height = (Form1.ScaleHeight / 2) - 150
fraAddEntry.Width = (Form1.ScaleWidth * 0.64)
fraRemoveEntry.Height = (Form1.ScaleHeight / 2) - 150
fraRemoveEntry.Top = (Form1.ScaleHeight / 2) + 100
fraRemoveEntry.Width = (Form1.ScaleWidth * 0.36) - 100
fraRemoveEntry.Left = fraAddEntry.Width + 100
End Sub
7. Now, go back to the form design window and double click the Add this info
button. You should now have a blank cmdAddEntry_Click() subroutine. The
code is pretty much identical to the old database example, but here's what to
fill in, anyways:
Private Sub cmdAddEntry_Click()
' add a new entry to our table.
With Adodc1.Recordset
.AddNew
!ArtistName = txtArtistName
!AlbumTitle = txtAlbumTitle
!Tracks = txtTrackCount
.Update
.Requery
End With
' refresh the data source and rebind it to the flexgrid (annoying!!)
Adodc1.Refresh
Set MSHFlexGrid1.DataSource = Adodc1
MSHFlexGrid1.FormatString = "Artist Name | Album Title | Track
Count"
Call Form_Resize
' clear the text fields once the new record is added
txtArtistName = ""
txtAlbumTitle = ""
txtTrackCount = ""
' refresh the data source and rebind it to the flexgrid (annoying!!)
Adodc1.Refresh
Set MSHFlexGrid1.DataSource = Adodc1
MSHFlexGrid1.FormatString = "Artist Name | Album Title | Track
Count"
Call Form_Resize
' if the key pressed was a)not a number and b) not the backspace
key,
' just erase the keystroke (it won't get processed or sent)
If (Not IsNumeric(TrackKey) And Not (KeyAscii = vbKeyBack)) Then
KeyAscii = 0
End If
End Sub