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,478 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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
hit enter key to run macro 13 23
VBA script to check for duplicate primary keys on lost focus 18 29
Programmer 14 46
Migrating Macro Menu’s From Access 2003 to Access 2013 2 26
When you are entering numbers in a speadsheet, and don't remember what 6×7 is, you just type “=6*7" instead. It works in every cell! This is not so in Access. To enter the elusive 42 in a text box, you have to find a calculator, and then copy the re…
It’s been over a month into 2017, and there is already a sophisticated Gmail phishing email making it rounds. New techniques and tactics, have given hackers a way to authentically impersonate your contacts.How it Works The attack works by targeti…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

816 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

9 Experts available now in Live!

Get 1:1 Help Now