我正在MS Access数据库的一个表中工作。我想使用一个iif语句来确定字段A的值是否符合有效格式(在这种情况下,一个或两个数字后跟一个字母)。如果是这样,我想只取A字段的数字部分(例如,如果字段A的一个条目是“15B”,我想只考虑“15”部分)并将其插入到当前空的字段中B,我已经创建。从一个字段中插入一部分值到另一个字段
如何编写仅考虑字段A的数字部分并将其插入字段B的MS Access查询?
我正在MS Access数据库的一个表中工作。我想使用一个iif语句来确定字段A的值是否符合有效格式(在这种情况下,一个或两个数字后跟一个字母)。如果是这样,我想只取A字段的数字部分(例如,如果字段A的一个条目是“15B”,我想只考虑“15”部分)并将其插入到当前空的字段中B,我已经创建。从一个字段中插入一部分值到另一个字段
如何编写仅考虑字段A的数字部分并将其插入字段B的MS Access查询?
对于你所说,你可以用like
建立一个更新查询,这样的格局:
UPDATE tbl1 SET tbl1.ValB =
Switch([ValA] Like "#[a-z]",Left([valA],1),
[valA] Like "##[a-z]",Left([valA],2),True,NULL);
或使用Val
函数,该函数将尝试尽可能地从字符串转换转换为数字:
UPDATE tbl1 SET tbl1.ValB =
iif(valA like "#[a-z]" or valA like "##[a-z]",val(ValA),NULL)
你提供的第一个陈述就像一个魅力。我之前没有使用switch语句或左/右函数。谢谢您的帮助! – user3250548
你需要id字段以及
Private Sub bntStart_Click()
On Error GoTo err_trap
Dim con As ADODB.Connection
Dim rsLocal, rsLocal_Upd As ADODB.Recordset
Dim sql_string As String
Dim counter, numeric_value As Integer
Set counter = 1
sql_string = "SELECT * FROM TblTest"
Set con = CurrentProject.Connection
Set rsLocal = con.Execute(sql_string)
If Not (rsLocal.BOF And rsLocal.EOF) Then
rsLocal.MoveFirst
While Not rsLocal.EOF
If Len(ExtractNumber(rsLocal.Fields("FieldA")) > 0) Then
numeric_value = ExtractNumber(rsLocal.Fields("FieldA"))
sql_string = "UPDATE TblTerms SET FieldB = " & numeric_value & " WHERE id = " & counter
Set con = CurrentProject.Connection
Set rsLocal_Upd = con.Execute(sql_string)
End If
rsLocal.MoveNext
counter = counter + 1
Wend
End If
Set con = Nothing
Exit Sub
err_trap:
MsgBox (Err.Description)
Set con = Nothing
End Sub
Function ExtractNumber(str As Srting)
Dim iCount As Integer, i As Integer
Dim sText As String
Dim lNum As String
'Written by OzGrid Business Applications
'[url]www.ozgrid.com[/url]
'Extracts a number from a cell containing text And numbers.
sText = str
For iCount = Len(sText) To 1 Step -1
If IsNumeric(Mid(sText, iCount, 1)) Then
i = i + 1
lNum = Mid(sText, iCount, 1) & lNum
End If
If i = 1 Then lNum = CInt(Mid(lNum, 1, 1))
Next iCount
ExtractNumber = CLng(lNum)
End Function
请注意,我把ExtractNumber从这里http://www.ozgrid.com/forum/showthread.php?t=18185
对于您的问题的验证部分,您可以使用Like
模式匹配。以下是立即窗口的示例。
? "15A" Like "#[A-Z]" Or "15A" Like "##[A-Z]"
True
? "4B" Like "#[A-Z]" Or "4B" Like "##[A-Z]"
True
? "123A" Like "##[A-Z]" Or "123A" Like "##[A-Z]"
False
? "15AB" Like "#[A-Z]" Or "15AB" Like "##[A-Z]"
False
? "15!" Like "#[A-Z]" Or "15!" Like "##[A-Z]"
False
如果这些测试正确表达你的意图,你可以使用它作为验证规则为Field A
:
Like "#[A-Z]" Or Like "##[A-Z]"
至于Field B
,你可以做,在一个字段表达式查询。
SELECT
[Field A],
Val([Field A]) AS [Field B]
FROM YourTable;
在任何需要查看的地方使用该查询[Field B]
。采用这种方法,如果表中不存在[Field B]
,那么只要[Field A]
值发生更改,您就不必关心更新[Field B]
存储的值。
你试过了什么代码? – Matt