Solved

MIcrosoft, Access, 2003, VB - Populate an array from record set - Part Two, Get errors... "Type Mismatch" OR "Can't Assign to Array"

Posted on 2007-11-28
3
4,468 Views
Last Modified: 2013-11-27
All I want to do is display the Record Set on screen (only if records are found) in table format or perhaps print it; which ever is easier.

However; I continually get one of these errors... "Type Mismatch" OR "Can't Assign to Array"

I have found a couple of previous questions that are good examples, however neither solution resolves my problem...
http://search.experts-exchange.com/Microsoft/Development/MS_Access/Q_20844364.html?sfQueryTermInfo=1+arrai+assign+can%27t

http://search.experts-exchange.com/Microsoft/Development/MS_Access/Access_Coding-Macros/Q_22864730.html?sfQueryTermInfo=1+arrai+assign+can%27t

My code is attached.
Function FindDuplicates()

   Dim DB As Database

   Dim TheRecordSet As Recordset

   Dim RecordSetArray() As Variant     '<----- Related to error

   Dim NumOfRecords, RSRows, RSCols As Long

   Dim ModuleName, ErrorText, SQLQuery1 As String

   

   ' Initialize Error Routine

   On Error GoTo ThreeStoogages

   ModuleName = "FindDuplicates()" & Chr(10) & Chr(13)

   ErrorText = ModuleName & Chr(13) & Chr(10) & "Initialize All Variables"

   

   Set DB = CurrentDb()

   NumOfRecords = 0

   

   MsgBox "Begin VB Module Process: " & ModuleName & Chr(13) & Chr(10) & "Is used to identify duplicate records", vbInformation, "VB Module Execution"

   

   ' The SELECT Query

   SQLQuery1 = "SELECT blah, blah, blah..."

   ' MsgBox SQLQuery1, vbInformation, "SQLQuery1 Variable Contents"

   

   ' Create the RecordSet

   ErrorText = ModuleName & Chr(13) & Chr(10) & "Initialize Record Set"

   Set TheRecordSet = DB.OpenRecordset(SQLQuery1, dbOpenSnapshot)

   TheRecordSet.MoveLast

   TheRecordSet.MoveFirst

   NumOfRecords = TheRecordSet.RecordCount

   

   ' Store the Record Set into an Array

   ErrorText = ModuleName & Chr(13) & Chr(10) & "Store the Record Set in an Array"

   Set RecordSetArray = TheRecordSet.GetRows(NumOfRecords)     '<----- Error occurs here

   

   ' Get the Array Column and Row Count

   ErrorText = ModuleName & Chr(13) & Chr(10) & "Get the Column and Row counts in the Array"

   RSCols = UBound(RecordSetArray, 1) 'Returns the Number of Columns in the Record Set - I have 9 columns

   RSRows = UBound(RecordSetArray, 2) 'Returns the Number of Rows in the Record Set - I have 120 records

   

   ' For the Error Routine

   ErrorText = ModuleName & Chr(13) & Chr(10) & "Check for empty Record Set"

   If TheRecordSet.BOF And TheRecordSet.EOF Then

      MsgBox ModuleName & Chr(13) & "No duplicate records found.", vbInformation, "Successful VB Module Execution"

      Exit Function

   Else

      ' Display the Record Set on screen

      ErrorText = ModuleName & Chr(13) & Chr(10) & "Display Record Set"

      MsgBox ModuleName & Chr(13) & "Duplicate records found.", vbInformation, "Successful VB Module Execution"

      

      ' Write any display code here as needed

      

   End If

   

   MsgBox ModuleName & "Found " & NumOfRecords & " Duplicate Records", vbInformation, "Successful VB Module Execution"

   Exit Function

   

' Error Routine

ThreeStoogages: MsgBox "Error Type: " & Error() & Chr(13) & Chr(10) & ErrorText, vbInformation, "Un-Successful VB Module Execution"
 

End Function

Open in new window

0
Comment
Question by:d2beetle
  • 2
3 Comments
 
LVL 84
ID: 20367646
Try declaring your array differently:

Dim RecordSetArray As Variant     '<----- Related to error

See this KB article for more info:
http://support.microsoft.com/kb/129856
0
 
LVL 84

Accepted Solution

by:
Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 250 total points
ID: 20367653
Note also you may need to remove teh Set call:

RecordSetArray = TheRecordSet.GetRows(NumOfRecords)
0
 

Author Comment

by:d2beetle
ID: 20373415
LSMConsulting,

Thanks, I use this declaration... Dim RecordSetArray() As Variant ...and removed the word SET per your sugestion and it worked! That explains why I coulsd not figure it out, it wasy to easy.

Now all I need to do is display the array in a table or grid, any suggestions (point me in the right direction)?
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Today's users almost expect this to happen in all search boxes. After all, if their favourite search engine juggles with tens of thousand keywords while they type, and suggests matching phrases on the fly, why shouldn't they expect the same from you…
I see at least one EE question a week that pertains to using temporary tables in MS Access.  But surprisingly, I was unable to find a single article devoted solely to this topic. I don’t intend to describe all of the uses of temporary tables in t…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Basics of query design. Shows you how to construct a simple query by adding tables, perform joins, defining output columns, perform sorting, and apply criteria.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now