我正在尝试从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">×</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 Name
,Date
,{{1 }},Superintendent
,Hauling Vendor
,Material
)。
该表单由以下八个字段组成:
LTC
Loads
ReportingCOM_Job
ReportingBox_JobName
ReportingBox_Date
ReportingCom_SI
ReportingCom_Vendor
ReportingCom_Mat
这些是查询,文本输入和硬编码值的下拉列表的组合,因此,简单的 Open Form> New Record 在这里不起作用;还是我不相信。
这甚至可能吗?
我正在使用以下行,但无法清除此错误。
ReportingCom_LoadType
此表单应使用这8个字段创建一个新记录,并将其余字段留空。
答案 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)