- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MS-ACCESS 数据库。从项目中我使用并提出了一些其他问题表 NOEUDS 和 INFRA(应该更新):
表格基础设施:
RECNO - NOEUD - SECURISE
00000008 C002 F
00000005 C009 F
00000001 C035 F
00000002 C001 F
00000003 C036 F
00000006 C012 F
00000007 C013 F
表格节点:
NOEUD TYPE_MAT N_AMONT
C021 COF 100
C022 COF 229
C023 COF 130
C002 COF 111
我想创建一个查询来检查 NOEUDS INFRA 表中缺少的节点 C*,如果没有,则应插入一个新节点。问题是作为控件工作的 RECNO 字段不能复制(不是主键,因为所有数据库只是控制它的程序的存储库)。所有字段都是文本,因此 RECNO 是使用十六进制数字的连续计数,如图所示。
我使用查询来选择:
SELECT (SELECT MAX(CINT(INFRA.RECNO))+1 AS N FROM INFRA),
NOEUDS.NOEUD, "F" AS Expr2
FROM NOEUDS
WHERE (((NOEUDS.NOEUD) Like "C*"
And (NOEUDS.NOEUD) Not In (SELECT NOEUD FROM INFRA)));
结果是:
9 C021 F
9 C022 F
9 C023 F
应该是:
9 C021 F
A C022 F
B C023 F
我在这方面需要一些帮助,以便我可以在 00000019 传递到 0000001A 等之后以十六进制计数插入正确的 RECNO。
提前致谢
更新 1:
我们使用的程序使用 Access 数据库作为存储。当我使用程序添加 noeud 时,我必须使用 map 所需的菜单和构建信息插入更多信息。问题是很多信息是多余的,程序不能自动处理。我正在尝试工作并使用查询插入可能的信息。
每次我在 noeuds 表中插入一个 noeud 时,都需要在 INFRA 表中插入一行,仅包含 RECNO(从最后一个开始的顺序计数)、NOEUD 和一些其他信息(以完成 autocad 表标记)。由于我有数百台 Cxxx、Bxxx、Pxxx、Gxxx 设备,我可以为每个项目节省一些小时的无聊工作。
我需要帮助计算为将插入 INFRA 表中的 NOEUDS 表中找到的每个 NOEUD 添加 RECNO 的顺序方法。
更新 2:
我正在手动插入每个 noeud。是否有可能以一种方式加入,它从我想插入的 noeuds 中获取列表,而不是逐一执行它获取列表并按顺序执行?
这两个查询是:
我想在 INFRA 表中添加的装备:
选择 NOEUDS.NOEUD来自诺伊兹WHERE (((NOEUDS.NOEUD) Like "C*"And (NOEUDS.NOEUD) Not In (SELECT NOEUD FROM INFRA)));
手动插入:
插入基础设施(recno、NOEUD、SECURISE)SELECT (SELECT Right(String(8, "0") & Hex(Max(Val("&H"& RECNO)) + 1), 8) AS N FROM INFRA), NOEUDS.NOEUD, "F"AS Expr2来自诺伊兹WHERE (NOEUDS.NOEUD=[INSERT CHAMBRE?]);
最佳答案
我认为 VBA 解决方案应该比尝试仅使用 SQL 来执行您想要的操作更好。如果您没有太多 VBA 经验,它仍然可以实现,因为所需的 VBA 应该是相当基础的。查看此代码大纲是否足以让您入门。
Public Sub AddToInfra()
Const cstrQuery As String = "qryUnmatchedNoeuds" ' Note 1 '
Dim db As DAO.Database ' Note 2 '
Dim fld As DAO.Field
Dim rsFrom As DAO.Recordset
Dim rsTo As DAO.Recordset
Set db = CurrentDb
Set rsFrom = db.OpenRecordset(cstrQuery, dbOpenSnapshot)
Set rsTo = db.OpenRecordset("infra", dbOpenTable, dbAppendOnly)
Do While Not rsFrom.EOF
rsTo.AddNew
For Each fld In rsFrom.Fields ' Note 3 '
If Not fld.Name = "RECNO" Then
rsTo.Fields(fld.Name).Value = fld.Value
End If
Next fld
rsTo!RECNO = Next_InfraRecno ' Note 4 '
rsTo!SECURISE = "F" ' Note 5 '
rsTo.Update
rsFrom.MoveNext
Loop
rsTo.Close
rsFrom.Close
Set fld = Nothing
Set rsFrom = Nothing
Set rsTo = Nothing
Set db = Nothing
End Sub
注意事项:
DAO.Database
需要对 Microsoft DAO 对象库的引用。如果您的 Access 版本是 2000 或 Access XP,您可能需要设置该引用(从 VBE 主菜单,工具 -> 引用)。rsTo!YourFieldNameHere.Value = rsTo!YourFieldNameHere.Value
如果你愿意的话。)Next_InfraRecno()
函数以返回下一个 RECNO
值。将我们之前使用的方法转换为一个函数。如果您遇到麻烦,请发布一个新问题……向我们展示您的代码、错误消息和触发错误的行(如果有),以及我们需要知道的任何其他信息。 :-)SECURISE = "F"
。在您提到的评论中“使用字段 ANCIEN 存储计数”。我不知道这涉及到什么,希望无论是什么,您都可以将它集成到此代码大纲中。如果没有,对不起。 :-(
这是我的 qryUnmatchedNoeuds
查询的 SQL:
SELECT n.DELETED, n.NOEUD
FROM
noeuds AS n
LEFT JOIN infra AS i
ON n.NOEUD = i.NOEUD
WHERE
(((n.NOEUD) Like "c*")
AND ((i.NOEUD) Is Null));
关于sql - INSERT INTO 增量控制字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206372/
我是一名优秀的程序员,十分优秀!