نمایش نتایج 1 تا 7 از 7

نام تاپیک: آموزش DataMacro

  1. #1
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    Thumbs up آموزش DataMacro

    با سلام مجدد

    شرمنده که مطلب تکراری اما فکر کردم که این مطلب رو به صورت جداگانه قرار بدم بهتره


    5 مقوله است که همه رو میشه به راحتی انجام داد


    Insert , Update (Edit) , Delete در یک Table و مقوله پنجم هم همین موارد در Table دیگریست


    - مایکروسافت از Access 2007 به بعد قابلیت قدیمی ای رو که البته در اکسس تازگی داشت به فایل هاش اضافه کرد



    این قابلیت همون SQLFunction هستش که در اکسس به عنوان DataMacro شناخته میشه


    - بسیار هم قدرتمنده و ضریب خطای کمی داره و کد نویسی رو در این موارد بسیار کم میکنه



    و اما Datamacro کجاست

    1.jpg

    1 (1).jpg

    دیتا ماکرو رو از اینجا میتونید ایجاد کنید

    اما توضیح :


    AfterInsert : همون طور که از اسمش مشخصه این حالت کارش اینه که بعد از هر ایجاد رکورد جدید بیاد و ماکرو ای رو که براش تعریف کردید اجرا کنه
    AfterUpdate: همون طور که از اسمش مشخصه این حالت کارش اینه که بعد از هر تغییر در رکورد های قبلی بیاد و ماکرو ای رو که براش تعریف کردید اجرا کنه
    AfterDelete: همون طور که از اسمش مشخصه این حالت کارش اینه که بعد از هر حذف رکورد بیاد و ماکرو ای رو که براش تعریف کردید اجرا کنه


    BeforeDelete : همون طور که از اسمش مشخصه این حالت کارش اینه که قبل از هر حذف رکورد بیاد و ماکرو ای رو که براش تعریف کردید اجرا کنه


    و اما BeforeChange : کارش اینه که قبل از هر تغییری بیاد و ماکرو ای رو که براش تعریف کردید رو اجرا کنه

    خوب بریم سراغ ایجاد یه دیتا ماکرو :

    برای همین روی Create Named Macro کلیک کنید


    1 (2).jpg

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


    1 (3).jpg

  2. #2
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    Thumbs up نقل قول: آموزش DataMacro

    همون طور که تصویر بالا مشاهه میکنید دارای سه بخشه

    بخش بالایی سمت چپ که مربوطه Parameters

    بخش پایینب سمت چپ مربوطه به ماکرو

    بخش سمت راست منوی درختی همون سمت چپ پایینه


    از اینجا به بعد خیلی مهم میشه

    Parameters : پارامتر ها همون دریافتی های دیتا ماکرو هستن یعنی برای اینکه به دیتا ماکرو بتونید چیزی ارسال کنید باید براش پارامتر تعیین کنید و بعد با استفاده از پارمترهای تعیین شده برای دیتا ماکرو هرچی خواستید ارسال کنید

    به زبون ساده تر مثل یه متغییر میمونه برای یک فانکشن که باید برای اینکه فانکشن کارش رو انجام بده متغغیر رو بهش بدید


    خوب حالا بر روی CeateParameter در قسمت سمت چپ بالا کلیک کنید

    1 (4).jpg


    بعد از کلیک کردن یک پارامتر ساخته میشه




    1 (5).jpg



    هر پارامتر شامل دو بخشه

    اول اسم
    دوم توضیح که برای خودتون که بدونید این پارامتر چیه

  3. #3
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    نقل قول: آموزش DataMacro

    بعد از ساختن یک پارامتر حالا نوبت ایجاد یک Action هستش

    فرض کنید میخواهید یک رکورد جدید ایجاد کنید ولی میخواهید تکراری نباشه

    من تو این تیبل دو تا Field بیشت ندارم الان ID و Name

    فرض کنید میخواهیم یک نام جدید ایجاد کنیم ولی تکراری نباشه

    خوب برای این کار به ترتیب این کار ها رو انجام میدیم

    از منوی Action باید LookUp A Record In رو انتخاب کنید



    1 (2).jpg



    بعد از انتخاب این Action مثل شکل زیر میشه


    1.jpg




    خوب میریم سراغ شماره 1 :

    Required : در اینجا مشخص میکنیم در کدوم Table این کار انجام بشه

    نکته بسیار مهم :

    مهم نیست در کدوم تیبل در حال ساخت دیتا ماکرو هستید

    چون در هر کاری در دیتا ماکرو باید تیبل هدف رو مشخص کنید

    خوب من یه تیبل بیشتر ندارم و اون رو انتخاب میکنم

    خوب میریم سراغ شماره 2 :

    در اینجا بهش میگیم بگرد ببین داده ای شبیه به این داری

    خوب به این شکل وارد مکنیم



    [Name]=[NameParameter]


    خوب حالا میریم سراغ شماره 3 :

    یعنی زمانی اجرا میشه که داده تکراری ای باشه

    خوب اول بهش میگم یه ارور نشون بده

    بنابراین RaiseError رو از منوی Action همین Lookup انتخاب کنید

    دقت کیند به عکس

    یه شماره در Error Number وارد کنید ودر Error Description متنی رو که میخواهید نمایش بده

    بعد از این از همون منوی Action باید StopMacro رو انتخاب کنید





    1 (1).jpg



    خوب بعدش از منوی Action بعدی مثل عکس زیر CreateRecord رو انتخاب کنید





    1 (3).jpg





    عد از انتخاب باز ازتون تیبل هدف رو میخواد که بهش میدیم

    اما بعد باید از منوی Action همین SetField رو انتخاب کنید




    1 (4).jpg



    حالا در مقابل Name نام Field رو بنویسید که اینجا میشه [Name]
    در مقابل Value هم نام Parameter رو که ایجاد کردید بنویسید که میشه [NameParameter]

    بعذ اگه خواستید یه پیام هم مثل قبل برای ایجاد کنید



    1 (5).jpg




    خوب ابتدای کار تموم شد و حالا ذخیره میکنیم و براش یه اسم در نظر میگیریم

    من اسمش رو میذارم Insert




    آخرین ویرایش به وسیله AbbasSediqi : جمعه 29 دی 1396 در 01:28 صبح

  4. #4
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    نقل قول: آموزش DataMacro

    خوب حالا میریم سراغ فراخواین این Datamacro

    اول یه فرم بسازید و در اون یه Textbox ایجاد کنید و Button

    بعد بر روی OnClick این button کلیک کرده و MacroBuilder رو انتخاب کنید

    در منوی ماکرو از منوی Action باید Run DataMacro رو انتخاب کنید

    از منوی کشوی مقابل MacroName ماکرو ساخته شده رو انتخاب کنید

    میبینید که پارامتر ساخته شده رو ایجاد کرد و ازتون درخواست میکنه

    در مقابل پارامتر NameParameter هم [Text2] که در اینجا سام Textbox ساخته شده منه رو انتخاب میکنیم

    حالا فراخوانی شد

    اما نکته در هنگام استفاده از OnRaiseError در دیتا ماکرو باید کار زیر رو هم انجام بدید

    بر روی OnError فرم کلیک کنید و MacroBuilder رو انتخاب کنید

    بعد از منوی Action باید If رو انتخاب کنید

    در مقابل if بنویسید



    Error(1234) & Error(1)



    که یعنی اگر ارور شماره 1234 و ارور 1 که من به عنوان شماره در دیتا ماکرو قرا دادم بوجود اومد چی کار کنه

    بعد از منوی کشویی زیر if باید onerror رو انتخاب و فقط از منوی کشویی مقابل Go to آیتم next رو انتخاب کنید و بعد ذخیره کنید
    آخرین ویرایش به وسیله AbbasSediqi : جمعه 29 دی 1396 در 01:07 صبح

  5. #5
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    نقل قول: آموزش DataMacro

    این هم نمونه کار

    فایل های ضمیمه فایل های ضمیمه

  6. #6
    کاربر دائمی آواتار AbbasSediqi
    تاریخ عضویت
    مهر 1392
    محل زندگی
    تهران
    پست
    409

    نقل قول: آموزش DataMacro

    و اما عزیزانی که در محیط vba برنامه نویسی میکنن در فراخوانی DataMacro ممکن دچار مشکل بشن

    فراخوانی دیتا ماکرو در vba درای دو شرطه

    اول داده ست شده با هر پارامتر باید با نوع داده وارد شده با Field اصلی برابر باشه

    یعنی مثلا اگر فیلدی داشته باشید که از نوع عدد باشه و بعد بخواهید با دیتا ماکرو تغییر یا اضافه کنید بهش باید حتما داده وارد شده عددی باشه

    و اما اگه داده string باشه قضیه فرق میکنه باید قبل و بعد داده """" رو اضافه کنید

    نکته دوم باید قبل از اجرای دیتا ماکرو تمامی پارامتر ها رو هم ست کنید

    برای اینکه ساده تر بشه از این کد استفاده کنید






    Public Function SetDataMacro(DataMacroName As String, Parameters, ParameterValue)
    Dim i As Integer
    i = 0
    For Each Item In Parameters
    If IsNumeric(ParameterValue(i)) = True Then
    DoCmd.SetParameter Item, ParameterValue(i)
    Else
    DoCmd.SetParameter Item, """" & ParameterValue(i) & """"
    End If
    i = i + 1
    Next
    DoCmd.RunDataMacro DataMacroName
    End Function



    رای فراخواین این فانکش هم باید مقدار رو به صورت Array وارد کنید

    دقت کنید در داده وارد شده باید index پارامتر و ParameterValue باهم برابر باشند

    یعنی اگر پارامتر در Array با Index شماره 0 باشه داده برابر هم باید در ParameterValue دارای Index 0 باشه




    SetDataMacro "Commodity.Update", Array("IDParameters", "AvailableParameters"), _
    Array(Me.cmb_Search.Column(0, Me.cmb_Search.ListIndex), _
    Me.cmb_Available.Value)



    سوالی بود در خدمتم


    آخرین ویرایش به وسیله AbbasSediqi : جمعه 29 دی 1396 در 01:31 صبح

  7. #7
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: آموزش DataMacro

    بخش فنی مبحث رو که آقای صدیقی الحق و الانصاف سنگ تمام گذاشتن و کامل هست.

    چند چیز در باره data macro هست که بد نیست در موردش بیشتر تبادل نظر بشه و از تجربیات هم استفاده کنیم:

    اول اینکه دیتامکرو استفاده کنیم یا کد vba بنویسیم؟
    نظر خودم این هست که پاسخ به ماهیت کار برمیگرده. اگر دیتابیسی داریم که عملیات مربوط به insert/delete/update به صورت متمرکز انجام میشه قطعا بهتره کد vba بنویسیم چون دستمون باز هست و عملیاتی که در دیتامکرو میتونیم انجام بدیم محدود هست.
    ولی اگر این عملیاتی که گفته شد غیر متمرکز هست (فرضا چند فرم مختلف برای کارهای یکسان داریم) نگهداری و یکسان کردن کد در همه اونها مشکل هست و در این حالت بهتره دیتامکرو استفاده کنیم.
    البته این بصورت عام هست و پاسخ ممکنه در شرایط خاص تغییر کنه.

    دویم اینکه اصلا به چه دردی میخوره؟ چه لزومی هست که یک عملیاتی حتما داغ داغ در زمان insert/update/delete انجام بشه.
    خب، یک مثال خوب رو خود آقای صدیقی آوردن (جلوگیری از ثبت دیتا تکراری) که حتما باید قبل از Insert کنترل بشه.
    اما موضوع مهمتر زمان هست. وقتی ورود یا ویرایش اطلاعات (بصورت دستی و نه بصورت batch مثلا با کوئری) انجام میدیم زمان مسئله مهمی نیست و دیتابیس هم عملا بی بار هست. ولی وقت گزارش گیری و محاسبه totalها یا عملیات روی فیلدهای text زمان نمود پیدا میکنه.
    دیتامکرو اینجا به کمک میاد (البته با vba هم میشه با توجه به مورد اول) : فرض کنید سیستم حسابداری یا فروش یا انبار داریم که در همه اینها موقع گزارشگیری نیاز به total روی فیلدهای عددی داریم. خب، خیلی ساده میتونیم در جدول کل، فیلد جمع رو خودمون اضافه کنیم و در جدول جزء ماکروهایی بنویسیم که با توجه به نوع عملیات insert/update/delete فیلد جمع در جدول کل رو بروز رسانی کنه. حالا در موقع گزارشگیری نیاز به Total گرفتن رو جزء نیست و مستقیم میشه از کل total رو بلافاصله داشت.

    مسئله زمان روی فیلدهای string خیلی بیشتر نمود داره: فرض کنین قرار هست در اسامی دنبال "نیک آبادی" یا "مؤسس" یا "علیرضا" بگردین.
    اول اینکه ممکنه "ک" و "ی" در سیستم کاربر با اونچه که در دیتابیس هست فرق داشته باشه. همچنین مطمئن نیستیم که تایپیست "نیک ابادی" یا "موسس" یا "علی رضا" ثبت کرده باشه. اینجا کافی هست که یک فیلد دیگه (مخفی از دید کاربر) به جدول اضافه کنیم و ماکروهایی بنویسیم که در لحظه ثبت یا ویرایش نام، اطلاعات فیلد اصلی رو پردازش و در این فیلد ذخیره کنه؛ بصورت "نیکابادی" و "موسس" و "علیرضا". بالطبع برای جستجو هم همین پردازش روی عبارت انجام میشه و جستجو هم برای این فیلد انجام میشه و نه فیلد اصلی.
    در اینصورت بجای اینکه هنگام جستجو برای هر رکورد یک بار پردازش نام رو انجام بدیم و بعد like بگیریم مستقیما like میگیریم و روی رکوردهای زیاد راحت تا صدبرابر صرفه جویی زمان داریم.

    مورد سوم میتونه ساخت کلید از روی مقادیر فیلدها باشه : مثلا بخشی از تاریخ + کد شهر + کد ناحیه + کد ...

تاپیک های مشابه

  1. آموزش سی شارپ
    نوشته شده توسط ehsan-ets در بخش C#‎‎
    پاسخ: 15
    آخرین پست: پنج شنبه 27 اردیبهشت 1386, 19:16 عصر
  2. آموزش کامل ASP.Net
    نوشته شده توسط mostafa_pk در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: چهارشنبه 22 شهریور 1385, 18:20 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •