Learn Microsoft Access Advanced Programming Techniques, Tips and Tricks.

Uploading Comma delimited Text Data into Access Table-2

Last week we have learned how to upload a simple list of names (separated with commas) from a text file into Microsoft Access Table.

Now, we will improve that program little bit more to add few fields (Name, Birthdate, Height and Weight) to each record. The sample text file image is given below for reference.

The text file have fixed number of items on a single line. All the four items belongs to a single record. In last week's example we have used a single column in Access Table for output and number of items on each line in text file were different. Since, all the items belongs to a single output column on Access Table we need to determine how many items are there in the x_Names Array, put by the Split() Function from a single line of text and we have used Ubound() Function to take the count of items in the output Array.

In this example we have an output table with fixed number of fields: Name, BirthDate, Height and Weight. Sample image of the output table is given below:

VBA Code that uploads the text file into the access table is given below:

Public Function NamesList2()
'Utility: Creating Access Table from
'       : comma separated text data.
'Author : a.p.r.pillai
'Date   : May 2016
'Rights : All Rights Reserved by www.msaccesstips.com
Dim db As Database, rst As Recordset, tdef As TableDef
Dim strH As String, fld As Field, j As Integer
Dim x_Names As Variant, tblName As String, fldName As String
Dim txtfile As String

On Error GoTo NamesList2_err
tblName = "NamesList2"
txtfile = "d:\mdbs\Names2.txt" 'Make required changes 

'create the NamesList2 table
Set db = CurrentDb
Set tdef = db.CreateTableDef(tblName)
With tdef
  .Fields.Append .CreateField("Name", dbtext, 50)
  .Fields.Append .CreateField("BirthDate", dbDate)
  .Fields.Append .CreateField("Height", dbInteger)
  .Fields.Append .CreateField("Weight", dbInteger)
End With
db.TableDefs.Append tdef

'Open the NamesList table to write names with the text file
Set rst = db.OpenRecordset(tblName)

'Open the Names2.txt file to upload data into the table
Open txtfile For Input As #1
'setup a loop to read the data till the end-of-file reached
Do While Not EOF(1)
'read the first line of items separated with commas and
'terminated with carriage return (Enter key)into variable strH
Line Input #1, strH
'extract each item separated with comma and load into the Array variable x_Names
x_Names = Split(strH, ",")

'Read each item from array elements
'and write into the NamesList2 table fields
With rst
    ![Name] = x_Names(0)
    ![BirthDate] = x_Names(1)
    ![Height] = x_Names(2)
    ![Weight] = x_Names(3)

End With
'Repeat till the End-Of-Text File is reached

Set rst = Nothing
Set db = Nothing
Exit Function

If Err = 3010 Then 'Table already exists
  'continue executing from the next line onwards
  Resume Next
  MsgBox Err & ": " & Err.Description, "NamesList2()"
  Resume NamesList2_Exit
End If
End Function

As we did in the earlier example, first we are attempting to create a new access table with four fields. If the table creation process end up with error code 3010 then the table already exists and continue to execute from the next line, skipping the table creation process. If it ends up with any other error code then the program terminates. Opens the text file for reading the text data, each line at a time. The Split() function breaks up items in the line and loads into the x_Names Array.

Next step is to add a new record into the access table, take each item from the array element and load it into the corresponding data field before updating them on the table. We know that each text line have four items and they are in which order. Only we need to know the array index numbers to read the items and load them into the fields. Split Function uses zero based index system to store the items in the array in memory. Since, we have only four items on a line the index numbers will be 0,1,2,3 to address each item in the array in sequence, Name, BirthDate, Height and Weight as shown in the program snippet given below.

With rst
    ![Name] = x_Names(0)
    ![BirthDate] = x_Names(1)
    ![Height] = x_Names(2)
    ![Weight] = x_Names(3)

End With

We can use the following code in place of the above code snippet:

With rst
For j = 0 To UBound(x_Names)
    .Fields(j).Value = x_Names(j)
End With

The first code snippet is good for beginners and easy to understand. But, it is not an efficient method when more items are there on a text line to upload. The second code is more compact and doesn't address the field names directly. If any of the field name changes at a later stage the first code snippet will run into error but the second code will work without errors. Number of items on a line is also taken care of automatically. 

The first code cannot be used for a different table, but the second code snippet works for any table without change.


No comments:

Post a Comment

Comments are subject to moderation before publishing.


Subscribe in a reader
Your email address:

Delivered by FeedBurner

Blog Directory Visit blogadda.com to discover Indian blogs


Popular Posts

Search This Blog

Blog Archive

Powered by Blogger.

Follow by Email


Forms How Tos Functions MS-Access Security Reports msaccess forms Animations msaccess animation Class Module Utilities msaccess controls Access and Internet MS-Access Scurity MS-Access and Internet Array Queries msaccess reports External Links msaccess tips Accesstips Downloads Objects Property Menus and Toolbars Controls Event MsaccessLinks Process Controls Art Work Collection Object WithEvents msaccess How Tos Combo Boxes Graph Charts List Boxes VBA msaccessQuery Command Buttons Command Button Data Dictionary Object Emails and Alerts Form Query RaiseEvent Report Calculation Custom Wizards DOS Commands Data Type ms-access functions msaccess functions msaccess graphs msaccess reporttricks Item Object Reference msaccessprocess security advanced Access Security Add Custom Functions Field Type Fields Form Instances Key Macros Menus SubForm Top Values Variables msaccess email msaccess menus progressmeter Access2007 Auto-Number Copy Expression Join Methods Microsoft Numbering System Records Recordset Security Split Table Time Difference Utility Workgroup Wrapper Classes database ms-access msaccess wizards reference text tutorial vba code Access2003 Accounting Year Action Animation Attachment Binary Numbers Bookmarks Budgeting ChDir Color Palette Conditional Formatting Data Filtering Defining Pages Diagram Disk Dynamic Lookup Error Handler Excel Export External Filter Formatting Groups Hexadecimal Numbers Import Labels List Logo Macro Mail Merge Main Form Memo Monitoring Octal Numbers Operating System Paste Primary-Key Product Rank Reading Remove Rich Text Sequence SetFocus Summary Tab-Page Tables Union Query User Users Water-Mark Word automatically commands function hyperlinks iSeries Date iif msaccess msaccess alerts pdf files restore switch toolbar updating upload

Featured Post

WithEvents and All Form Control Types

Introduction So far we have worked extensively with only one type of Control: the TextBoxes on Form, enabled with Events to Raise and captur...


Blog Archive

Recent Posts