Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Access 2010 VBA内存丢失_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access Access 2010 VBA内存丢失

Ms access Access 2010 VBA内存丢失,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我试图跟踪在连接多个不同表时可能抛出指针(丢失/定向错误)的位置。请记住,下面的代码部分只是16000行代码的一小部分,但完全独立 下面是代码的两部分 代码应如何工作: 基本上代码应该做的如下。。。当我按下一个按钮(代码的第一部分)时,几个表名一次传递给一个子表名(代码的第二部分) 更清楚的是,传递一个表名(第一部分),然后子运行该表名(第二部分),并将其放入名为“CymeImportTable”的表中,然后传递表2(第一部分),然后子运行(第二部分),并将表2追加到“CymeImportTab

我试图跟踪在连接多个不同表时可能抛出指针(丢失/定向错误)的位置。请记住,下面的代码部分只是16000行代码的一小部分,但完全独立

下面是代码的两部分

代码应如何工作:

基本上代码应该做的如下。。。当我按下一个按钮(代码的第一部分)时,几个表名一次传递给一个子表名(代码的第二部分)

更清楚的是,传递一个表名(第一部分),然后子运行该表名(第二部分),并将其放入名为“CymeImportTable”的表中,然后传递表2(第一部分),然后子运行(第二部分),并将表2追加到“CymeImportTable”中。我知道我可以把它们放到一个数组中,但以后可能会。我只是想先让一切正常,然后再优化。好的,那么上面的工作很好。。。有时候

结果是:

代码运行并将每个表记录放置到一个备忘录样式的单元格中。对于下面的代码和我的表大小,我的表中有大约4000条记录和几个字段,它们被放入一个只有一个字段的4000条记录的CymeImportFile表中。这有时效果很好,似乎在开始的时候一直有效,也许在我的桌子开始变大之前

问题:

问题是。。。CymeImportFile表有时会被填充,但其他时候会被似乎什么都没有的内容填充。两个实例中出现相同数量的记录,但有时有文本(我想要的),有时没有任何内容(不是我想要的)。只有带空白字段的空白记录

据我所知:

  • 我知道不推荐使用MEMO,这可能是我的问题,但我必须大量修改代码以避免使用MEMO格式,它适合我作为MEMO的需要
  • 我的表格中总是有很多内容,这个问题并不是我的程序什么都没有的结果
  • 这个问题发生在代码的其他几个部分(未显示),但这是最简单/最短的部分。我不能发布其他部分,因为它总共有16000行代码
  • 我知道我们可能无法仅用我提供的代码来定位错误,但我想看看你们的想法,看看是否有明显的问题我不知道。我只编程VBA大约一个月了
  • 以下代码的第一部分: 我认为问题不在这里,但我想提供尽可能多的信息。按下按钮时,下面的这一部分只是将表名传递给名为“Concatenate”的子项。请记住,此代码可能没有经过优化

    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