Ms access Access 2010 VBA内存丢失
我试图跟踪在连接多个不同表时可能抛出指针(丢失/定向错误)的位置。请记住,下面的代码部分只是16000行代码的一小部分,但完全独立 下面是代码的两部分 代码应如何工作: 基本上代码应该做的如下。。。当我按下一个按钮(代码的第一部分)时,几个表名一次传递给一个子表名(代码的第二部分) 更清楚的是,传递一个表名(第一部分),然后子运行该表名(第二部分),并将其放入名为“CymeImportTable”的表中,然后传递表2(第一部分),然后子运行(第二部分),并将表2追加到“CymeImportTable”中。我知道我可以把它们放到一个数组中,但以后可能会。我只是想先让一切正常,然后再优化。好的,那么上面的工作很好。。。有时候 结果是: 代码运行并将每个表记录放置到一个备忘录样式的单元格中。对于下面的代码和我的表大小,我的表中有大约4000条记录和几个字段,它们被放入一个只有一个字段的4000条记录的CymeImportFile表中。这有时效果很好,似乎在开始的时候一直有效,也许在我的桌子开始变大之前 问题: 问题是。。。CymeImportFile表有时会被填充,但其他时候会被似乎什么都没有的内容填充。两个实例中出现相同数量的记录,但有时有文本(我想要的),有时没有任何内容(不是我想要的)。只有带空白字段的空白记录 据我所知:Ms access Access 2010 VBA内存丢失,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我试图跟踪在连接多个不同表时可能抛出指针(丢失/定向错误)的位置。请记住,下面的代码部分只是16000行代码的一小部分,但完全独立 下面是代码的两部分 代码应如何工作: 基本上代码应该做的如下。。。当我按下一个按钮(代码的第一部分)时,几个表名一次传递给一个子表名(代码的第二部分) 更清楚的是,传递一个表名(第一部分),然后子运行该表名(第二部分),并将其放入名为“CymeImportTable”的表中,然后传递表2(第一部分),然后子运行(第二部分),并将表2追加到“CymeImportTab
Private Sub buttonConcatenate_Click()
DoCmd.SetWarnings False
DoCmd.CopyObject , "CymeImportFile", acTable, "Template_CymeImportFile"
'DoCmd.RunSQL "DELETE * FROM CymeImportFile"
DoCmd.SetWarnings True
Dim Table As String
'[GENERAL]
Table = "GENERAL"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckGeneral.Value = 0
'[IMPERIAL]
Table = "IMPERIAL"
Concatenate.Concatenate Table
' [HEADNODES]
Table = "HEADNODES"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckHeadnodes.Value = 0
' [SOURCE]
Table = "SOURCE"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckSource.Value = 0
' [NODE]
Table = "NODE"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckNode.Value = 0
' [LINE_CONFIGURATION]
Table = "LINE_CONFIGURATION"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckLine_Configuration.Value = 0
' [SECTION]
Table = "SECTION"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckSection.Value = 0
' [SWITCH SETTING]
Table = "SWITCH_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckSwitchSetting.Value = 0
' [FUSE SETTING]
Table = "FUSE_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckFuseSetting.Value = 0
' [RECLOSER SETTING]
Table = "RECLOSER_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckRecloserSetting.Value = 0
' [TRANSFORMER SETTING]
Table = "TRANSFORMER_SETTING"
'Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckTransformerSetting.Value = 0
' [SECTIONALIZER SETTING]
Table = "SECTIONALIZER_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckSectionalizerSetting.Value = 0
' [REGULATOR SETTING]
Table = "REGULATOR_BYPHASE_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckRegulatorSetting.Value = 0
' [SHUNT CAPACITOR SETTING]
Table = "SHUNT_CAPACITOR_SETTING"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckShuntCapacitorSetting.Value = 0
' [INTERMEDIATE NODES]
Table = "INTERMEDIATE_NODES"
Concatenate.Concatenate Table
Form_Cyme_Model_Update.CheckIntermediateNodes.Value = 0
' [RELAY SETTING]
'Table = "RELAY_SETTING"
'Concatenate.Concatenate Table
'Form_Cyme_Model_Update.CheckRelaySetting.Value = 0
Form_Cyme_Model_Update.CheckConcatenate.Value = -1
''Message Box
MsgBox "Cyme imput has been concatenated into CymeImportFile"
End Sub
下一节是传递变量(表名)的地方,用于将传递的表名的内容放入表“CymeInputFile”中
选项比较数据库
子连接(表作为字符串)
'设置数据库
设置dbsCyme\u Model\u Update=CurrentDb
作为字符串的Dim字段
'统计记录和字段
RecordCount=CurrentDb.TableDefs(Table.RecordCount)
fieldCount=CurrentDb.TableDefs(Table.Fields.Count)
记录计数器=0
ReDim字段数组(0)作为字符串
以字符串形式重拨recordArray(0)
ReDim FIELDARY(FIELDCUNT-1)作为字符串
将recordArray(RecordCount-1)作为字符串进行重拨
Set rst=dbsCyme\u Model\u Update.OpenRecordset(表)
rst.MoveFirst
直到rst.EOF为止
'字段数据
字段计数器=0
而fieldCounter
我想出来了。所有这些不同的添加和更新把一切都搞糊涂了。我把它简化成这个。。。不完全是martin Parkin所说的,但您的评论让我在本节和创建表格的所有其他节中玩弄我的打印过程
新代码
'Print to the CymeImportFile
Dim bob As String
bob = 0
Set rst = dbsCyme_Model_Update.OpenRecordset("CymeImportFile")
RecordCounter = 0
rst.MoveLast
rst.AddNew
For Each element In recordArray
'rst.Edit
rst.AddNew
temp = recordArray(RecordCounter)
rst!Field1 = temp
rst.Update
RecordCounter = RecordCounter + 1
Next element
rst.Close
Set rst = Nothing
ReDim fieldArray(0) As String
ReDim recordArray(0) As String
Debug.Print Table
End Sub
刚刚测试了一些东西。。。。我在上面代码的第二部分的第行后面添加了“Debug.Print recordArray(RecordCounter)”。。。“对于recordArray中的每个元素”,它使用debug.print打印出内容,但没有在我的文件“CymeImportFile”中打印。为什么要添加一个新记录,在
记录集
不是BOF
时更新,然后移回上一个记录?在'Print to the CymeImportFile
Dim bob As String
bob = 0
Set rst = dbsCyme_Model_Update.OpenRecordset("CymeImportFile")
RecordCounter = 0
rst.MoveLast
rst.AddNew
For Each element In recordArray
'rst.Edit
rst.AddNew
temp = recordArray(RecordCounter)
rst!Field1 = temp
rst.Update
RecordCounter = RecordCounter + 1
Next element
rst.Close
Set rst = Nothing
ReDim fieldArray(0) As String
ReDim recordArray(0) As String
Debug.Print Table
End Sub