2016-12-30 92 views
1

下面的代码的开始应该获取窗体上的文本框中的文件名的BaseName并将它设置为一个字符串“tblnewbid”。 Debug.Print tblnew bid会正确打印正确的表名称。我验证了字符完全匹配,并且有一个与该名称匹配的实际表。字符串不工作作为表名称 - 访问VBA -

当我运行代码时出现错误:找不到表或约束。如果我手动将tblnew更改为实际的表名,代码运行良好。难道我需要将tblnewbid设置为字符串以外的其他字符?

Private Sub btnInsertRegions_Click() 

DoCmd.Hourglass True ' turn on Hourglass 


Dim db As Database 
Dim rs As Recordset 
Dim strSQL As String 
Dim FSO As New FileSystemObject 
Dim tblnewbid As String 

Set db = CurrentDb 
tblnewbid = FSO.GetBaseName(Me.txtFileName) 


Debug.Print tblnewbid 

db.Execute "ALTER TABLE tblnewbid ADD COLUMN O_StateRegion CHAR", dbFailOnError 
db.Execute "ALTER TABLE tblnewbid ADD COLUMN D_StateRegion CHAR", dbFailOnError 

Set rs = db.OpenRecordset("Select [OriginState] from [tblnewbid];") 

rs.MoveFirst 

    strSQL = "UPDATE [tblnewbid] INNER JOIN [tblStates]" 
    strSQL = strSQL & " ON [tblStates].[StateAbbrev] = [tblnewbid].[OriginState]" 
    strSQL = strSQL & " SET [tblnewbid].[O_StateRegion]=[tblStates].[StateRegion]" 


    db.Execute (strSQL), dbFailOnError 


rs.MoveFirst 

    strSQL = "UPDATE [tblnewbid] INNER JOIN [tblStates]" 
    strSQL = strSQL & " ON [tblStates].[StateAbbrev] = [tblnewbid].[DestinationState]" 
    strSQL = strSQL & " SET [tblnewbid].[D_StateRegion]=[tblStates].[StateRegion]" 


    db.Execute (strSQL), dbFailOnError 

rs.Close 

Set rs = Nothing 

回答

1

当您在双引号内放置变量时,它将停止作为变量并成为文字字符串。

你想要做的是改变评估变量,然后放入字符串中。你可以用串联做到这一点:

即:

db.Execute "ALTER TABLE " & tblnewbid & " ADD COLUMN O_StateRegion CHAR", dbFailOnError 

应用此拼接到需要评估你的变量每行。

+0

那肯定让我失去了那个错误。非常感谢你。但是,一旦我阅读了你的答案,就有必要在整个代码中做这件事。 (见本评论的结尾)但是当我这样做时,我得到和下一行中的错误,说:太少的参数。预计1.'设置rs = db.OpenRecordset(“从”&tblnewbid & " ;“选择[OriginState])'任何想法? –

+0

Nevermind。我发现实际表中的错误。字段名称不正确。但我确信它可以正常工作 –

+0

它确实运行得非常好,谢谢! –

相关问题