Access中如何用两个文本框值的和作为SELECT TOP语句的参数?
Got it, let's break down why you're getting 43 instead of 7 here—this is a super common quirk in Access! Text boxes return string values by default, so when you just add their values together, you're concatenating strings instead of doing math. Here's how to fix it properly:
Core Issue
The Value property of your text boxes (txt_ibn_hayyan and txt_ibn_sina) returns text, not numbers. So 4 + 3 becomes "4" + "3" = "43" instead of the numeric sum 7.
Solutions to Get Numeric Sum
1. Use Val() for Safe Conversion (Best for Most Cases)
The Val() function converts a string to a number, ignoring non-numeric characters and treating empty values as 0. This is forgiving if users leave text boxes blank or enter accidental non-numeric input.
Example in VBA:
' Calculate the numeric sum Dim topCount As Integer topCount = Val(Me.txt_ibn_hayyan.Value) + Val(Me.txt_ibn_sina.Value) ' Build your SELECT TOP N query Dim sqlQuery As String sqlQuery = "SELECT TOP " & topCount & " * FROM YourTableName ORDER BY YourSortField;" ' Execute the query (adjust based on how you run your SQL) DoCmd.RunSQL sqlQuery
Example Directly in a Query:
SELECT TOP (Val([Forms]![student_names]![txt_ibn_hayyan]) + Val([Forms]![student_names]![txt_ibn_sina])) * FROM YourTableName ORDER BY YourSortField;
2. Use Strict Type Conversion (For Exact Numeric Control)
If you want to enforce specific numeric types (like integers or decimals) and handle empty values explicitly, use CLng() (for integers) or CDbl() (for decimals) with Nz() to replace empty values with 0 (avoids errors from nulls):
Example in VBA:
Dim topCount As Integer topCount = CLng(Nz(Me.txt_ibn_hayyan.Value, 0)) + CLng(Nz(Me.txt_ibn_sina.Value, 0))
Note:
This will throw an error if the text box contains non-numeric characters (like letters). If you need to prevent that, add validation in the text box's BeforeUpdate event to ensure only numbers are entered:
Private Sub txt_ibn_hayyan_BeforeUpdate(Cancel As Integer) If Not IsNumeric(Me.txt_ibn_hayyan.Value) Then MsgBox "Please enter a valid number!", vbExclamation Cancel = True End If End Sub
内容的提问来源于stack exchange,提问作者HAMID ALGHURABI

