ورود

View Full Version : سوال: ریختن یک فیلد در آرایه



IMANAZADI
شنبه 11 خرداد 1392, 17:00 عصر
با سلام
یک جدول داریم شامل یک فیلد عددی از نوع Integer بنام age
در کدنویسی vba چطوری میتونم مثلا فیلدهای که بزرگتر از 15 هستند رو بخونم و در یک آرایه بریزم

Abbas Amiri
شنبه 11 خرداد 1392, 19:12 عصر
با سلام
یک جدول داریم شامل یک فیلد عددی از نوع Integer بنام age
در کدنویسی vba چطوری میتونم مثلا فیلدهای که بزرگتر از 15 هستند رو بخونم و در یک آرایه بریزم

شما می تونید مقادیر مورد نظر رو در یک کوئری هم بدست بیارید .
تابع زیر با پارامترهای نام جدول ونام فیلد مقادیر بزرگتر از 15 را در قالب یک آرایه برمی گرداند .
میتونید آنرا به یک متغیر واریانت منتسب کنید



Function GetFieldValuesInArray(TableName As String, FieldName As String)
Dim rs As Recordset, arr() As Integer, i As Integer
Set rs = CurrentDb.OpenRecordset("SELECT " & FieldName & " FROM " & TableName & " WHERE " & FieldName & " > 15")
rs.MoveLast: rs.MoveFirst
ReDim arr(rs.RecordCount - 1)
Do Until rs.EOF
arr(i) = rs(0)
i = i + 1
rs.MoveNext
Loop
GetFieldValuesInArray = arr
End Function
مثال:
myVar = GetFieldValuesInArray("MyTableName", "MyFieldName")

IMANAZADI
یک شنبه 12 خرداد 1392, 09:40 صبح
با تشکر از شما
دوست گرامی کار این دو کد چیه ؟

rs.MoveLast
rs.MoveFirst


میدونم رکوردها رو به اولین رکورد و آخرین رکورد میبره ولی اگر در تابع نباشه هم باز کار به درستی انجام میشه

Abbas Amiri
یک شنبه 12 خرداد 1392, 18:58 عصر
با تشکر از شما
دوست گرامی کار این دو کد چیه ؟

rs.MoveLast
rs.MoveFirst


میدونم رکوردها رو به اولین رکورد و آخرین رکورد میبره ولی اگر در تابع نباشه هم باز کار به درستی انجام میشه

سلام

اول بعد از خط سوم یک خط اضافه کنید :

If rs.RecordCount=0 then Exit Function
چون در صورت عدم وجود رکورد درجدول باعث RunTime Error میشه .

در مورد سوال تان قبل وبعد از کدهای فوق عبارت Debug.Print rs.RecordCount رو تایپ کنید و بعد از صدا زدن تابع ببینید در Immediate Window چه مقادیری چاپ می شود .
معمولا اولین مقدار یک است و دومی تعداد واقعی رکوردها .

در بعضی از کوئریها درصورتی که از روش فوق استفاده نکنیم ،رکوردست فقط اولین رکورد را برمی گرداند .