sql / access - 插入X不存在的地方

时间:2018-06-08 04:16:41

标签: sql ms-access insert-into

首先,请耐心等待我没有数据库经验,并且在访问过程中承担了一些数据输入的任务,这非常繁琐,因此我开始编写按钮以使我的生活更轻松。

我想在FINLDATA MODELS中使用FINLDATA_ID和MODEL从表格(F_EDIT_ENTRIES_MODEL_SUB)中插入一行,其中MODEL不存在。

Form

FINLDATA - what populates top part of form

FINLDATA MODELS - populates sub form (where times are assigned)

T_MODEL_LIST

对于每个OPTION,我们为当前MODELS分配BASE TIMES。传统上,我面前的人在表格中复制和粘贴时间(荒谬)。我编写了一个按钮来更新所有模型的时间,但是如果模型没有该ID的先前条目,则这不起作用。该表单包含当前在T_MODEL_LIST中找到的所有模型的列表。由于FINLDATA模型中没有记录,有许多模型没有时间附加的模型实例

给定选项的每个进程都有唯一的FINLDATA_ID,所有模型的FINLDATA_ID都相同。 FINLDATA MODELS是我们更新时间的地方。每个记录对每个模型都有自己唯一的FINLDATA_MODEL_ID(参见T_MODEL_LIST)。 FINLDATA_MODEL_ID只是一个数字,例如,如果我要在表单上添加一个以前没有时间进行该过程的模型,那么它将是FINLDATA MODELS +1中的记录总数。

我想编写另一个按钮,为每个模型添加一条记录到FINLDATA MODELS,没有时间。

逻辑如下:

插入FINLDATA模型 FORM的FINLDATA ID(Me.FINLDATA_ID.Value)&来自T_MODEL_LIST的模型,它在FINLDATA模型中尚未出现

E.g。对于特定的FINLDATA_ID,如果FINLDATA MODELS中不存在来自T_MODEL_LIST的MODEL。插入FINLDATA模型(FINLDATA_ID,没有记录的模型)

希望这可以解决问题。子表单列出左侧的所有模型,如果有帮助,则由T_MODEL_LIST填充。

用于以子表单填充模型列表的查询的SQL

SELECT T_MODELS_LIST.MODEL AS MASTER_MODEL,T_MODELS_LIST.MODEL_NAME,models.FINLDATA_MODEL_ID,models.FINLDATA_ID,models.MODEL,models。[BASE TIME],models.VERIFICATION,models.COMMENTS,models。[ESTABLISHMENT TIME],models。 STATION

FROM T_MODELS_LIST LEFT JOIN(SELECT * FROM [FINLDATA MODELS] WHERE FINLDATA_ID = Forms![F_EDIT_ENTRIES]![FINLDATA_ID])AS模型ON T_MODELS_LIST.MODEL = models.MODEL

WHERE(((T_MODELS_LIST.REMOVED)=否)) 订单T_MODELS_LIST.MODEL;

谢谢大家。

2 个答案:

答案 0 :(得分:0)

考虑使用域聚合DCount来计算 models 表中的记录,并决定根据计数结果运行追加或更新查询。另外,请考虑使用QueryDefs的参数化查询,事先保存已准备好的查询,尤其是在您收到用户输入后。

SQL (以下保存为存储的查询)

更新

CartItem

APPEND

PARAMETERS [BaseTimeParam] Long, [IDParam] Long; 
UPDATE [FINLDATA MODELS]
SET [BASE TIME] = [BaseTimeParam] _
WHERE [FINLDATA MODELS].FINLDATA_ID = [IDParam]

<强> VBA

PARAMETERS [IDParam] Long, [ModelParam] Long, [BaseTimeParam] Long; 
INSERT INTO [FINLDATA MODELS] (FINLDATA_ID, MODEL, [BASE TIME])
VALUES ([IDParam], [ModelParam], [BaseTimeParam]);

答案 1 :(得分:0)

' Define variables
Dim IDToUpdate As String
Dim m_strSQL As String

' Grab ID
IDToUpdate = Me.FINLDATA_ID.Value

' INSERT ID and missing model model numbers - WORKS, doesn't skip 'Removed' models
m_strSQL = "INSERT INTO [FINLDATA MODELS] (FINLDATA_ID, MODEL)" & _
            "SELECT '" & IDToUpdate & "', T_MODELS_LIST.MODEL FROM T_MODELS_LIST WHERE NOT EXISTS(SELECT MODEL FROM [FINLDATA MODELS] WHERE [FINLDATA MODELS].MODEL = T_MODELS_LIST.MODEL)"

RunSQL m_strSQL

' Refresh the form display
Me.F_EDIT_ENTRIES_MODEL_SUB.Form.Requery

这就是我最终让它工作的原因,谢谢大家!