ش | ی | د | س | چ | پ | ج |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
در مثال زیر دیتاهایی در جدولی بنام Table1 رکورد شده و فیلد سوم هر گروه ( Line+Joint ) بصورت سورت id پشت سر هم به جدول Table2 ارسال و در آنجا ذخیره میشود
با کوئری نمی توان اینکار را انجام داد در نتیجه مجبوریم از Recordset استفاده کنیم.
1-نوشتن ساختار Sql جهت سورت نمودن رکوردهای جدول Table1 آنهم به این علت که رکوردهای هر گروه بصورت پراکنده در جدول ثبت شده.
"sSql="Select * From Table1 Order By Line,Joint,id
2-ایجاد کردن در حافظه ی موقت و باز کردن رکوردست در حالت SnapShot
(Set rst=db.OpenRecordSet(sSql,dbOpenSnapShot
3-رفتن به اولین رکورد و ذخیره کردن داده های Line Joint Re از Table1 در متغیرهای st1 st2 st3
rst.MoveFirst
st1=rst!Line
st2=rst!joint
st3=rst!re
4-رفتن به رکورد بعدی که حتما نوشتن این قطعه الزامیست
rst.MoveNext
در این مرحله در رکوردست لوپ زده میشود تا زمانیکه به انتهای آن برسد (EOF) داخل لوپ اگر st1=rst!Line و st2=rst!joint بود بایستی ستون re در هر تعدادکه بود پشت سر هم الصاق شوند و در متغیر st3 ذخیره شود
st3=st3 & ", " & rst!re
در غیر اینصورت دیتای ذخیره شده در این سه متغیر یعنی st1 st2 st3 در جدول Table2 اضافه یا اپند شود با ساختار Sql و استفاده از Insert Into و در نهایت قبل از بسته شدن if دوباره دیتاهای Line joint re در این متغیرها ذخیره گردند و به رکورد بعدی با rst.MoveNext این حلقه ادامه پیدا میکند در آخر یک رکورد در Table2 اپند نمی شود بعلت MoveNext اول که بعد از بستن Loop باید دوباره آن Sql که برای اپند کردن نوشته شده دوباره اجرا شود برای سرعت کار اپند کردن حتما از متد Database.Execute استفاده کنید و نه از Docmd.RunSql چرا که در رکوردهای حجیم مدت زمان بیشتری طول خواهد کشید البته نوشتن ساختار درست Sql هم باعث بالارفتن تقریبی سرعت خواهد شد .
"('" & sSql="Insert Into Table2(Line,joint,re) Values('" & st1 & "','" & st2 & "','" & st3
db.Execute sSql
حال شرح کد بالا به زبان ساده فرض کنید سورت شده ی جدول ۱ که با ساختار زبان sql در رکوردست باز شده ( مرحله ۲ ) طبق زیر باشد
Line joint re
A1 1 Rs
A1 1 Rt
A2 4 r1
st1=A1
st2=1
st3=Rs
از رکورد بعدی شروع میکند اگر نکند در آخر جواب میشود A1 1 rsrsrt یعنی Rs دوبار تکرار میشود
MoveNext
Do While.......Loop
if A1=A1 And 1=1Then
st3=st3 & ", " & Rs
در نهایت st3 در اینجا با رفتن به رکوردهای بعد در گروه A1 1 طبق MoveNext در انتهای Loop میشود st3=RsRt
Else
Append Query
st1=A2
st2=4
st3=r1
End if
MoveNext
چون در قبل از لوپ MoveNext قید شده در نتیجه به انتهای فایل میرسد و باید یک کوئری اپند دیگر برای St1=A2 st2=4 ,st3=r1 نوشت