从Access表单写入数据库表

时间:2019-06-10 19:32:08

标签: sql ms-access access-vba

我正在尝试从Access表单写入可编辑的数据库表,并且不断收到语法错误。

该表大约有30列,但我只希望记录填充其中的8列:( <div class="modal-header" style="border-bottom: 0 none"> <button type="button" class="close" aria-label="Close" (click)="activeModal.dismiss('Cross click')"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <img [src]="FLUENCE_LOGO_GREEN" alt="Fluent Home" height="30px" style="margin-left: 2px"/> <form [formGroup]="fluenceLoginForm" (ngSubmit)="onSubmit()"> <h6 style="margin-left: 2px; margin-top: 10px"> Sign in </h6> <div class="group"> <input ngbAutofocus type="text" formControlName="username" required="required"> <label>Username</label><span class="highlight"></span><span class="bar"></span> <div *ngIf="submitted && fluenceLoginForm.controls.username.errors" class="error"> <div style="font-size: 10px; color: red" *ngIf="fluenceLoginForm.controls.username.errors.required"> <i class="fas fa-exclamation-circle"></i> Username is required. </div> <div style="font-size: 10px; color: red" *ngIf="fluenceLoginForm.controls.username.errors.minlength"> <i class="fas fa-exclamation-circle"></i> Username must be at least 3 characters. </div> </div> <div style="font-size: 10px; color: red" *ngIf="isWrongCredentials"> <i class="fas fa-exclamation-circle"></i> Incorrect username or password. </div> </div> <div class="group"> <input type="password" formControlName="password" required="required"> <label>Password</label><span class="highlight"></span><span class="bar"></span> <div *ngIf="submitted && fluenceLoginForm.controls.password.errors" class="error"> <div style="font-size: 10px; color: red" *ngIf="fluenceLoginForm.controls.password.errors.required"> <i class="fas fa-exclamation-circle"></i> Password is required. </div> <div style="font-size: 10px; color: red" *ngIf="fluenceLoginForm.controls.password.errors.minlength"> <i class="fas fa-exclamation-circle"></i> Password must be at least 5 characters. </div> </div> </div> <button type="submit" class="btn btn-primary btn-sm" style="width: 186px; margin-bottom: 10px"><b>SIGN IN</b></button> <br> <p style="font-size: 11px; margin-bottom: 30px"> <a href="#"> Forgot username </a> - <a href="#"> Forgot password </a> </p> <p style="font-size: 11px"> New to Fluence? <a [routerLink]="" (click)="showSignupModal()" style="font-weight: bold"> SIGN UP </a> </p> <div style="margin-bottom: 22px"></div> </form> </div> Job #Job NameDate,{{1 }},SuperintendentHauling VendorMaterial)。

该表单由以下八个字段组成:

  • LTC
  • Loads
  • ReportingCOM_Job
  • ReportingBox_JobName
  • ReportingBox_Date
  • ReportingCom_SI
  • ReportingCom_Vendor
  • ReportingCom_Mat

这些是查询,文本输入和硬编码值的下拉列表的组合,因此,简单的 Open Form> New Record 在这里不起作用;还是我不相信。

这甚至可能吗?

我正在使用以下行,但无法清除此错误。

ReportingCom_LoadType

此表单应使用这8个字段创建一个新记录,并将其余字段留空。

2 个答案:

答案 0 :(得分:1)

字段名称中带有空格或其他reserved names or symbols(例如Date)的字段将用方括号括起来,例如:

INSERT INTO MATLog([Job #], [Job Name] ... )

您还需要用单引号或双引号将VALUES列表中“文本”字段的值括起来,例如:

",'" & Me.ReportingCom_JobName & "',

但是,尽管上述操作应该允许您的查询成功执行,但是您当前使用用户输入的未经验证的表单值构造SQL语句的方法容易受到SQL injection的影响,并且在插入文本时也会遇到问题本身包含SQL字符串定界符(单引号/双引号)的值。

相反,更好的方法是parameterise your query

一个可能的示例如下:

With CurrentDb.CreateQueryDef("", _
    "insert into matlog ([Job #], [Job Name], [Date], Superintendent, [Hauling Vendor], Material, LTC, Loads) " & _
    "values (p1,p2,p3,p4,p5,p6,p7,p8)")
    .Parameters!p1 = Me.ReportingCOM_Job
    .Parameters!p2 = Me.ReportingBox_JobName
    .Parameters!p3 = Me.ReportingBox_Date
    .Parameters!p4 = Me.ReportingCom_SI
    .Parameters!p5 = Me.ReportingCom_Vendor
    .Parameters!p6 = Me.ReportingCom_Mat
    .Parameters!p7 = Me.ReportingCom_LoadType
    .Parameters!p8 = Me.ReportingBox_Loads
    .Execute
End With

答案 1 :(得分:1)

仅使用保存的查询并将其打开即可运行。这样做可以避免连接或标点的需要。

SQL (以下保存为存储查询,将myFormName替换为实际的表单名称)

DATEDIFF(CURDATE(), FROM_UNIXTIME(INV_DDATE))

VBA (无需关闭操作查询,使用警告以避免用户提示)

INSERT INTO MATLog([Job #], [Job Name], [Date], [Superintendent], 
                   [Hauling Vendor], [Material], [LTC], [Loads]) 
VALUES(Forms!myFormName!ReportingCOM_Job, Forms!myFormName!ReportingCom_JobName,
       Forms!myFormName!ReportingBox_Date, Forms!myFormName!ReportingCom_SI,
       Forms!myFormName!ReportingCom_Mat, Forms!myFormName!ReportingCom_Vendor, 
       Forms!myFormName!ReportingCom_LoadType, Forms!myFormName!ReportingBox_Loads)