کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

بهم پیوستن دیتای ستون یا فیلد خاص در اکسس



در مثال زیر دیتاهایی  در جدولی بنام 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 نوشت 








نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد