Heenan, Lambert
Lambert.Heenan at chartisinsurance.com
Thu Oct 18 12:54:08 CDT 2012
Sorry about that folks, I had just crudely snipped some code out of a procedure. curIdx should indeed be dimmed as Dim curIdx As Index Here is the whole procedure, which has some code in there for saving the info to tables for a table documenter tool I adapted from an old Access magazine years ago. '---Begin DAO Code-------- Function DocumentTables(Optional sDbName As Variant) Dim db As Database Dim DbToDoc As Database Dim rstTables As Recordset, rstTblDetail As Recordset Dim curTbl As TableDef Dim curFld As Field, curIdxFld As Field Dim curIdx As Index Dim cntTbls As Integer, cntFlds As Integer, cntKey As Integer Dim cntIdx As Integer Dim myTableName As String Dim tempLastF As String Const NO_DESC_FOUND = 3270 On Error GoTo DocumentTables_err Set db = DBEngine(0)(0) 'Set db = CurrentDb If IsMissing(sDbName) Then Set DbToDoc = db Else Set DbToDoc = OpenDatabase(sDbName) End If ClearLastResultSet '** Open the destination tables Set rstTables = db.OpenRecordset("USysTables") Set rstTblDetail = db.OpenRecordset("USysTableDetails") '** Empty the destination tables If rstTables.RecordCount <> 0 Then MyStatusText "Please wait..." Do While Not rstTables.EOF MyStatusText "Removing : " & rstTables.Fields("TableName") rstTables.Delete rstTables.MoveNext Loop End If MyStatusText "" If rstTblDetail.RecordCount <> 0 Then Do While Not rstTblDetail.EOF MyStatusText "Removing : " & rstTblDetail("TableName") rstTblDetail.Delete rstTblDetail.MoveNext Loop End If '** Loop though all the tables in the database For cntTbls = 0 To DbToDoc.TableDefs.Count - 1 Set curTbl = DbToDoc.TableDefs(cntTbls) myTableName = curTbl.Name MyStatusText "Checking " & myTableName '** if the table is an MS system object ignore it If left(curTbl.Name, 4) <> "MSys" Then rstTables.AddNew '** Add a new record rstTables("TableName") = curTbl.Name rstTables("DateCreated") = curTbl.DateCreated rstTables("DateUpdated") = curTbl.LastUpdated If curTbl.Connect <> "" Then rstTables("Description") = curTbl.Properties("Description") rstTables("Connect") = curTbl.Connect Else rstTables("Description") = curTbl.Properties("Description") End If rstTables.Update '** Save the record '** Loop though all the fields in the current table For cntFlds = 0 To curTbl.Fields.Count - 1 'If Left(curFld.Name, 4) = "bCur" Then Stop Set curFld = curTbl.Fields(cntFlds) MyStatusText "Checking " & myTableName & " : field-" & curFld.Name rstTblDetail.AddNew '* add a record rstTblDetail("TableName") = curTbl.Name rstTblDetail("FieldName") = curFld.Name rstTblDetail("DataType") = GetFieldDataType(curFld) rstTblDetail("Size") = curFld.Size rstTblDetail("OrdinalPosition") = curFld.OrdinalPosition 'rstTblDetail("Description") = curFld.Properties("Description") Dim oProp As Property For Each oProp In curFld.Properties If oProp.Name = "InputMask" Then rstTblDetail("InputMask") = oProp.Value End If Next oProp '** Loop though all the indexes in the current table For cntKey = 0 To curTbl.Indexes.Count - 1 Set curIdx = curTbl.Indexes(cntKey) '** Loop though all the fields in the current index For cntIdx = 0 To curIdx.Fields.Count - 1 Set curIdxFld = curIdx.Fields(cntIdx) '* is the current field part of the primary key? If (curFld.Name = curIdxFld.Name) And (curIdx.Primary = True) Then rstTblDetail("PrimaryKey") = True End If Next cntIdx ' move to next field in the current index Next cntKey ' move to next index in current table rstTblDetail.Update Next cntFlds End If Next cntTbls DocumentTable_Leave: MyStatusText "" Exit Function DocumentTables_err: ' * If a table's description is blank, ignore the rror If Err = NO_DESC_FOUND Then Resume Next End If MsgBox "In DocumentTable. Error " & Err & " is: " & Error Resume DocumentTable_Leave End Function '----End Code ------- Lambert -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Charlotte Foust Sent: Thursday, October 18, 2012 1:08 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] 2 Questions concerning lists of fields and indexes That's your problem, Arthur. You're using curIdx in the code but it isn't specifically dimmed. Charlotte On Thu, Oct 18, 2012 at 9:52 AM, Arthur Fuller <fuller.artful at gmail.com>wrote: > Lambert, > > You said you copied this from an old app. So I can't figure out why it > won't compile in Access 2007. Perhaps it's because I always preface my > modules with Option Database and Option Explicit? > > <vba> > ' Code from an old App... > ' Indexes > Dim cntKey as Integer > Dim curIdxFld As Field > Dim cntIdx As Integer > Dim curFld As Field > > For cntKey = 0 To Td.Indexes.Count - 1 > Set curIdx = Td.Indexes(cntKey) > '** Loop though all the fields in the current index > For cntIdx = 0 To curIdx.Fields.Count - 1 > Set curIdxFld = curIdx.Fields(cntIdx) > '* is the current field part of the primary key? > If (curFld.Name = curIdxFld.Name) And (curIdx.Primary = True) Then > ' log your primary key setting here > End If > Next cntIdx ' move to next field in the current index Next cntKey > ' move to next index in current table </vba> > -- > Arthur > Cell: 647.710.1314 > > Memory is that part of the brain that, umm, I forget, but it does > something useful, I think. > -- Arthur Fuller > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com