Access 2010+;VBA:参数化追加查询–;一个作品,两个唐’;t、 但没有错误消息
这件事让我揪了很久的头发,但我仍然找不到解决办法。我退休前的15年都在Access&VBA工作,所以我的自尊心受到的伤害比头发还大 项目: 一个数据库,用于记录每个艺术家姓名、坐者姓名、绘制日期(已知时)、内容简要细节(可能没有)和肖像位置(如果已知)的肖像。除了肖像细节表之外,还有艺术家信息表和坐者信息表(加上各种查找和其他与此问题无关的表) 我的客户非常希望输入数据,因此她使用艺术家表单(第一个设计的表单)上的备注字段输入该艺术家绘制的肖像的细节——遵循我设定的严格模式(并在尝试处理之前检查)。这不是问题所在——我的解析例程正确地识别了创建新的sitter记录和肖像记录所需处理的数据:我知道这是真的,因为我的代码到处都是显示VBA对数据解释的消息框(对于调试至关重要!) 解析+过帐的过程简要如下(备注字段分配给一个变量,然后一次解析一个字符):Access 2010+;VBA:参数化追加查询–;一个作品,两个唐’;t、 但没有错误消息,vba,ms-access,parameterized-query,Vba,Ms Access,Parameterized Query,这件事让我揪了很久的头发,但我仍然找不到解决办法。我退休前的15年都在Access&VBA工作,所以我的自尊心受到的伤害比头发还大 项目: 一个数据库,用于记录每个艺术家姓名、坐者姓名、绘制日期(已知时)、内容简要细节(可能没有)和肖像位置(如果已知)的肖像。除了肖像细节表之外,还有艺术家信息表和坐者信息表(加上各种查找和其他与此问题无关的表) 我的客户非常希望输入数据,因此她使用艺术家表单(第一个设计的表单)上的备注字段输入该艺术家绘制的肖像的细节——遵循我设定的严格模式(并在尝试处理之前检查
Private Sub Command77_Click()
On Error GoTo myError
Dim myID As Long 'the ID for the painter
Dim myName As String 'the name of the sitter
Dim myDesc As String 'any text description **could include part-dates or other digits
Dim myLoc As String 'the location code
Dim myDate As Integer 'myNum converted from string if it's 4 digits
Dim Errline As Integer ‘used so error messages get me close to the problem
'**** Now the database stuff
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim mySitterID As Long, myNewRows As Integer
Dim qd1 As DAO.QueryDef, qd2 As DAO.QueryDef, qd3 As DAO.QueryDef
Dim par1 As DAO.Parameter, par2 As DAO.Parameter, par3 As DAO.Parameter, par4 As DAO.Parameter, par5 As DAO.Parameter, par6 As DAO.Parameter
'**** Set these once, and turn off in 'Leave'
Set db = CurrentDb()
Set qd1 = db.QueryDefs("qu_app_sitter")
Set qd2 = db.QueryDefs("qu_app_portrait")
Set qd3 = db.QueryDefs("qu_app_portrait_noyear")
2显示调用插入查询和前面消息框的例程
[根据缺少的信息,其中有9个类似但不完全相同]
MsgBox "Got name & location only" & vbCrLf & vbCrLf & "Sitter: " & myName & vbCrLf & "Location: " & myLoc, vbInformation, "LINE " & Errline
qd1.Parameters("par1").Value = myName
qd1.Execute
myNewRows = qd1.RecordsAffected
MsgBox myNewRows & " record added", vbInformation, "NEW SITTER"
myNewRows = 0
qd1.Close
Set rs = db.OpenRecordset("SELECT @@IDENTITY AS LastID;")
mySitterID = rs!lastid
qd3.Parameters("par2").Value = myID
qd3.Parameters("par3").Value = mySitterID
qd3.Parameters("par5").Value = myDesc
qd3.Parameters("par6").Value = myLoc
qd3.Execute
myNewRows = qd3.RecordsAffected
MsgBox myNewRows & " record added", vbInformation, "NEW PORTRAIT (year not known)"
myNewRows = 0
qd3.close
两个查询都应该插入1行-第一个总是插入,第二个总是报告插入了0行(实际上没有插入任何行)
我痛苦地意识到,这篇文章比这里的许多文章要长得多,但希望我已经给出了所需的所有信息。我快速查看了您的代码。我建议
Meir我快速查看了您的代码..我建议