Link to home
Start Free TrialLog in
Avatar of chrisatwork
chrisatwork

asked on

visual basic express 2008 textbox coding - beginner!

I am learning VB exp 2008 with a book in my hand......
I would like to use a textbox in a panel to input 4 numeric characters, then pass that data to an opening string for an ADONet connection to an access database in order to select a particular record

I thought to use the textbox TextChanged event to count 4 character entry then create the request without having to click a "go" button. (I'm not interested at the moment on the error checking for numerics).

I open the database connection in the form load event using the following:

m_cnADONetConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\visual_basic_tests\test1.mdb"
        m_cnADONetConnection.Open()

 but thought to submit the 4 digit numeric ID from the TextChanged event after 4 characters are entered (and checked!) like this: (the numbers are held in an integer variable intIDNumber and the database field to be searched is ID_Number)

m_daDataAdapter = New OleDb.OleDbDataAdapter("Select * From TestTable where ID_Number = intIDNumber", m_cnADONetConnection)
        m_cbCommandBuilder = New OleDb.OleDbCommandBuilder(m_daDataAdapter)
        m_daDataAdapter.Fill(m_dtTest1)
        Me.ShowCurrentRecord()

I am not sure how to write the TextChanged code to loop until 4 characters are entered then
select the record, close the panel and display the result in textboxes in another panel.

I got this far then realised I hadn't a clue what to do next!

Private Sub txtGetData1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtGetData1.TextChanged
       
        strResult = txtGetData1.Text
        intIDNumber = CInt(strResult)
        intCount = intCount + 1
        If intCount = 4 Then
??????????????
        End If
      End Sub

intCount is declared in the class declarations at the top of the form

In another test i have successfully populated the m_dataAdapter with all the records and can  display and move through the records and change and save, so the connection works (using the select * without the where) but I need to select a single record for global use over several forms.

Hope its clear!

There will be more....

Christopher



Avatar of Bob Learned
Bob Learned
Flag of United States of America image

Welcome to the wonderful world of .NET development!!

Here are some thoughts to help you along:

1) I assume that 'intCount' is a module-level variable to count the characters entered.  If you don't reset this value, it will just continue to increase, and will only equal 4 one time.

2) Another approach is to check the text length.

3) I am not quite sure that I understand what "select the record" means...  Are you saying that you want to use the entered value, and call the Fill method to get the data into the DataTable?

4) Where is the " m_daDataAdapter.Fill(m_dtTest1) line defined?

5) Do you want to use a data-binding technique to bind the TextBox controls to the DataTable?
Avatar of chrisatwork
chrisatwork

ASKER

Thanks for the welcome! (it's a far cry from Basic in the early '80's).

Ok, using the book, I can now connect to my access database and retrieve the complete set of records into a data table.  I can then display  each complete record in a panel containing text boxes for individual fields. Additional buttons in the panel give me first, last, forward 1 and back 1 options to move around the records, together with a save button.  This is a fairly standard arrangement for which I have copied  code from the web as well as reading the book.

So I can modify individual records within the set.  I know how to save the modifications back to the database and (in theory, not yet done) add and delete records. I want to be able to go to a record by number, not just by stepping through.

In the database is a non auto incrementing key field "ID_Number" which holds consecutive 4 digit integers starting at 1000  ( a hangover from a flat file database originally started in the mid '80's). Unused ID numbers originally were intentionally left blank. The ID's are of customers

With the dataset populated with all records I want to be able to choose one by ID for editing (and eventually choose by string searching of other fields, but first steps...)

As the ID's are never going to get above 4 digits (after 15 years we are still only at 2000+) I would like to enter the numbers into a text box, stop at 4 digits, then do the linear translation from ID_Number to Data Set row number and call  Me.ShowCurrentRecord() But I am not sure how to code to check the key presses into the text box then exit on the 4th (having validated both for being numeric and within ID number range). I assumed I would need to use the textChanged event.

I have made a text box and a "Go" button to go to a specific record via the ID Number, which does work (most of the time), but want to lose the "Go" button step.  

I defined the intCount as a Private integer at the head of the containing form, just under the Class line, and the m_DataAdapter.Fill line is in the form load event with the other connection code.

Don't yet understand question 5!

I presume that I can reset the counter as part of the textChanged event code.

Just for info, this is a learning exercise to develop routines to select a customer address and relevant (from many) contact details from (eventually) 2 or more tables by joining, for use in other routines and/or database editing.  I figured I should learn how to connect to, retrieve and display records first, before I start to try complex selection and manipulation.  I did do a little reading into VB6 & VBA a few years ago and this is a continuation of that.  I have built menu navigation that works, now I am trying to code the routines I need, using as a structural model a turnkey DOS Basic application I reprogrammed over a number of years.

Hope this explains it a bit better

Christopher
By the way, since you have 2008 Express, you might want to think about upgrading to 2010 Express. I believe that .NET 4.0 framework is a much more significant upgrade over 2008.

"Don't yet understand question 5! "

Example:
http://www.java2s.com/Code/VB/Database-ADO.net/DataViewBindtoTextBox.htm


' Bind TextBox1 to FirstName column of the Employees table
TextBox1.DataBindings.Add("text", dv, "FirstName")

' Bind TextBox2 to LastName column of the Products table
TextBox2.DataBindings.Add("text", dv, "LastName")
   

Open in new window

Thanks for the info.  I have been reading & researching - I hate having to work without really knowing what I am doing.  I have several new queries as a result of the weekend work and will post new questions in due course.

In the meantime, still haven't figured out how to program the TextChanged event to process the input when it reaches 4 validated numeric characters to translate that into a row number for display of the relevant record in the local dataset.

In the click event on a test using a go button, I took the 4 digit string, extracted the numeric with CInt, subtracted the constant offset from the entered ID number to produce an actual row number then applied this to show that row record (much in the same way as the single stepping buttons moved through the dataset (perfectly).  My method sometimes produced ambiguous results - off by one or two records - and I couldn't see, by debugging, why this should be.

So a clue how to do the TextChanged event would be much appreciated!
ASKER CERTIFIED SOLUTION
Avatar of Bob Learned
Bob Learned
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Thanks for the pointer to the appropriate function (the book was silent here...)

Onto the next (inevitable) question....