2012-10-24 91 views
2

我必须做一个审计跟踪,可以跟踪INSERT INTO后面的字段,但是,我无法获取“值”中的表达式表示要进入字段的任何变量,只有VALUES中的表达式。例如,两个条目与数值给我数值,别人给我一个字符串,例如Form.RecordSource = clientNameMS-access INSERT INTO变量

db.Execute "INSERT INTO tblAudit ([RecordID], [AuditWho], [AuditWhen], [AuditWhat],  [AuditFrom], [AuditTo]) VALUES ('1', '2', 'Now()', 'Form.RecordSource = clientName' , ' Me.ClientName.Value ', ' Me.clientNameTextBox.Value ')" 

回答

1

在你需要做这样的事情最低:

Dim SQL as string 

SQL = "INSERT INTO tblAudit ([RecordID], [AuditWho], [AuditWhen], [AuditWhat],  [AuditFrom], [AuditTo]) VALUES ('1', '2','" & Now() & "', 'ClientName' , '" & Me.ClientName.Value & "', '" & Me.clientNameTextBox.Value & "')" 

db.Execute SQL 

为了更“稳健”你应该AuditFromAuditTo值声明变量,并验证输入的数据是“OK”,试图执行插入之前:

Dim SQL as string 
dim strAuditFrom as string 
Dim strAuditTo As String 

strAuditFrom = Me.ClientName.Value & "" 
strAuditTo = Me.ClientNameTextBox.Value & "" 

if strAuditTo = vbNullString then 
    'Alert the user or throw an error perhaps? 
end if 

sql = "INSERT INTO tblAudit ([RecordID], [AuditWho], [AuditWhen], [AuditWhat], [AuditFrom], [AuditTo]) VALUES ('1', '2','" & Now() & "', 'ClientName' , '" &strAuditFrom & "', '" & strAuditTo & "')" 

db.Execute sql 
+0

提姆,你忘了为Now()函数转义字符串。 – KFleschner

+0

非常感谢,这帮了一大笔钱。 –

+0

@KFleschner谢谢,相应地编辑了答案。 –

1

您正在使用单个qoutes定义要插入的文本。要从控件获取一个值并将它包含在查询中,您需要使用双重qoute转义字符串,使用&符号化字符串,查找控件的值,然后使用ampsand和double qoute继续该字符串。例如:

db.Execute "INSERT INTO tblOne (Field1, Field2) VALUES ('literal text','" & ctlSomething & "')"