jwcolby
jwcolby at colbyconsulting.com
Wed Feb 17 14:54:11 CST 2010
collections go from 0 to Col.Count-1 You are going from 1 to Col.count > For i = 1 To cName.Count >>> For i = 0 To cName.Count-1 John W. Colby www.ColbyConsulting.com William Hindman wrote: > ...no, I'm not looking for a bill collector :) > > ...I'm running the following code behind a form. > ...the code in InitialzeData runs just fine, no errors, and the displays > work. > ...the code in InitializeData2 gives an error every time on the line > Rose1.AddButton cName(i), "12," & cPolygon(i) > ...the difference is of course that one uses a txt file to initialize the > collections and the other uses an Access table with the same data > ...the nCount in InitializeData2 shows 3 records read as it should > ...the error is "Runtime error 3420. Object Invalid or No Longer Set" > ...I'm a virgin in trying to code collections ...looking for a guru to tell > me what I'm doing wrong ;) > > William > -------------------------------------------- > Option Compare Database > Option Explicit > > Dim cPolygon As New Collection > Dim cName As New Collection > Dim cStatusbar As New Collection > Dim cLabel As New Collection > > > Private Sub Form_Load() > > Dim i As Integer > > '----- > 'Initialize data > 'InitializeData > InitializeData2 > > '-----Add hotspot buttons to map and display > Rose1.BitmapPath = GetAppPath() > 'Rose1.SetCustomColorPalette "map_ncal.bmp" > Rose1.Wallpaper = "MBCC_Hall_C_Spring_001.bmp" > 'Rose1.Wallpaper = "map_ncal.bmp" > Rose1.StartForm "Form1" > For i = 1 To cName.Count > Rose1.AddButton cName(i), "12," & cPolygon(i) > Rose1.SetButtonStatusbar "", cStatusbar(i) > Rose1.SetButtonLabel "", cLabel(i) > Next > Rose1.EndForm > Rose1.OpenForm "Form1" > > > End Sub > > Private Sub Form_Unload(Cancel As Integer) > > '-----Clear up > Set cPolygon = Nothing > Set cName = Nothing > Set cStatusbar = Nothing > Set cLabel = Nothing > > End Sub > > Private Function GetAppPath() As String > 'Working variables > Dim sAppPath As String > Dim i As Integer, nLen As Integer, nPos As Integer > > sAppPath = Application.DBEngine.Workspaces(0).Databases(0).Name > nLen = Len(sAppPath) > For i = 1 To nLen > If Mid(sAppPath, nLen - i, 1) = "\" Then > nPos = nLen - i > Exit For > End If > Next > sAppPath = Left(sAppPath, nPos - 1) > GetAppPath = sAppPath > > End Function > > Private Sub InitializeData() > > > '-----Hotspot Polygon Data > cPolygon.Add "0238, 75,61,18,18, 75 61 92 61 92 78 75 78 75 61 75 61 92 > 61" > cPolygon.Add "0239, 113,61,18,18, 113 61 130 61 130 78 113 78 113 61" > cPolygon.Add "1333, 733,137,18,17, 750 137 750 153 733 153 733 137" > > '-----Hotspot button names > cName.Add "0238" > cName.Add "0239" > cName.Add "1333" > > '-----Hotspot status bar text > cStatusbar.Add "Booth 0238" > cStatusbar.Add "Booth 0239" > cStatusbar.Add "Booth 1333" > > > '-----Hotspot button labels > cLabel.Add "0238" > cLabel.Add "0239" > cLabel.Add "1333" > > End Sub > Private Sub InitializeData2() > > Dim i As Integer, nCount As Integer > Dim dbs As DAO.Database, rst As DAO.Recordset > Dim strSQL As String > > '-----Get data from table > Set dbs = CurrentDb > Set rst = dbs.OpenRecordset("tblFloorPlans") > 'strSQL = "SELECT [ID], [RegionName], [Statusbar], [Label], [Polygon] > FROM tblFloorPlans;" > 'Set rst = dbs.OpenRecordset(strSQL) > rst.MoveLast > nCount = rst.RecordCount > 'If nCount > 0 Then > 'MsgBox nCount, vbInformation > 'End If > rst.MoveFirst > > '-----Fill data to collections > For i = 1 To nCount > cName.Add rst!RegionName > cStatusbar.Add rst!Statusbar > cLabel.Add rst!Label > cPolygon.Add rst!Polygon > rst.MoveNext > Next > > '-----Close > rst.Close > Set dbs = Nothing > >