+ All Categories
Home > Documents > Follow the Steps Below to Set Up an ODBC Data Source

Follow the Steps Below to Set Up an ODBC Data Source

Date post: 07-Apr-2018
Category:
Upload: ritesh-kumar
View: 219 times
Download: 0 times
Share this document with a friend

of 53

Transcript
  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    1/53

    Follow the steps below to set up an ODBC Data Source (this process is also called "setting up a

    DSN", where "DSN" stands for "Data Source Name"). These steps assume Windows 2000 for the

    operating system. On other versions of Windows, some steps may vary slightly.y Via Windows Control Panel, double-click on Administrative Tools, then Data Sources (ODBC).

    The ODBC Data Source Administratorscreen is displayed, as shown below. Click on the System

    DSN tab.

    y Click the Add button. The Create New Data Source dialog box will appear. Select Microsoft AccessDriver (*.mdb) from the list and click the Finish button.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    2/53

    y The ODBC Microsoft Access Setup dialog box will appear. ForData Source Name, type Biblio. If

    desired, you can type an entry forDescription, but this is not required.

    y Click the Select button. The Select Database dialog box appears. On a default installation ofVB6 orVisual Studio 6, the BIBLIO.MDBsample database should reside in the folderC:\Program

    Files\Microsoft Visual Studio\VB98. Navigate to that folder, select BIBLIO.MDB from the file list, and

    click OK.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    3/53

    Note: IfVB was installed in a different location on your system, navigate to the appropriate folder. If you do

    not have the BIBLIO.MDB sample database file on your system at all, you can download it here. In

    that case, copy the file to the folder of your choice, and navigate to that folder to select the

    database for this step.y When you are returned to the ODBC Microsoft Access Setup screen, the database you selected

    should be reflected as shown below. Click OK to dismiss this screen.

    y When you are returned to the ODBC Data Source Administrator screen, the new DSN should appearas shown below. Click OK to dismiss this screen.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    4/53

    At this point, the Biblio database is ready to be used with RDO in the sample application.

    Sample Application 1: Using the ADO Data Control (ADODC)To build the first sample application, follow the steps below.y Start a new VB project, and from the Components dialog box (invoked from the Project ->

    Components menu), select Microsoft ADO Data Control 6.0 (SPx) as shown below and click OK.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    5/53

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    6/53

    y Put an ADO Data Control on your form, and set the properties as follows:

    Property ValueName adoBiblioDataSourceName BiblioSQL select * from authors

    y Now put three text boxes on the form, and set their Name, DataSource, and DataField properties asfollows:

    Name DataSource DataFitxtAuthor adoBiblio AuthortxtAuID adoBiblio Au_IDtxtYearBorn adoBiblio Year B

    ySave and run the program. Notice how it works just like the other data control.

    y Now change the SQL property of the data control to select * from authors order by authorand run

    the program again. Notice the difference.y Change the SQL property back to what it was and add three command buttons to the form, and set

    their Name and Caption properties as follows:

    Name CaptioncmdNameOrder Order by NamecmdYearOrder Order by YearcmdIDOrder Order by ID

    y Put the following code in the cmdNameOrder_Click event:adoBiblio.SQL = "select * from authors order by author"

    adoBiblio.Refresh y Put the following code in the cmdYearOrder_Click event:

    adoBiblio.SQL = "select * from authors order by [year born]" adoBiblio.Refresh

    y Put the following code in the cmdIDOrder_Click event:

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    7/53

    adoBiblio.SQL = "select * from authors order by au_id" adoBiblio.Refresh

    y Save and run the program and see what happens when you click the buttons.A screen-shot of the sample app at run-time is shown below:

    Download the project files for this sample application here.

    Sample Applications 2 and 3: Using ADO CodeNote: If you have previously downloaded and set up a DSN for the Property database as described in

    the previous topic on RDO, you can skip the set up steps below and resume here.Sample applications 2 and 3 use a database called PROPERTY.MDB and can be downloaded here.The Property database contains just one table called "Property". The columns of this table are defined

    as follows:

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    8/53

    Column Name Data Type NoPROPNO Number (Long Integer) A number that uniquely identifies the

    treated as the Primary Key (althoughsample database).

    EMPNO Number (Long Integer) A number that identifies the real estareal system, this would be the foreignEmployee table (such a table is not p

    ADDRESS Text (20) The street address of the property.CITY Text (15) The city where the property is locatedSTATE Text (2) The state where the property is locat

    abbreviation).ZIP Text (5) The zip code where the property is loNEIGHBORHOOD Text (15) The descriptive name of the neighbo

    located.HOME_AGE Number (Long Integer) Age in years of the home. (A better ta

    this field be the date in which the proapplication compute the age based o

    BEDS Number (Long Integer) Number of bedrooms in the property.BATHS Number (Single) Number of bathrooms in the property

    2.5, indicating 2 bathrooms i.e. 2room").

    FOOTAGE Number (Long Integer) The footage of the property.ASKING Number (Long Integer) Asking price of the property in whole BID Number (Long Integer) Bid amount of the potential buyer in wSALEPRICE Number (Long Integer) Sale price (amount the property actuBefore coding or running sample application 2 or 3, you must set up an ODBC data source as was

    done for the previous sample application.After downloading the file, move it to the folder of your choice. Then follow the exact same steps as

    before to set up the DSN, with these two exceptions:(1) On the ODBC Microsoft Access Setup dialog box, type PropDB for the Data Source Name.(2) In the Select Database dialog box, navigate to the location where you have placed

    the PROPERTY.MDB file.Sample Application 2To build Sample Application 2, start a new VB project and perform the following steps.

    y From the Project -> References menu, check Microsoft ActiveX Data Objects 2.x (where x is thehighest version that you have on your system) and click OK.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    9/53

    y This project uses the StatusBar control, so include the Microsoft Windows Common Controls

    6.0(SP6) from the Components dialog box, accessed from the Project -> Components menu.

    y Create the form shown below. The names of the text boxes in the top frame are shown in the form.Set the Enabled property of the frame to False, which will automatically disable all of the textboxes

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    10/53

    within it, which is desired because this application does not allow updating of the data. The settings forthe other controls are given below.

    The navigation buttons have the following properties:

    Name CaptioncmdMoveFirst

    The text box in the middle of the form has the following properties:Name txtCurrentQueryMultiLine TrueLocked True

    The command buttons have the following properties:

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    11/53

    Name Caption EnabcmdAllData Reload All Records TruecmdGetData Run Query Now False

    In the "Select Criteria" frame:The check boxes are an array:

    Name CaptionchkCriteria(0) EmpNochkCriteria(1) CitychkCriteria(2) State

    The labels are also an array:Name Caption EnalblCriteria(0) = FalslblCriteria(1) Like FalslblCriteria(2) Like Fals

    The textboxes are also an array:Name Caption EnatxtCriteria(0) EmpNo FalstxtCriteria(1) City FalstxtCriteria(2) State Fals

    Place the StatusBar on the form and set its Style property to 1 sbrSimple.2. Code the General Declarations section as shown below. Here,

    two ADO objects, ADODB.Connection and ADODB.Recordset, are defined at the form level.The ADODB.Connection object represents an open connection to a data source and a specific database

    on that data source, or an allocated but as yet unconnected object, which can be used to

    subsequently establish a connection.The ADODB.Recordset object represents the rows that result from running a query,

    Option Explicit Dim mobjADOConn As ADODB.Connection

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    12/53

    Dim mobjADORst As ADODB.Recordset Dim mstrSQL As String

    3. Code the Form_Load event. Here, the connection object variable mobjADOConn is made available for

    use by setting it to a new instance of ADODB.Connection. Then, the ConnectionString property

    and the Open method of the ADODB.Connection object are used.The ConnectionString property takes a string with various arguments delimited by semicolons. When

    using a DSN as we are in this sample application, you typically need just the DSN name, the user

    id, and the password. The Open method then opens the connection to the database.'--------------------------------------------------------------------------

    ---Private Sub Form_Load() '--------------------------------------------------------------------------

    ---'set up the form and connect to the data source On Error GoTo LocalError 'center the form: Me.Top = (Screen.Height - Me.Height) / 2 Me.Left = (Screen.Width - Me.Width) / 2 'Connect to the Property database: Set mobjADOConn = New ADODB.Connection mobjADOConn.ConnectionString = "DSN=PropDB;Uid=admin;Pwd=;" mobjADOConn.Open Call cmdAllData_Click Exit Sub

    LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

    4. Code the cmdAllData_Click event, which sets or resets the ADODB.Recordset object with a query to

    display all the rows in the table. The opening of the recordset takes place in the

    OpenNewRecordset subprocedure, called from this event procedure.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    13/53

    '--------------------------------------------------------------------------

    ---Private Sub cmdAllData_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError Dim lngX As Long 'select or reload the data to be displayed: mstrSQL = "select * from property" Call OpenNewRecordset 'load data into the text boxes Call DataLoad ' reset the state of the search criteria controls For lngX = 0 To 2 chkCriteria(lngX).Value = vbUnchecked NextExit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

    5. Create the user-defined subprocedure OpenNewRecordset.Here, the recordset object mobjADORst is made available for use by setting (or resetting) it to a new

    instance of ADODB.Recordset.The CursorLocation property is then set to the built-in constant adUseClient. The term "cursor" refers to

    the temporary rows of a recordset. The cursor location determines whether the cursor is stored on

    the client or the server, specified by the values adUseClient and adUseServer, respectively.

    Server-side cursor (adUseServer) is the default. There are tradeoffs using both types of cursors.

    Client-side cursors can take a long time to build because the data must be pulled over to the

    client, but once built, traversing the cursor is usually very fast. Client-side cursors often support

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    14/53

    more features than server-side cursors (the reason this sample application is using a client-side

    cursor is because we want to use AbsolutePosition property later, which only works with a client-

    side cursor). On the other hand, server-side cursors usually build faster but often support fewer

    features that client-side cursors.The Open method of the recordset is then executed. The Open method has the following syntax:RecordsetObject.Open Source, ActiveConnection, CursorType, LockType, OptionsThe Source argument is an optional variant that evaluates to a valid Command object, SQL statement,

    table name, stored procedure call, or filename of a persisted recordset.TheActiveConnection argument is an optional variant that evaluates to a valid Connection object variable

    name or a string containing connection string parameters.The CursorType argument is an optional value that determines the type of cursor that the provider should

    use when opening the recordset. The possible values and their descriptions are given below:

    Value DescriptionadOpenForwardOnly (default) Used to open a forward-only cursor. Forward-only cursors create s

    a forward-only cursor is not directly updateable and can only be scrolled froonly "Move" method that can be used with this type of cursor). Forward-onlexchange for feature limitations. Forward-only cursors are sometimes refer

    adOpenStatic Used to open a static cursor. A static cursor is a static copy of the data in thmade by other users propagate to the recordset; the recordset never changused in this sample application) use only adOpenStaticfor CursorTypes re

    adOpenDynamic Used to open a dynamic cursor. A dynamic cursor is a "live" recordset, meadeletions by other users affect the recordset. Dynamic-cursor recordsets subookmarks (if bookmarks are supported by the provider). Dynamic cursorsat the expense of increased overhead.

    adOpenKeyset Used to open a keyset cursor. Keyset cursors are like dynamic cursors, excvisible in the recordset. The recordset is affected by changes and deletions

    The LockType argument is an optional value that determines the type of locking that the provider should

    use when opening the recordset. The possible values and their descriptions are given below:

    Value DescriptionadLockReadOnly (default) Specifies read-only locking. Records can be read, but data cann

    locking method used with static cursors and forward-only cursors.adLockPessimistic Specifies pessimistic locking. The provider does what is necessary to ens

    locking records at the data source immediately upon editing.adLockOptimistic Specifies optimistic locking. The provider locks records only when you cal

    editing.adLockBatchOptimistic Specifies optimistic batch locking. Records are locked in batch update mo

    This option is required for client-side cursors.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    15/53

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    16/53

    mobjADORst!propno '--------------------------------------------------------------------------

    ---Private Sub DataLoad() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError 'copy the data from the recordset to the text boxes: txtPropNo.Text = mobjADORst.Fields("propno") txtEmpNo.Text = mobjADORst.Fields("empno") txtAddress.Text = mobjADORst.Fields("address") txtCity.Text = mobjADORst.Fields("city") txtState.Text = mobjADORst.Fields("state") txtZip.Text = mobjADORst.Fields("zip") Call SetRecNum Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

    7. Create the user-defined subprocedure SetRecNum. This sub displays the number of the current record

    at the bottom of the screen. TheAbsolutePosition and RecordCount properties of the Recordset

    are used here.The AbsolutePosition property specifies the current row in a recordset. Note: For AbsolutePosition to

    return a valid value with Access (Jet) databases (like the one used in the sample application), the

    CursorLocation must be set to adUseClient. An invalid value (-1) will be returned if adUseClient is

    specified.The RecordCount property the total number of rows in the recordset. Note: RecordCount will not return a

    valid value with all cursor types (for example, RecordCount will return -1 with a forward-only

    cursor.) To ensure a valid RecordCount value, use either adOpenKeyset or adOpenStatic as the

    CursorType for server side cursors or use a client side cursor.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    17/53

    '--------------------------------------------------------------------------

    ---Private Sub SetRecNum() '--------------------------------------------------------------------------

    ---StatusBar1.SimpleText = "row " & mobjADORst.AbsolutePosition _ & " of " & mobjADORst.RecordCount End Sub

    8. Code the events for the navigation buttons as shown below, using the recordset "Move" methods tomove to the first, last, next, or previous record, respectively.

    '--------------------------------------------------------------------------

    ---Private Sub cmdMoveFirst_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MoveFirst Call DataLoad Exit SubLocalError: MsgBox Err.Number & " - " & Err.Description End Sub '--------------------------------------------------------------------------

    ---Private Sub cmdMoveLast_Click() '------------------------------------------------------------------------ --

    ---On Error GoTo LocalError

    mobjADORst.MoveLast Call DataLoad Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    18/53

    End Sub '--------------------------------------------------------------------------

    ---Private Sub cmdMoveNext_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MoveNext If mobjADORst.EOF Then BeepmobjADORst.MoveLast End IfCall DataLoad Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub '--------------------------------------------------------------------------

    ---Private Sub cmdMovePrevious_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MovePrevious If mobjADORst.BOF Then BeepmobjADORst.MoveFirst End IfCall DataLoad Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    19/53

    9. When one of the check boxes is clicked, the label and text box next to it should be enabled (or disabled,

    if clicking the check box unchecks it). Note also that the cmdGetData button (the one with the

    "Run Query Now" caption) should only be enabled if one of the checkboxes is checked.'----------------------------------------------------------- ---------------

    ---Private Sub chkCriteria_Click(Index As Integer) '--------------------------------------------------------------------------

    ---' disable the 'Run Query Now' button cmdGetData.Enabled = False 'when the user clicks on a check box, enab le the label and text 'box that go with it. If chkCriteria(Index).Value = vbChecked Then txtCriteria(Index).Enabled = True lblCriteria(Index).Enabled = True txtCriteria(Index).SetFocus txtCriteria(Index).SelStart = 0 txtCriteria(Index).SelLength = Len(txtCriteria(Index).Text) ' enable the 'Run Query Now' button only if a box is checked. cmdGetData.Enabled = True ElsetxtCriteria(Index).Enabled = False lblCriteria(Index).Enabled = False End IfEnd Sub

    10. After the user has selected which fields to use and entered values in the text boxes, they click the

    cmdGetData button to create a new recordset with new data. Note that if the user selects (checks)

    a field, but does not enter search criteria in the corresponding textbox, an error message is

    generated and the query is not run.'--------------------------------------------------------------------------

    ---

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    20/53

    Private Sub cmdGetData_Click() '--------------------------------------------------------------------------

    ---

    'run the query that the user has createdOn Error GoTo LocalError Dim blnFirstOne As Boolean blnFirstOne = True mstrSQL = "select * from property where " If chkCriteria(0).Value = vbChecked Then If (txtCriteria(0).Text = "") Or (Not IsNumeric(txtCriteria(0).Text)) Then MsgBox "Employee number is missing or non -numeric. Query not run.", _ vbExclamation, _ "ADO Example"Exit Sub End IfblnFirstOne = False mstrSQL = mstrSQL & "empno = " & txtCriteria(0).Text End IfIf chkCriteria(1).Value = vbChecked Then If txtCriteria(1).Text = "" Then MsgBox "City criteria is missing. Query not run.", _ vbExclamation, _ "ADO Example"Exit Sub End IfIf blnFirstOne = False Then mstrSQL = mstrSQL & " and" End IfblnFirstOne = False mstrSQL = mstrSQL & " city like '" & txtCriteria(1).Text & "'" End IfIf chkCriteria(2).Value = vbChecked Then If txtCriteria(2).Text = "" Then MsgBox "State criteria is missing. Query not run.", _ vbExclamation, _

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    21/53

    "ADO Example"Exit Sub End IfIf blnFirstOne = False Then mstrSQL = mstrSQL & " and" End IfblnFirstOne = False mstrSQL = mstrSQL & " state like '" & txtCriteria(2).Text & "'" End IfOpenNewRecordset 'make sure that the query did not return 0 rows: If mobjADORst.EOF Then MsgBox "Your query (" & mstrSQL & ") returned no records! " _ & "The default query to return all records will now be rerun.", _ vbExclamation, _ "ADO Example"'reload the form with all the records cmdAllData_Click ElseMsgBox "Your query returned " & mobjADORst.RecordCount & " records.", _ vbInformation, _ "ADO Example"'load data into the text boxes Call DataLoad End IfExit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

    11. Save and run. Note: When entering the "Like" criteria for City and/or State, you can use the wildcard

    character % to represent any number of characters and the wildcard character _ (underscore) the

    represent a single character. For example, entering "M%" for the City criteria would return all rows

    where the city field begins with the letter "M".Download the project files for this sample application here.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    22/53

    Sample Application 3Sample Application 3 demonstrates how to add, update, and delete records with ADO.When the application is first run, the user is prompted to enter a minimum asking price to possibly limit

    the number of records they want to work with (i.e., "I only want to work with properties that are selling

    for $200,000 or more). If the user wants to work with all properties, they would simply accept the

    default of 0 from the prompt. If the user clicks the Cancel button, the application will end.

    Once the user has entered the minimum asking price, the main screen of the application is displayed.

    Initially, the screen is in "browse" mode, where the user can use the navigation buttons to move to the

    first, previous, next or last record. The data cannot be edited in this mode. If they want to initiate an

    add or an update, delete a record, or exit the application, they may do so via the appropriate button.

    Saving or cancelling is not applicable in this mode, so those buttons are disabled.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    23/53

    If the user clicks the Add button, the fields on the screen are enabled and cleared, and the user can

    enter the information for the new property. All buttons except Save and Cancel are now disabled.

    After the user has made entries in the fields, he or she would click Save to add the new record to the

    database table, or, if they changed their mind, would click Cancel to discard the new record. In either

    case (clicking Save or Cancel) the user is returned to browse mode. When Save is clicked, the

    application validates the entries and will only save the record if all fields pass edit (otherwise, a

    message will appear indicating the problem entry and focus will be set to the problem field).

    If the user clicks the Update button, the fields on the screen are enabled and the user can modify any

    or all of the fields (except for the Property Number, which is the primary key of the table). All buttons

    except Save and Cancel are now disabled. After the user has made modifications in the desired

    fields, he or she would click Save to update the record to the database table, or, if they changed their

    mind, would click Cancel to discard the changes. In either case (clicking Save or Cancel) the user is

    returned to browse mode. When Save is clicked, the application validates the entries and will only

    save the record if all fields pass edit (otherwise, a message will appear indicating the problem entry

    and focus will be set to the problem field).

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    24/53

    If the user clicks the Delete button, the user is asked to confirm that they want to delete the current

    record. If they respond Yes, the record is deleted from the database table, and the main screen

    shows the next record in the table.

    To build Sample Application 3, start a new VB project and perform the following steps.y From the Project -> References menu, check Microsoft ActiveX Data Objects 2.xLibrary and

    click OK.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    25/53

    y This project uses the StatusBar control, so include the Microsoft Windows Common Controls

    6.0(SP6) from the Components dialog box, accessed from the Project -> Components menu.

    Check this item and click OK.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    26/53

    y Create the form shown below. The settings for the various controls are given below.

    y There are nine textboxes in the main frame of the form. The names and MaxLength settings for theseare given below:

    Name PropertiestxtPropNo MaxLength: 5txtEmpNo MaxLength: 4txtAddress MaxLength: 20txtCity MaxLength: 15txtState MaxLength: 2txtZip MaxLength: 5txtBeds MaxLength: 1txtBaths MaxLength: 3 (allows fractional amount, like 1.5)txtAsking MaxLength: 0 (not specified)

    y Set up the Command Buttons as follows:

    Name CaptioncmdMoveFirst cmdAdd AddcmdUpdate UpdatecmdDelete Delete

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    27/53

    cmdSave SavecmdCancel CancelcmdExit Exit

    y All controls on your form should have theirTabIndex property set such that the tabbing order is

    correct.y Add a Module to the project, name it modCommon, and enter the code shown below. The code

    contains procedures described as follows:

    CenterForm Sub to center a form on the screenValidKey Function to validate a keystroke for use in the KeyPress event of a textboConvertUpper Function to convert an alphabetic character entered in a textbox to upper

    textboxSelectTextBoxText Sub to highlight the text of a textbox when it receives focus. Used in the GTabToNextTextBox

    Sub to "autotab" from one textbox to another when maximum number of cfirst textbox has been reached.

    UnFormatNumber Function to strip out non-numeric characters (dollar signs, commas, etc.) Option Explicit Public Const gstrNUMERIC_DIGITS As String = "0123456789" Public Const gstrUPPER_ALPHA_PLUS As String =

    "ABCDEFGHIJKLMNOPQRSTUVWXYZ,' -"Public gblnPopulating As Boolean '------------------------------------------------------------------------ Public Sub CenterForm(pobjForm As Form) '------------------------------------------------------------------------ With pobjForm .Top = (Screen.Height - .Height) / 2 .Left = (Screen.Width

    -

    .Width) / 2

    End With End Sub '----------------------------------------------------------------------- -Public Function ValidKey(pintKeyValue As Integer, _

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    28/53

    pstrSearchString As String) As Integer '------------------------------------------------------------------------ 'Common function to filter out keyboard characters passed to this ' function from KeyP ress events. '' Typical call: ' KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS) 'If pintKeyValue < 32 _ Or InStr(pstrSearchString, Chr$(pintKeyValue)) > 0 Then 'Do nothing - i.e., accept the control character or any key ' in the search string passed to this function ... Else'cancel (do not accept) any other key ... pintKeyValue = 0 End IfValidKey = pintKeyValue End Function '------------------------------------------------------------------------ Public Function Conve rtUpper(pintKeyValue As Integer) As Integer '------------------------------------------------------------------------ 'Common function to force alphabetic keyboard characters to uppercase ' when called from the KeyPress event.

    ' Typical call: ' KeyAscii = ConvertUpper(KeyAscii) 'If Chr$(pintKeyValue) >= "a" And Chr$(pintKeyValue)

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    29/53

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    30/53

    '--------------------------------------------------------------------------

    ---Dim lngX As Long Dim strCurrChar As String Dim strNumberOut As String strNumberOut = "" For lngX = 1 To Len(pstrNumberIn) strCurrChar = Mid$(pstrNumberIn, lngX, 1) If InStr("0123456789.", strCurrChar) > 0 Then strNumberOut = strNumberOut & strCurrChar End IfNextUnFormatNumber = strNumberOut End Function

    y Code the General Declarations section as shown below. Here, as in the previous sample application,two ADO object variables,mobjADOConn and mobjADORst , are defined at the form level, as are

    some other form-level variables that will be needed.Option Explicit Dim mobjADOConn As ADODB.Connection Dim mobjADORst As ADODB.Recordset Private mstrSQL As String Private mdblMinAsking As Double Private mblnUpdatePending As Boolean Private mstrUpdateType As String

    Private mavntUSStates As Variant y Code the Form_Load event as shown below. In it, a programmer-defined Sub

    named GetMinimumAsking is called (that routine is the one that displays the initial prompt to the

    user to enter the minimum asking price of the properties they want to work with). Then, the variant

    arraymavntUSStates is loaded with the 50 US state abbreviations, needed for validating the state

    input by the user. This is followed by a call to the CenterForm sub. Then, the ADO connection object

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    31/53

    (mobjADOConn) is instantiated, its ConnectionString property is set, and the Open methodis invoked

    so that we can use the Property database in the application. This is followed by a call to the

    programmer-defined Sub GetPropertyData(which runs the query to create the recordset that will be

    used to browse the Property table records), followed by a call to the programmer-defined

    Sub SetFormState (which enables and disables controls at the appropriate time).'--------------------------------------------- -----------------------------

    ---Private Sub Form_Load() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError ' obtain the minimum asking price for the properties to be worked with GetMinimumAsking ' load the array of states to be used for validation mavntUSStates = Array("AK", "AL", "AR", "AZ", "CA", "CO", "CT", "DC", _ "DE", "FL", "GA", "HI", "IA", "ID", "IL", "IN", _ "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", _ "MO", "MS", "MT", "NC", "ND", "NE", "NH", "NJ", _ "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", _ "SC", "SD", "TN", "TX", "UT", "VA", "VT", "WA", _ "WI", "WV", "WY") 'center the form: CenterForm Me 'Connect to the Property database: Set mobjADOConn = New ADODB.Connection mobjADOConn.Conne ctionString = "DSN=PropDB;Uid=admin;Pwd=;" mobjADOConn.Open Call GetPropertyData SetFormState False Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    32/53

    End Sub Code the GetMinimumAsking Sub, which uses the InputBox function to prompt to the user to enter

    the minimum asking price of the properties they want to work with. The resulting value is then stored

    in the form-level variable mdblMinAsking.'--------------------------------------------------------------------------

    ---Private Sub GetMinimumAsking() '--------------------------------------------------------------------------

    ---Dim strInputBoxPrompt As String Dim strAsking As String strInputBoxPrompt = "Enter the minimum asking price (for example, 200000) "

    _& "for the properties that you want to work with this session." _ & vbNewLine _ & "To work with ALL properties, leave the default of zero." strAsking = InputBox(strInputBoxPrompt, "Minimum Asking Price", "0") If strAsking = "" Then ' user clicked Cancel button on th e input box, so end the app EndEnd IfmdblMinAsking = Val(strAsking) End Sub Code the GetPropertyData Sub, which builds the SQL to get the property records meeting the

    minimum asking price condition. The Recordset object is then instantiated, its CursorLocation

    property is set, and its Open method is invoked to execute the SQL and return the resultset. This is

    done in a loop in case the resultset does not return any records due to the fact no records in the table

    met the asking price condition. In that situation, the user is given the opportunity to specify a different

    asking price value. Following this, the programmer-defined Sub PopulateFormFields is called (which

    displays the fields from the current record in their corresponding textboxes on the form).

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    33/53

    '--------------------------------------------------------------------------

    ---Private Sub GetPropertyData() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError Dim blnGotData As Boolean blnGotData = False Do'select or reload the data to be displayed: mstrSQL = "select propno" _ & " , empno" _ & " , address" _ & " , city" _ & " , state" _ & " , zip" _ & " , beds" _ & " , baths" _ & " , asking" _ & " from property" _ & " where asking >= " & mdblMinAsking _ & " order by propno" Set mobjADORst = New ADODB.Recordset mobjADORst.CursorLocation = adUseClient mobjADORst.Open mstrSQL, mobjADOConn, adOpenDynamic, adLockOptimistic,

    adCmdText If mobjADORst.EOF Then If MsgBox("There are no properties with an asking price >= " _ & Format$(mdblMinAsking, "Currency") _ & ". Do you want to try again with a different value?", _ vbYesNo + vbQuestion, _ "Asking Price") _ = vbYes Then GetMinimumAsking ElseEnd

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    34/53

    End IfElseblnGotData = True End IfLoop Until blnGotData'load data into the text boxes Call PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub Code the PopulateFormFields Sub, which assigns the fields from the current record to their

    corresponding textboxes on the form. Note that the gblnPopulating Boolean variable is set to True

    prior to the assignments and set to False after the assignments. This value is used to control whether

    or not certain code executes in the event procedures for some of these textboxes. The

    Sub SetRecNum is then called.'--------------------------------------------------------------------------

    ---Private Sub PopulateFormFields() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError gblnPopulating = True 'copy the data from the resultset to the text boxes: txtPropNo.Text = mobjADORst.Fields("propno") txtEmpNo.Text = mobjADORst.Fields("empno") txtAddress.Text = mobjADORst.Fields("address") txtCity.Text = mobjADORst.Fields("city") txtState.Text = mobjADORst.Fields("state") txtZip.Text = mobjADORst.Fields("zip") txtBeds.Text = mobjADORst.Fields("beds") txtBaths.Text = mobjADORst.Fields("baths")

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    35/53

    txtAsking.Text = Format$(mobjADORst.Fields("asking"), "Currency") gblnPopulating = False Call SetRecNum Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub Code the SetRecNum Sub. This sub is identical to the one used in Sample Application 2. It displays

    the number of the current record at the bottom of the screen using

    the AbsolutePosition and RowCount properties of the Recordset object.'--------------------------------------------------------------------------

    ---Private Sub SetRecNum() '--------------------------------------------------------------------------

    ---StatusBar1.SimpleText = "row " & mobjADORst.AbsolutePosition _ & " of " & mobjADORst.RecordCount End Sub Code the SetFormState Sub, which takes in a Boolean argument used to set the Enabled property of

    the controls on the form. Based on whether the value True or False is passed to this sub, this sub

    ensures that the textboxes are enabled for adds and updates and disabled for browsing; it also

    ensures that the various command buttons are enabled or disabled at the appropriate time. This Sub

    also sets the form-level Boolean variablemblnUpdatePending.'--------------------------------------------------------------------------

    ---Private Sub SetFormState(pblnEnabled As Boolean) '--------------------------------------------------------------------------

    ---txtPropNo.Enabled = pblnEnabled txtEmpNo.Enabled = pblnEnabled

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    36/53

    txtAddress.Enabled = pblnEnabled txtCity.Enabled = pblnEnabled txtState.Enabled = pblnEnabled txtZip.Enabled = pblnEnabled txtBeds.Enabled = pblnEnabled txtBaths.Enabled = pblnEnabled txtAsking.Enabled = pblnEnabled cmdSave.Enabled = pblnEnabled cmdCancel.Enabled = pblnEnabled cmdAdd.Enabled = Not pblnEnabled cmdUpdate.Enabled = Not pblnEnabled cmdDelete.Enabled = Not pblnEnabled cmdExit.Enabled = Not pblnEnabled cmdMoveFirst.Enabled = Not pblnEnabledcmdMoveNext.Enabled = Not pblnEnabled cmdMovePrevious.Enabled = Not pblnEnabled cmdMoveLast.Enabled = Not pblnEnabled mblnUpdatePending = pblnEnabled End Sub Code the Form_Unload event. In it, the form-level Boolean variable mblnUpdatePending is tested to

    see if (well, an update is pending i.e., whether an add or update is in progress). If the user is in the

    middle of an add or update and then clicks the "X" button on the upper-right corner of the form, they

    will receive the message that they must save or cancel prior to exiting the application, and the form

    will NOT be unloaded (because we are assigning a non-zero value to the Cancel argument in that

    situation). Provided that an add or update is not in progress, we set the database objects to Nothing

    and the Unload will complete.

    '--------------------------------------------------------------------------

    ---Private Sub Form_Unload(Cancel As Integer) '--------------------------------------------------------------------------

    ---If mblnUpdatePending Then

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    37/53

    MsgBox "You must save or cancel the current operation prior to exiting.", _ vbExclamation, _ "Exit"Cancel = 1 ElseSet mobjADORst = Nothing Set mobjADOConn = Nothing End IfEnd Sub Code the events for the various Textboxes as shown below. The code in these events ensure the

    following:y For all, highlight the text in the textbox when it receives focus.y For all but the last textbox, if the maximum number of characters typed into the textbox is reached,

    auto-tab to the next textbox.y Only numeric digits should be entered into the property number, employee number, zip codes, and

    beds textboxes.y Only numeric digits and optionally one decimal point should be entered into the baths and asking

    textboxes.y Force uppercase on the state textbox.y When the asking textbox receives focus, the value in there should be unformatted. Whenthe asking

    textbox loses focus, its value should be formatted as currency.'--------------------------------------------------------------------------

    ---' Textbox events '--------------------------------------------------------------------------

    ---'property # Private Sub txtPropNo_GotFocus() SelectTextBoxText txtPropNo End Sub Private Sub txtPropNo_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS) End Sub Private Sub txtPropNo_Change()

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    38/53

    TabToNextTextBox txtPropNo, txtEmpNoEnd Sub ' emp # Private Sub txtEmpNo_GotFocus() SelectTextBoxText txtEmpNo End Sub Private Sub txtEmpNo_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS) End Sub Private Sub txtEmpNo_Change() TabToNextTextBox txtEmpNo, txtAddress End Sub ' addressPrivate Sub txtAddress_GotFocus() SelectTextBoxText txtAddress End Sub Private Sub txtAddress_Change() TabToNextTextBox txtAddress, txtCity End Sub ' cityPrivate Sub txtCity_GotFocus() SelectTextBoxText txtCity End SubPrivate Sub txtCity_Change() TabToNextTextBox txtCity, txtState End Sub

    ' statePrivate Sub txtState_GotFocus() SelectTextBoxText txtState End Sub Private Sub txtState_KeyPress(KeyAscii As Integer) KeyAscii = ConvertUpper(KeyAscii) End Sub

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    39/53

    Private Sub txtState_Change() TabToNextTextBox txtState, txtZip End Sub

    ' zipPrivate Sub txtZip_GotFocus() SelectTextBoxText txtZip End Sub Private Sub txtZip_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS) End Sub Private Sub txtZip_Change() TabToNextTextBox txtZip, txtBeds End Sub ' bedsPrivate Sub txtBeds_GotFocus() SelectTextBoxText txtBeds End Sub Private Sub txtBeds_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS) End Sub Private Sub txtBed s_Change() TabToNextTextBox txtBeds, txtBaths End Sub ' bathsPrivate Sub txtBaths_GotFocus() SelectTextBoxText txtBaths End Sub Private Sub txtBaths_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS & ".") ' if text already has a decimal point, do not allow another ... If Chr$(KeyAscii) = "." And InStr(txtBaths.Text, ".") > 0 Then KeyAscii = 0 End IfEnd Sub

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    40/53

    Private Sub txtBaths_Change() TabToNextTextBox txtBaths, txtAsking End Sub

    ' asking price Private Sub txtAsking_GotFocus() txtAsking.Text = UnFormatNumber(txtAsking.Text) SelectTextBoxText txtAsking End Sub Private Sub txtAsking_KeyPress(KeyAscii As Integer) KeyAscii = ValidKey(KeyAscii, gstrNUMERIC_DIGITS & ".") ' if text already has a decimal point, do n ot allow another ... If Chr$(KeyAscii) = "." And InStr(txtAsking.Text, ".") > 0 Then KeyAscii = 0 End IfEnd Sub Private Sub txtAsking_LostFocus() txtAsking.Text = Format$(txtAsking.Text, "Currency") End Sub Code the events for the navigation buttons as shown below, using the resultset "Move" methods to

    move to the first, last, next, or previous record, respectively.'--------------------------------------------------------------------------

    ---Private Sub cmdMoveFirst_Click() '--------------------------- -----------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MoveFirst Call PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    41/53

    '--------------------------------------------------------- -----------------

    ---Private Sub cmdMoveLast_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MoveLast Call PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub '--------------------------------------------------------------------------

    ---Private Sub cmdMoveNext_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError mobjADORst.MoveNext If mobjADORst.EOF Then BeepmobjADORst.MoveLast End IfCall PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub '--------------------------------------------------------------------------

    ---Private Sub cmdMovePrevious_Click() '--------------------------------------------------------------------------

    ---

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    42/53

    On Error GoTo LocalError mobjADORst.MovePrevious If mobjADORst.BOF Then BeepmobjADORst.MoveFirst End IfCall PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub Code the Click event for the cmdAdd button. In it, the textboxes are cleared, the SetFormState sub

    is called (passing it a parameter of True, which will enable the textboxes and the Save and Cancel

    buttons and disable all the other buttons), set the form-level variable mstrUpdateType to "A"

    (indicating that an add is pending) and sets focus to the Property Number field.'------------------------------------------------------------------------ --

    ---Private Sub cmdAdd_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError 'clear all the text boxes: txtPropNo.Text = "" txtEmpNo.Text = "" txtAddress.Text = "" txtCity.Text = "" txtState.Text = ""txtZip.Text = "" txtBeds.Text = "" txtBaths.Text = "" txtAsking.Text = "" SetFormState True mstrUpdateType = "A"

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    43/53

    txtPropNo.SetFocus Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub Code the Click event for the cmdUpdate button. In it, the SetFormState sub is called (passing it a

    parameter of True, which will enable the textboxes and the Save and Cancel buttons and disable all

    the other buttons), set the form-level variable mstrUpdateType to "U" (indicating that an update is

    pending), disables the Property Number field (because it is the primary key and should not be

    changed) and sets focus to the Employee Number field.'--------------------------------------------------------------------------

    ---Private Sub cmdUpdate_Cl ick()'--------------------------------------------------------------------------

    ---On Error GoTo LocalError SetFormState True mstrUpdateType = "U" ' being that propno is the primary key, it should not be updatable txtPropNo.Enabled = False txtEmpNo.SetFocusExit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

    Code the Click event for the cmdSave button. The user would click this button after they have

    completed entries for an add or update. This sub first invokes the ValidateAllFields function, which

    returns a Boolean indicating whether or not all entries passed their edit checks. If not, we exit the sub

    and the record is not saved; the user remains in "update pending" mode and has the opportunity to

    correct the entries. Provided that validation is successful, the sub proceeds.

    The mstrUpdateType variable is checked to see whether we are dealing with an add or an update.

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    44/53

    If we are dealing with an add, we invoke the AddNew method of the Recordset object.

    The AddNew method prepares a new row you can edit and subsequently add to the Recordset object

    using the Update method. After you modify the new row, you must use the Update method to save

    the changes and add the row to the result set. No changes are made to the database until you use

    the Update method. (The Update method is invoked after the content of the textboxes has been

    assigned to the database fields.)If we are dealing with an update, we can just start modifying the fields (provided an appropriate cursor

    type has been selected) unlike DAO and RDO, ADO does not use an Edit method. Changes made

    to the current rows columns are copied to the copy buffer. After you make the desired changes to the

    row, use the Update method to save your changes or the CancelUpdate method to discard them. (If

    you move on to another record without invoking Update, your changes will be lost.)

    The content of the textboxes is assigned to the database fields, then the Update method is invoked.

    The Update method saves the contents of the copy buffer row to a specified updatable Recordset

    object and discards the copy buffer.

    The mstrUpdateType variable is checked once again, and if we are dealing with an add, there is

    some extra work to do. Although the new record has been added, the original resultset still does not

    contain the new record. The Requery method must be invoked, which updates the data in a

    Recordset object by re-executing the query on which the object is based. The Find method is then

    used to position to the new record. The ADO Findmethod has the following syntax:RecordsetObject.Find Criteria, SkipRows, SearchDirection, StartThe Criteria argument is a String value that specifies the column name, comparison operator, and value to

    use in the search. Only a single-column name may be specified in criteria; multi-column searches

    are not supported. The comparison operator may be ">" (greater than), "=" (greater than or equal), " #7/22/97#"). These values

    can contain hours, minutes, and seconds to indicate time stamps, but should not contain

    milliseconds or errors will occur. If the comparison operator is "like", the string value may contain

    an asterisk (*) to find one or more occurrences of any character or substring. For example, "state

    like 'M*'" matches Maine and Massachusetts. You can also use leading and trailing asterisks to

    find a substring contained within the values. For example, "state like '*as*'"

    matches Alaska, Arkansas, and Massachusetts. Asterisks can be used only at the end of a criteria

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    45/53

    string, or together at both the beginning and end of a criteria string, as shown above. You cannot

    use the asterisk as a leading wildcard ('*str'), or embedded wildcard ('s*r'). This will cause an

    error.

    SkipRows is an optional Long value, whose default is zero, that specifies the row offset from the current

    row (or bookmark row specified by the Startargument, if present) to begin the search. By default,

    the search will start on the current row.

    SearchDirection is an optional value that determines in which direction the search is performed. The value

    is specified by the constantsadSearchForward (the default) oradSearchBackward, which

    equate to values of 1 or -1, respectively.

    Startis an optional Variant bookmark that functions as the starting position for the search.

    Note: Unlike DAO, ADO does not have a "NoMatch" property. If the ADO Find method is unsuccessful, the

    record pointer is positioned at the end of the Recordset.

    The SetRecNum sub is then be called to display the status bar information about the new record.

    The SetFormState sub is then called with a parameter of False, which causes the textboxes and the

    Save and Cancel buttons to be disabled and all other buttons to be enabled.

    Note that in the statement that assigns the contents of the txtAsking textbox to the asking field of the

    table, ourUnFormatNumberfunction is used to strip off the non-numeric characters. This is because

    we are using a display format that includes a dollar sign and commas on the txtAsking control, and an

    error would occur if we attempted to assign this directly to the asking field, which is defined as

    numeric.

    '--------------------------------------------------------------------------

    ---Private Sub cmdSave_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError If Not ValidateAllFields Then Exit Sub If mstrUpdateType = "A" Then

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    46/53

    mobjADORst.AddNew Else' We can just update the fields. No explicit Edit method ' is available or needed. End If'save the data to the database: mobjADORst.Fields("propno") = txtPropNo.Text mobjADORst.Fields("empno") = txtEmpNo.Text mobjADORst.Fields("address") = txtAddress.Text mobjADORst.Fields("city") = txtCity.Text mobjADORst.Fields("state") = txtState.Text mobjADORst.Fields("zip") = txtZip.Text mobjADORst.Fields("beds") = txtBeds.Text mobjADORst.Fields("baths") = txtBaths.Text mobjADORst.Fields("asking") = UnFormatNumber(txtA sking.Text) mobjADORst.Update If mstrUpdateType = "A" Then 'after the new record is added, the db must be re -queried'so that the resultset contains the new record: mobjADORst.Requery ' reposition to the record just added mobjADORst.Find "propno = " & tx tPropNo.Text 'display status info about the new record SetRecNumEnd IfReset:SetFormState False Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description Resume Reset End Sub Code the Click event for the cmdDelete button. The user is first asked to confirm that they want to

    delete the record, and if so, the Delete method of the resultset object is invoked, which deletes the

    current row in an updatable resultset object. The Requery method is then invoked so that the record

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    47/53

    is removed from the resultset that the user is working with. The Find method is then invoked to

    position the next record after the deleted one. If it was the last record that was deleted, then we

    position to the "new" last record using the MoveLast property. PopulateFormFields must then be

    called to display the contents of the new current record.'--------------------------------------------------------------------------

    ---Private Sub cmdDelete_Click() '--------------------------------------------------------------------------

    ---On Error GoTo LocalError 'when the current record is deleted, the current location in the recordset 'is invalid. use the Requery method to re -execute the query and update 'the data. If MsgBox("Are you sure you want to delete this record?", _ vbYesNo + vbQuestion, _ "Delete") = vbNo Then Exit Sub End IfmobjADORst.Delete mobjADORst.Requery ' reposition to one past the record just deleted mobjADORst.Find "propno > " & txtPropNo.Text ' If it was the last record that was deleted, the Find method will ' come back with EOF, in which case we should MoveLast to position ' us to the "new" last record ... If mobjADORst.EOF Then mobjADORst.MoveLast 'load data into the text boxes: Call PopulateFormFields Exit Sub LocalError: MsgBox Err.Number & " - " & Err.Description End Sub

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    48/53

    The ValidateAllFields function, which returns a Boolean value indicating whether or not all fields

    have passed validation checks. This function calls upon two "helper"

    functions: PropertyExists and ValidState. When the user is doing an add, the PropertyExist function

    is called to see whether or not the proposed Property Number is already being used in the Property

    table. If so, the user is informed that they can't use that number (because it is the primary key and

    must be unique) and so they must use a different number. The ValidState routine is called to ensure

    that the user has entered a valid US state. The code for all three functions is shown below.'--------------------------------------------------------------------------

    ---Private Function ValidateAllFields() As Boolean '--------------------------------------------------------------------------

    ---ValidateAllFields = False 'guilty until proven innocent If mstrUpdateType = "A" Then If txtPropNo.Text = "" Then MsgBox "Property # must not be blank.", vbExclamation, "Property #" txtPropNo.SetFocus Exit Function ElseIf PropertyExists Then MsgBox "Property # already exists. Please use a different #.", _ vbExclamation, _ "Property #" txtPropNo.SetFocus Exit Function End IfEnd IfIf txtEmpNo.Text = "" Then MsgBox "Emp # must not be blank.", vbExclamation, "Emp #" txtEmpNo.SetFocus Exit Function End IfIf txtAddress.Text = "" Then MsgBox "Address must not be blank.", vbExclamation, "Address" txtAddress.SetFocus Exit Function

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    49/53

    End IfIf txtCity.Text = "" Then MsgBox "City must not be blank.", vbExclamation, "City" txtCity.SetFocus Exit Function End IfIf Not ValidState Then MsgBox "Missing or invalid state.", vbExclamation, "State" txtState.SetFocus Exit Function End IfIf txtZip.Text = "" Or Len(txtZip.Text) = 5 Then ' it's OK ElseMsgBox "Zip code must either be blank or exactly 5 digits.", _ vbExclamation, _ "ZipCode" txtZip.SetFocus Exit Function End IfIf Val(txtBeds.Text) = 0 Then MsgBox "Beds must not be zero.", vbExclamation, "Beds" txtBeds.SetFocus Exit Function End IfIf Val(txtBaths.Text) = 0 Then MsgBox "Baths must not be zero.", vbExclamation, "Baths" txtBaths.SetFocus Exit Function End IfIf Val(UnFormatNumber(txtAsking.Text)) = 0 Then MsgBox "Asking must not be zero.", vbExclamation, "Asking" txtAsking.SetFocus Exit Function End If' if we make it here, all fields have passed edit ValidateAllFields = True

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    50/53

    End Function '--------------------------------------------------------------------------

    ------Private Function ValidState() As Boolean '--------------------------------------------------------------------------

    ------Dim lngX As Long Dim blnStateFound As Boolean blnStateFound = False For lngX = 0 To UBound(mavntUSStates) If txtState.Text = mavntUSStat es(lngX) Then blnStateFound = True Exit For End IfNextValidState = blnStateFound End Function '--------------------------------------------------------------------------

    ---Private Function PropertyExists() As Boolean '--------------------------------------------------------------------------

    ---Dim objTempRst As New ADODB.Recordset Dim strSQL As String strSQL = "select count(*) as the_count from property where propno = " &

    txtPropNo.Text objTempRst.Open strSQL, mobjADOConn, adOpenForwardOnly, , adCmdText If objTempRst("the_count") > 0 Then PropertyExists = True ElsePropertyExists = False End If

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    51/53

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    52/53

    y Oracle and Visual Basic using ADO

    y Database Access with RDO (Remote Data Objects)

    y Using Crystal Reports

    y Database Access with the Data Control

    y Using ADO and the ListView control

    y Creating PDF files in Visual Basic

    y VB6Animated Charts (With FusionCharts)

    y 416683 reads

    Sun, 06/26/2011 - 21:47 krunalmsheth

    Data not save in data base

    I have complete my all procedure to add, del., save, move but when i will

    enter data in form, & i use save command then no error found but data notsave in my backend file. i will use array for textbox & data connect through

    adodb.recordset function in module. I will give right table no in coding for the

    same form.

    reply

    Wed, 06/22/2011 - 02:49 NKaze7 (not verified)

    Thanks for the Tutorial!

    Thank you for providing this tutorial!! It helped me out in my studies.

    reply

    Fri, 06/03/2011 - 05:40 Anisul (not verified)

    Help With SQL server 2000 and Data source ODBC

    Hello Every1,

    I m a student of a private University in Bangladesh.

    I m using windows xp. i installed the SQL server 2000. But i can't get

    connected with Data source ODBC...

    Can anybody help me or refer me to know Sql Server 2000 installationprocess and how to connect Data source ODBC.

    PLease help..

    reply

    Fri, 05/20/2011 - 07:24 march11 (not verified)

  • 8/6/2019 Follow the Steps Below to Set Up an ODBC Data Source

    53/53

    Setting ADOSB character set

    I am reading a few cells from Excell into Access VBA using ADODB. One of

    the columns in the spreadsheet contain Japanese characters.


Recommended