【问题标题】:Cannot remove records using MS Access frontend无法使用 MS Access 前端删除记录
【发布时间】:2018-04-12 18:07:49
【问题描述】:

我遇到了通过 MS Access 前端删除记录的问题。在对话框表单上,我放置了按钮,并在 onclick 事件中创建了一个带有 VBA 命令RunCommand acCmdDeleteRecord 的子程序。

执行似乎继续进行,我收到有关从数据库中删除单个记录的警告,并且在我点击 OK 并刷新后没有任何反应。事实上删除的记录仍然存在。

此外,我尝试将其从 MS Access 查询(表单所基于)中删除,但仍然没有运气 - 再次出现确认窗口,单击“确定”按钮并刷新记录后仍保留在表中。

我已经成功地直接从 rdbms 中删除了记录(Postgresql 9,4 ODBC 通过连接字符串和链接表连接到 MS Access 前端)。 Postgresql 日志中没有其他信息。似乎一切都应该工作,但事实并非如此。并且没有任何错误消息。请您给我一些建议吗?

这是 SQL 查询:

SELECT inventory.inventory_id, inventory.serial_number, inventory.registry_number,
       inventory.year_of_manufacture, inventory.description, 
       inventory.assortment_id_assortment, inventory.personnel_id_personnel,
       inventory.classification_id_classification, inventory.case_series, 
       inventory.case_id, inventory.comments, inventory.mac_address, 
       assortment.assortment_id, assortment.vendor, assortment.model, 
       assortment.type_id_dict_assortment_types, assortment.jim, 
       dict_assortment_types.type_id, dict_assortment_types.type_name, 
       personnel.personnel_id, personnel.first_name, personnel.last_name, 
       personnel.operational_id, personnel.seal_number, 
       personnel.military_grade, dict_classifications.classification_id, 
       dict_classifications.classification_abbr, 
       dict_classifications.classification_name, carrying_cases.description, 
       carrying_cases.location, inventory_comments.comment_id, 
       inventory_comments.comment, inventory_comments.inventory_id_inventory, 
       inventory.sdip_27, inventory.seal_number, inventory.seal_number, 
       inventory.description
FROM inventory_comments RIGHT JOIN (carrying_cases 
RIGHT JOIN ((((inventory INNER JOIN assortment 
       ON inventory.assortment_id_assortment = assortment.assortment_id) 
LEFT JOIN dict_assortment_types 
       ON assortment.type_id_dict_assortment_types = dict_assortment_types.type_id) 
LEFT JOIN personnel ON inventory.personnel_id_personnel = personnel.personnel_id) 
LEFT JOIN dict_classifications ON inventory.classification_id_classification
         = dict_classifications.classification_id) 
      ON (carrying_cases.case_id = inventory.case_id) 
     AND (carrying_cases.case_series = inventory.case_series)) 
      ON inventory_comments.inventory_id_inventory = inventory.inventory_id
ORDER BY inventory.inventory_id;

谢谢你 抽烟。

【问题讨论】:

  • 那么,你可以通过删除链接表中的记录来删除它,但不能在基于它的查询中删除它?还是直接来自 rdbms 在 Postgresql 本身?
  • 好吧,我刚刚尝试使用链接表删除它 - 成功。早些时候我已经设法使用 pgAdminIII 做到这一点。我不能做的是使用带有此查询作为数据源附加的查询或表单。越来越接近感谢 Ypur 的问题... :)
  • 啊,当然是奇怪的行为。不过,我无法用提供的信息复制它。请提供查询。您可以尝试将表单直接绑定到表格。
  • 啊,我很惊讶 Access 允许您删除具有这么多连接的查询记录(并且不返回 Query not updateable)。您可能最好使用删除查询或记录集手动删除记录。即使我不知道应该从哪个表中删除一条记录以查看该查询(我猜是 inventory_cmets,但它也可能是其他表之一)。
  • 嗯,这是一个主观问题。级联查询可能会根据情况增加或降低复杂性。我通常尝试将表单直接绑定到表,而不使用任何查询,并使用子表单和域聚合来显示相关信息,但这可能并不适合所有数据库。

标签: sql vba postgresql ms-access odbc


【解决方案1】:

只是为了结束这个问题。

我发现使用带有 DoCmd.RunSql“DELETE * FROM table WHERE 条件”的删除查询最可靠。这种方法可以更好地控制所发生的事情并清除代码(除非您讨厌 SQL)。

感谢大家的建议

吸烟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多