AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题

问题[microsoft-access](computer)

Martin Hope
NewSites
Asked: 2022-06-08 09:31:46 +0800 CST

为什么这个 VBA 数据获取功能会挂起?

  • 5

我在 VBA 中编写了这个函数来从 URL 中获取数据。我从 Access 查询中调用的另一个函数调用它。代码改编自代码注释中引用的一篇文章中的代码:

'========================================================
Public Function sURLfetch(ByVal sURL As String) As String
'========================================================
' Return data found at a URL.

' From "www.MyExcelGenius.com/getting-data-from-a-website-in-json-format-using-vba/".
' Requires reference "Microsoft XML, v6.0".

Const bRunAsynch As Boolean = True
Const nProcessComplete As Integer = 4

Dim oRequest As MSXML2.XMLHTTP60
Set oRequest = New MSXML2.XMLHTTP60

Dim sResponse As String

With oRequest
    .Open "get", sURL, bRunAsynch
    .setRequestHeader "Content-Type", "application/json"
    .send

    Do While oRequest.ReadyState <> nProcessComplete
        DoEvents
      Loop
    
    sResponse = .responseText
  End With

sURLfetch = sResponse

'========================================================
End Function        ' sURLfetch()
'========================================================

调用此函数时,它会挂起 VBA。但奇怪的是:如果我在行上设置断点:

Do While oRequest.ReadyState <> nProcessComplete

然后告诉 VBA 从那里继续,然后它运行良好并返回所需的结果。只要代码在该断点处中断然后继续,它就会一遍又一遍地执行此操作,返回正确的结果序列。但是,如果我删除该断点并在循环之后的行上设置一个断点:

sResponse = .responseText

然后它挂起,我什么也没得到。

所以,由于某种原因,这个函数会挂在循环上,除非它被告知在进入循环之前通过断点暂停。

循环的目的是确保在记录响应之前获取过程已经完成。我看过代码的运行,循环一般会重复0次或1次。当它重复时,这意味着获取不完整并且需要完成。因此,对于我要获取的内容,循环是必要的。并且由于某种原因,只要它前面有一个断点,它似乎就可以正常工作,但否则会神秘地挂起。

该DoEvents函数,即循环的全部内容,只是告诉 VBA 让操作系统在循环执行时做任何事情。该函数调用在此处改编的原始代码中,并且有Microsoft和wellsr的函数文档。

我试图通过插入对随机暂停 VBA 的函数的调用来自动暂停。这并没有阻止该功能挂起。

概括:

  • 如果函数在循环开始时被断点暂停,则该函数起作用。
  • 如果在没有断点或在该循环之后有断点的情况下调用它,它将挂起。

什么可能导致这个功能挂起,我可以改变什么来让它工作?

vba microsoft-access
  • 1 个回答
  • 46 Views
Martin Hope
skelso
Asked: 2022-04-01 12:54:47 +0800 CST

如何比较从子/联结表中提取的值集?

  • 5

我对数据库工作比较陌生,所以我可能会错误地使用一些术语。请不要被那个误导。

假设我有三个表:Items、Customers 和一个连接两者的 Junction 表。(这与我的实际用例无关,所以忽略任何看起来不合理的东西。我只是在调味应该是一个抽象的例子。)

假设 Items 表有 4 条记录,数字 1 到 4。假设 Customers 表有 10 条记录,字母 A 到 J。假设这是 Junction 表:

物品 顾客
1 一个
1 C
1 H
2 一个
2 H
3 一个
3 C
3 H
4 C
4 D
4 乙

这张表上的排序很容易看出它在某种意义上将项目映射到客户集,如下所示:

物品 客户集
1 {A,C,H}
2 {A,H}
3 {A,C,H}
4 {C、D、E}

我正在寻找比较这些集合映射的方法。让 X 和 Y 是任意两个项目,让 J(X) 是由联结表将 X 映射到的客户集合。我希望能够回答以下问题:

  1. J(X) = J(Y) 吗?[扩展,所以不考虑顺序]
  2. J(X) 是 J(Y) 的子集吗?
  3. J(X) 是否与 J(Y) 部分重叠?如果是这样,它们的交叉点是什么?

从计算的角度来看,这些似乎都是非常基本的问题。我拒绝相信没有办法做到这一点。如果在 Access 中不可能,但在其他系统中可能,你能指出我正确的方向吗?

microsoft-access
  • 1 个回答
  • 36 Views
Martin Hope
skelso
Asked: 2022-02-19 14:33:35 +0800 CST

将空白视为具有所有可能值的查询

  • 5

假设我有以下表格:

字段_1 字段_2 字段_3
一个 乙 D
一个 C 乙
一个 C F
Z 乙 G
Z 乙 H
Z C 我
字段_1 字段_2
一个 C
Z 乙

如果我将它们拉入 Access 中的“查询设计”窗口并使用通用名称连接两个字段,我可以轻松拉出一个查询,显示“AC”和“ZB”的记录(总共四个记录)。

这是我想要完成的:假设在第二个表中,在第二条记录中,Field_2 是 Null/Blank。我想找到一种方法来将此 Null 字段解释为所有可能的值(考虑其他联接)。现在,如果我删除该字段中的值并运行相同的查询,我显然只会看到“A”记录。可以预见的是,使其成为任一方向的外部连接都不会给我想要的结果。

我想,另一种思考方式是我希望它更像是一个带有“和”和“或”逻辑的过滤器。这在 Access 中是否可能/容易做到?尝试使用 Excel 中的高级筛选器执行此操作会更好吗?

这个例子显然是简化的:在我的行业中,它可能会更复杂。高级过滤器可以很好地处理这样的小问题,但我的“不完整数据”表(此处由 Table_2 表示)可能有数万条记录,而我需要用来扩展它的“完整”数据集有数百条数千条记录(至少如果我要提取一个以表格格式放置所有显着数据的查询)。

如果这里有人以前遇到过这个问题并且有现成的解决方案,我会很高兴。我感谢任何和所有的帮助。

microsoft-excel microsoft-access
  • 1 个回答
  • 32 Views
Martin Hope
Paul
Asked: 2021-07-10 14:34:19 +0800 CST

禁用 Ms Access 中的“新建”框以支持正常对话框

  • 6

这些天,当我启动 Microsoft Access 时,我看到了一个非常糟糕的新数据库对话框,我必须单击另一个按钮才能浏览到我想要的位置。

由于我总是在不同的位置创建数据库,而不仅仅是微软希望我在其中创建数据库的那个,我怎样才能简单地削减 $*!#& 步骤?...

这些天我讨厌访问! GRRRRR!

我确实看到了一个名为 Backstage 的选项,但我禁用了它,但这不起作用......

不显示后台

office365 microsoft-access
  • 1 个回答
  • 47 Views
Martin Hope
Naz
Asked: 2021-01-10 07:19:45 +0800 CST

将 MS Access 从 PC 移动到另一台

  • 7

我在 PC 上安装了 MS Access,在重建过程中需要将它安装在不同的硬盘驱动器上,我有它所在的 CD,但不再有 CD 驱动器。有没有办法将 MS Access 文件复制到闪存驱动器并将它们复制到新驱动器。我已经尝试过了,但只是收到一堆关于缺少安装文件和需要 CD 的消息。

microsoft-access
  • 1 个回答
  • 59 Views
Martin Hope
bob.sacamento
Asked: 2020-12-18 08:33:12 +0800 CST

需要在 MS Acess 查询字段中使用逻辑运算

  • 5

假设我在 MS Access 中有一个表。它有一个文本字段“大小”。size 只能取几个值:“tiny”、“small”、“medium”、“large”、“jumbo”。我想用一个字段创建一个查询,该字段将根据表的大小字段计算一个数字。大小为“小”时,新字段应为 1、“小”2、“中”3 等。我想我需要使用逻辑运算来做到这一点,但是,在查看了我可以找到的材料之后,我还是不知道怎么办。有人知道怎么做吗?

microsoft-access query
  • 1 个回答
  • 16 Views
Martin Hope
Jazzyk
Asked: 2020-10-16 05:39:06 +0800 CST

MS Access如何显示字段中为“XYZ”的记录

  • 5

我有一个查询来显示我的记录。我希望它在字段中显示所有记录(让我们将其命名为字母),是“XYZ”。问题是有些条目以 XYZ 开头,有些在中间,有些在末尾。我尝试使用 InStr 和 Like,但它们并没有真正的帮助。

也许你有一些想法?

database microsoft-access
  • 1 个回答
  • 64 Views
Martin Hope
elliott94
Asked: 2020-09-28 00:20:13 +0800 CST

Microsoft Access 运行时的安装位置是什么?

  • 6

我在网上看到了一些参考资料,它们建议安装 Access Runtime 的不同位置 - 但没有给出每个版本的安装位置的明确答案。我对 2000 年至今的版本(Microsoft 365 Access Runtime)感兴趣。

windows microsoft-access
  • 1 个回答
  • 9177 Views
Martin Hope
person1234568475
Asked: 2020-07-07 06:27:56 +0800 CST

Microsoft Access:查询以删除重复数据但保留最新数据

  • 6

令我惊讶的是,我一直无法为我的具体案例找到这个问题的答案。

我有一张带有 ID 和日期的表格,我想只保留一个 ID,这是最近的一个。

例如:

ID | Date  
1    July 6  
2    July 2  
1    July 4  
2    July 5  

变成:

ID | Date  
1    July 6  
2    July 5  

我已经找到了针对使用不同版本 SQL 的不同数据库应用程序的解决方案,但我无法弄清楚任何事情。任何帮助是极大的赞赏!

database microsoft-access
  • 1 个回答
  • 1002 Views
Martin Hope
dutsnekcirf
Asked: 2020-07-01 11:40:15 +0800 CST

在 MS Access 中使用 VBA 将附件从一个记录集中的记录复制到另一个记录集中

  • 5

我几乎已经完成了这项工作。我在想我真的只需要另一双眼睛。我认为我的问题只是一个简单的编程结构问题。循环过多或以错误的顺序打开/关闭记录集。

我正在尝试将记录中包含的所有附件文件从一个 dao 记录集中复制到另一个 dao 记录集中的相应记录中。两个记录集都从同一个表中提取数据。第一个记录集 (rstOld) 包含具有去年日期值的记录,这些记录可以包含任意数量的附件。第二个记录集 (rstNew) 包含具有今年日期值的记录,并且这些记录不包含任何附件。

为此,我开始循环遍历 rstNew 中的每条记录。对于 rstNew 中的每条记录,我将收集 Name 字段的值,然后开始第二个循环。第二个循环将在 rstOld 中找到具有匹配名称字段的记录。从那里我只需将所有附件从 rstOld 中的记录复制到 rstNew 中的记录。

奇怪的是,它会在 rstNew 中找到匹配项的第一条记录上正常工作。之后,它不再适用于任何后续记录。

到目前为止,这是我的代码:

    Dim db As Database
    Dim strOldSQL As String
    Dim rstOld As DAO.Recordset2
    Dim strNewSQL As String
    Dim rstNew As DAO.Recordset2
    Dim rstOldAttachments As DAO.Recordset2
    Dim rstNewAttachments As DAO.Recordset2
    Dim strCurrentSiteName As String
    Dim strOldSiteName As String
Set db = CurrentDb()

    'First let's open a recordset that contains all of the records from this year.
    strNewSQL = "SELECT tblAuditForms.SiteName, tblAuditForms.Attachments, tblAuditForms.AuditYear FROM tblAuditForms WHERE AuditYear = #" & Format(cboMyDate, "mm/dd/yyyy") & "# ORDER By tblAuditForms.SiteName;"
    Set rstNew = db.OpenRecordset(strNewSQL)
    rstNew.MoveFirst
    rstNew.Edit
    
    Do While Not rstNew.EOF 'Now we need to loop through these records.
    
        strCurrentSiteName = rstNew.Fields("SiteName").Value 'Get the name of the site for the current record that we're on. We'll use this to compare with the sites in the previous audit.
                    
        'Now let's open a recordset that contains all records from the previous audit.
        strOldSQL = "SELECT tblAuditForms.SiteName, tblAuditForms.Attachments, Year([AuditYear]) FROM tblAuditForms WHERE Year([AuditYear]) = " & Me.cboPreviousDate & " ORDER BY tblAuditForms.SiteName;"
        Set rstOld = db.OpenRecordset(strOldSQL)
        rstOld.MoveFirst
        
        Do While Not rstOld.EOF 'Loop through each of the records from the previous audit until we find a record that matches the current site name.
        
            strOldSiteName = rstOld.Fields("SiteName").Value
        
            If strCurrentSiteName = strOldSiteName Then 'If this is true, then we've found a record from the previous audit that matches the one from our current audit.
                'Now it's just a matter of copying the attachments from the old record into the new one.  Working with attachments is annoying though.
                
                'This next block should loop through the attachments (if any) in the old record and copy them into the new record.
                Set rstOldAttachments = rstOld.Fields("Attachments").Value
                rstOldAttachments.MoveFirst
                
                Set rstNewAttachments = rstNew.Fields("Attachments").Value

                Do While Not rstOldAttachments.EOF
                    
                    rstNewAttachments.AddNew
                    rstNewAttachments.Fields("FileData").Value = rstOldAttachments.Fields("FileData").Value
                    rstNewAttachments.Fields("FileName").Value = rstOldAttachments.Fields("FileName").Value
                    rstNewAttachments.Fields("FileType").Value = rstOldAttachments.Fields("FileType").Value
                    rstNewAttachments.Update
                
                    rstOldAttachments.MoveNext
                Loop
                
                'Now that we've found the site from the previous audit and copied its attachments into the new record we can close the old recordset and move onto the next site in the current audit.
                rstOldAttachments.Close
                rstNewAttachments.Close
                Exit Do
            
            End If
                        
            rstOld.MoveNext
        Loop
         
        rstOld.Close
        rstNew.Update
        rstNew.MoveNext
    Loop
        
    'If we've gotten this far then we've looped through all of the new records that we just created from the weekly staffing workbook.
    rstNew.Close
    
    

就像我之前说的,这段代码将在通过 rstNew 记录集的第一个循环上工作,但在任何后续循环上都不起作用。我是否过早地摆脱了循环?或过早关闭记录集?

vba microsoft-access
  • 1 个回答
  • 776 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve