8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

MS-Access 2016 查询字符串条件不匹配

Gleb Kiva 2月前

102 0

我已经使用 VB、VBA 和 Access 编程多年,但这对我来说还是个新手...我有两个表,它们的字段名称相同,属于短文本数据类型 (255)。所有其他属性...

我已经使用 VB、VBA 和 Access 编程多年,但这对我来说还是新鲜事……

我有两个表,它们的字段名称相同,都是短文本数据类型 (255)。所有其他属性都相同。一个表在此字段中具有不同的值,另一个表具有许多相同的值。当我使用此字段在查询中连接这两个表时,它不会返回所有匹配的行。例如:

SELECT tProjects.[Original Project]
   , tActivity.[Original Project]
FROM tProjects 
INNER JOIN tActivity ON tProjects.ID = tActivity.ProjectID
WHERE (((tProjects.[Original Project])="Mike Simpson:1967 Alfa Romeo Duetto Spider"));

我可以打开每个表并复制/粘贴上述条件中使用的字符串。两个表在 [Original Project] 字段中都有相同的字符串... \'Mike Simpson:1967 Alfa Romeo Duetto Spider\'。如果我从一个表复制并粘贴并仅在该表上使用此条件,它会返回值。但是,我在具有完全相同文本、文本长度和字段属性的另一个表上使用复制的值,它不会返回值。如果我打开第二个表并复制文本并将其用作针对第二个表的选择查询中的字符串条件,它会返回记录。

我还注意到一个奇怪的行为,即只有当字符串少于 23 个字符时,在字符串末尾使用 \'Like\' 和通配符才有效。

由于我正在导入文本文档并循环查找新项目,即 - 与现有项目不匹配,因此这突然弄乱了我的数据库。因此,我突然得到了重复的项目。

我尝试了前端和后端数据库的 R&C,甚至将表本地化。

任何帮助,将不胜感激。

谢谢。

我尝试了所有能想到的方法。

帖子版权声明 1、本帖标题:MS-Access 2016 查询字符串条件不匹配
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gleb Kiva在本站《ms-access》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 似乎是数据问题而不是代码问题,因此如果不查看实际数据,很难提出建议。我无法复制 23 个字符限制问题。可能会在允许附加文件的论坛上发帖并提供您的数据库以供分析。

  • 使用 MS Access 2019 部署我开发的 .accde 表单。它从托管在共享文件夹中并作为链接表导入的 .tab 文本文件中检查当前表单版本的值...

    使用 MS Access 2019 部署 我开发的 .accde

    托管在共享文件夹中并作为链接表导入数据库的 .tab 中检查当前表单版本的值

    中有效 .accdb ,但在 .accde 版本中会引发错误 3625:

    文本文件规范‘X’不存在...

    从文件读取数据的代码(位于模块内部):

    Public Function checkVer()
        Dim ind As Boolean
        ind = DLookup("[ACTIVE]", "Ver", "Ver = '9'")
        If Not ind Then
            MsgBox "This version is obsolete. You may get the latest version from the shared folder."
            Application.Quit acSaveNo
        End If
    End Function
    

    该函数的调用方式:

    Private Sub Form_Load()
        checkVer
    End Sub
    

    任何帮助都将不胜感激...

    我尝试从 MSYSImexSpecs 表中删除文件规范记录,删除链接表并再次将文件重新导入为链接表,压缩和修复,进行完整反编译并成功测试了表单的 .accdb 版本中的功能。

  • 我们的 Intranet(Windows Server 2019/IIS 10)正在使用一个简单的访问数据库。在 global.asa 中,我们连接到此数据库,因为它:\'strconn = \'DRIVER={Microsoft Access Driver (*.mdb, *.accd...

    我们的 Intranet(Windows Server 2019 / IIS 10)正在使用一个简单的访问数据库。在 global.asa 中,我们连接到此数据库,如下所示:

    \'strconn = \'DRIVER={Microsoft Access 驱动程序 (*.mdb, *.accdb)};DBQ=C:\inetpub\intranet\data.mdb\'set conn = Server.CreateObject(\'ADODB.Connection\')conn.open strconn\'

    Windows 身份验证已启用

    当我使用管理员帐户连接到内联网时,它运行正常,当我使用用户帐户连接到内联网时,身份验证窗口打开;它失败,直到我使用管理员帐户登录

    奇怪的行为:如果我使用管理员帐户在 Intranet 上导航一次,则所有其他用户都可以在 Intranet 上导航(无论使用哪台计算机)!!!!

    导致此问题的行是 \'conn.open strconn\'

    我检查了数据库文件权限、ACEODBC.DLL 权限,尝试使用 ODBC 系统数据源,使用 processmonitor 检查是否可以看到 ACCESS DENIED,然后卸载/安装访问数据库引擎...

    想法:看起来管理员创建了一个文件,用户可以修改这个文件,这可以解释这种情况;因此,我检查了 c:\temp 、 c:\windows\temp 上的用户权限,因为 JETxxx.tmp 文件只创建了一次,并一直保留到空闲超时发生,这看起来像是我的问题。

    我的解决方法是将 IDLE 超时设置为零,然后使用管理员帐户打开一次 Intranet......这只有在我们不重新启动服务器或 IIS 时才有效,我们必须解决这个问题。

    我不知道如何检查哪一层失败了?

    我现在很绝望......它应该很简单......

    谢谢

  • Access 和 Excel 并非设计用于 IIS 环境。我在 2009 年就写过这篇文章

  • 我使用 DoCmd.TransferText acImportFixed 成功将文本从 iPad 通过 iCloud Drive 导入 Windows。单引号和双引号无法正确转换。例如:让我们尝试一个 \'typica...

    我成功使用 DoCmd.TransferText acImportFixed 通过 iCloud Drive 将文本从 iPad 导入 Windows。单引号和双引号无法正确转换。

    例子:

    让我们尝试一下 ' 和 \' 字符的 \'典型\' 用法

    转换为

    让我们尝试一下“典型”的“和”字符用法

    请注意,前导双引号和尾随双引号之间的转换是不同的,这导致导入后更正变得困难。

    我尝试过各种代码页 ID,但都没有成功。例如

    DoCmd.TransferText acImportFixed, "TestSpec", Txt_tableName, "C:\Users\josmi\iCloudDrive\Events\" & txt_fileName, 0, , 65001 
    

    即 utf_8。我尝试了无代码页和其他许多方法,但都没有成功。

  • 另外,我犯了一个错误。错误确实在 .accde 版本中弹出,与最初所述不同。抱歉。

  • Kip 2月前 0 只看Ta
    引用 8

    这表明 Web 服务器没有在 mdb 所在文件夹中创建文件的权限。

    为了让 Access 更新数据,mdb(或较新的 accDB)所在的文件夹将需要完全读/写权限,以及文件创建权限。如果用户(或 Web 服务器)打开文件,但无法创建所谓的锁定 \'.ldb\' 文件,则数据库将以只读方式打开。这解释了为什么谁先打开会影响站点的行为(由于对包含 mdb 文件的文件夹的权限有限,站点无法创建锁定文件)。因此,Web 服务器需要的不仅仅是对该文件夹中文件的读/写权限 - 它还需要文件创建权限,以使服务器能够创建 .ldb 锁定文件)。

    这表明该网站可能需要使用所谓的“模拟”。这意味着您可以考虑为该网站设置一个用户,该用户已被授予访问 mdb 所在文件夹的权限。

    (并且您没有提到 mdb 文件是否与 Web 服务器位于同一台服务器上)。

    当然,该服务器很可能不属于公司域的一部分。

    那么,通常情况下,不是向所有人开放文件夹权限吗?可以在 Web 服务器上创建一个用户,专门授予该文件夹的权限(您不希望 Web 服务器能够干扰您网络上的所有文件夹和计算机 - 这太危险了)。

    因此,可以在服务器上创建一个仅被授予该文件夹权限的用户。然后,您可以在应用程序池\“高级\”设置中使用新创建的用户:

    例如这里:

    enter image description here

    如上所述,Access 并不是非常适合在网站上使用,并且有如此多的基于免费“服务器”的系统,因此几乎不需要在网站上使用 mdb 文件进行数据库操作。

  • 你确定你的文本文件是 UTF8 吗?如果你在文本编辑器中打开它,它会检测出什么格式?

  • 如果您可以打开数据表,应该能够使用 DLookup 进行查询或打开记录集。我在该代码中没有看到任何导致指示错误的内容。但是,如果 Ver 是数字字段,请不要使用撇号分隔符。此外,ind 被声明为布尔值,因此不能保存 Null。如果 DLookup 未找到匹配项,它将返回 Null 并触发运行时错误。可以使用 Nz() 函数处理可能的 Null:

  • Kalo 2月前 0 只看Ta
    引用 11

    我刚刚发现,当域用户访问 Intranet 时,系统事件日志中会出现一条警告:“5009,WAS,为应用程序池“IntranetAPPPOOL”提供服务的进程意外终止。进程 ID 为“880”。进程退出代码为“0xffffffd”。

    出现此错误后,导航器会要求用户进行身份验证。

  • 引用 12

    我按照您的要求进行了测试 - 从表单 Load 事件调用函数。- accde 仍然有效。我确实删除了撇号分隔符,因为 Ver 字段设置为数字类型。

  • 我检查了域用户是否允许(完全控制)DB文件夹和Temp JET文件夹。

    我使用应用程序身份和进行了测试, Administrator 结果 AppPoolIdentity 相同。

    应用程序是经典的 ASP;它是一个本地网站,托管在 DC 上,使用用户的域凭据。它在 Windows Server 2009/IIS8 上运行良好。我无法更改 DB 内核,因为这个 DB 正在用于许多应用程序。

    我使用 Windows 身份验证,禁用匿名访问,并有两个提供程序:\'NTLM\' 和 \'Negotiate\';这些是默认选项 web.config .

    我刚刚发现,当域用户访问内联网时, connection.open 系统事件日志中会引发警告:

    5009,WAS,为应用程序池“IntranetAPPPOOL”提供服务的进程意外终止。进程 ID 为“880”。进程退出代码为“0xffffffd”。

    这意味着在下面的简单代码中 global.asa

    Sub Session_OnStart
        strconn = "ODBC;DSN=MyDBdns;DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}"
        set conn = Server.CreateObject("ADODB.Connection")
        conn.open strconn
    End sub
    

    Server.CreateObject("ADODB.Connection") 涉及;警告( broken_pipe )和身份验证请求来自 conn.open strconn .

  • 我正在设计一个篮球赛季统计数据库作为我的数据库管理课程的最终项目,并且在创建自定义关系时遇到了麻烦。更具体地说,我...

    我正在设计一个篮球赛季统计数据库作为数据库管理课程的期末项目,但在创建自定义关系时遇到了麻烦。更具体地说,我想编辑从 1 到客户编号的关系中的最小基数。

    例如,我的 PLAYER 和 TEAM 表之间的概念关系是多对一,但实际上,TEAM 至少要有 14 名球员才能被视为一支球队。因此,关系实际上是多(至少 14 名):一。

    另一个例子是我的 GAME 与 TEAM 关系:从概念上讲,它是多:多关系,但实际上它是多:最小(2)最大(2)关系(因为一场比赛至少有两支球队,最多有两支球队)。

    有没有办法在 Access 中编程这些最小值/最大值?任何帮助都非常感谢

    目前,我只有一个交集表来处理这些关系,但它们并没有强制执行我需要的最低要求。我没有尝试太多,因为坦率地说,我不知道该去哪里找。

  • 我敢打赌,您的 \'TestSpec\' 导入规范已将 \'Code Page:\' 设置为 \'Western European (Windows)\',并且该值优先于

  • 这似乎不是一个解决方案,而是一个您为隔离问题而采取的进一步故障排除步骤的列表。这很有用。但它应该是对您原始问题的编辑,而不是作为答案发布的。照这样说,它会让社区的普通成员认为您已经回答了您的问题,不需要进一步的帮助。

  • 您似乎搞混了。您有一支球队,有多名球员(一对多),而您有一场比赛,有两支球队(一对多)。您试图反向查看这些关系。

  • Snak 2月前 0 只看Ta
    引用 18

    Access 对 UTF-8 的支持一直不太好,至少上次我尝试使用时是这样。我会先转换为 UTF-16,然后再导入。

  • Shad 2月前 0 只看Ta
    引用 19

    有一个包含 100 个表的 .accdb(Microsoft Office Access)文件,我创建了一个从 Ajax 请求上传的文件中读取一个表的函数。它运行良好,我想更新它以读取所有

    有一个包含 100 个表的 .accdb(Microsoft Office Access)文件,我创建了一个从 Ajax Request 上传的文件中读取一个表的函数。它运行良好,我想更新它以读取所有表而不指定表名(如模块)。我三周前才开始学习 Java 编程,但找不到正确的解决方案。你能帮帮我吗?

    后端

        @PostMapping("/upload")
        @ResponseBody
        public String upload(@RequestParam("file") MultipartFile file) {
        {
            try {
                String url = "jdbc:ucanaccess://" + tempFile.getAbsolutePath();
                Connection conn = DriverManager.getConnection(url);
    
                // Example: Querying data from a table
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM Car_Model_List");
                ResultSetMetaData rsmd = rs.getMetaData();
                int columnsNumber = rsmd.getColumnCount();
                DatabaseMetaData metaData = conn.getMetaData();
                ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
    
                // Get data rows
                while (rs.next()) {
                    Map<String, Object> row = new HashMap<>();
                    for (int i = 1; i <= columnsNumber; i++) {
                        String columnName = rsmd.getColumnName(i);
                        Object value = rs.getObject(i);
                        row.put(columnName, value);
     
                    }
                    resultList.add(row);
                }
    
                conn.close();
            } catch (IOException | SQLException e) {
                e.printStackTrace();
                // You may want to handle the exception more gracefully here
            }
            result.put("content", resultList);
    
            return result;
        }
    

    Ajax 请求

                        $.ajax({
                            url: '/data_visualization/upload',
                            type: 'POST',
                            processData: false,
                            contentType: false,
                            data: formData,
                            success: function (res) {
                                console.log(res, typeof res)
                                if (typeof res === "object") {
                                    toastr.success("All data has been fetched successfully!", "Success")
                                    let dataArr = res["content"];
                                    let table = $('#kt_table').DataTable({ data: dataArr, ... });
                                }
                                else toastr.error("Something went wrong!");
                            },
                            error: function (err) {
                                console.log(err);
                                toastr.error("Failed!");
                            }
                        })
    
  • 引用 20

    我很感谢你的评论,但我并不认为我感到困惑。我确实有一支球队的多名球员,但你只谈论一个球队实例。会有很多球队实例,因为一个赛季中有很多球队比赛,而每个球队实例中都会有很多球员。但无论如何,这个问题是在问如何在 Microsoft Access 中强制执行最低限制,以便“球队”在没有至少 14 名球员的情况下不能存在。如果你能提供帮助,我将不胜感激。

返回
作者最近主题: