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

نام تاپیک: کپی فیلد multi-valued به جدول دیگر

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

    کپی فیلد multi-valued به جدول دیگر

    این تاپیک به نوعی در تکمیل تاپیک زیر هست:
    append کردن اطلاعات فیلدهای مشترک دو جدول متفاوت با کد (barnamenevis.org)
    که در اونجا به طور مفصل در مورد چگونگی اضافه کردن رکوردهای جدید (غیرتکراری) از جدول(های) دیگه
    به یک جدول مرجع بحث شده و خوندنش پیشنهاد میشه.

    فیلد multivalued چیزی هست که حتما باید ازاون دوری کنین!
    بجاش از جدول های مرتبط استفاده کنین و برای یک اینترفیس فریبنده،
    که خیلی راحت با روشهای متعارف قابل ساخت هست،
    خودتون رو به دردسر نندازین.

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

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

    نقل قول: کپی فیلد multi-valued به جدول دیگر

    یک جدول Students رو در نظر بگیرین
    که یک فیلد به نام Courses از نوع multivalued داره:

    1.png

    هدف این هست که دیتا این جدول به یک جدول خالی Students_New با ساختار یکسان کپی بشه.

    در حالت عادی کافی هست یک کوئری ساده مثل این رو اجرا کنیم:
    INSERT INTO Students_New ( StudentID, FullName, Courses )
    SELECT StudentID, FullName, Courses
    FROM Students


    که اینجا نمیشه :
    An INSERT INTO query cannot contain a multi-valued field

    2.png

    دلیلش این هست که فیلد multi-valued در واقع یک جدول هست،
    پس ناچار هستیم به همین شکل با اون رفتار کنیم.

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

    نقل قول: کپی فیلد multi-valued به جدول دیگر

    به همین رو ناچار از رکوردست و VBA کمک میگیریم،
    که دست ما رو برای هر نوع عملیات پیچیده باز نگه میداره:

    Option Compare Database
    Option Explicit


    Sub Export()
    Dim DBS As Database
    Set DBS = CurrentDb
    Dim rsS As Recordset
    Dim rsSN As Recordset
    Dim rsMVS As Recordset2
    Dim rsMVSN As Recordset2
    Set rsS = DBS.OpenRecordset("Students", dbOpenForwardOnly, dbReadOnly)
    Set rsSN = DBS.OpenRecordset("Students_New", , dbAppendOnly)
    Dim i As Integer
    Do Until rsS.EOF
    Set rsMVS = rsS("Courses").Value
    rsSN.AddNew
    rsSN("StudentID") = rsS("StudentID")
    rsSN("FullName") = rsS("FullName")
    Set rsMVSN = rsSN("Courses").Value
    Do Until rsMVS.EOF
    rsMVSN.AddNew
    rsMVSN("Value") = rsMVS("Value")
    rsMVSN.Update
    rsMVS.MoveNext
    Loop
    rsSN.Update
    Debug.Print rsS(0)
    DoEvents
    rsS.MoveNext
    Loop

    rsS.Close
    rsSN.Close
    Set rsS = Nothing
    Set rsSN = Nothing
    Set rsMVS = Nothing
    Set rsMVSN = Nothing
    Set DBS = Nothing


    End Sub


    اینجا فقط به چگونگی کپی دیتا این نوع فیلد پرداخته شد،
    برای مباحث فرعی از قبیل :
    تشخیص یکی بود فیلدها و ساختار اونها
    و زمانی که ساختار جدول مبدا و مقصد یک نباشه و ...
    در همون تاپیک مورد اشاره در پست شماره یک ادامه بدین.

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

    نقل قول: کپی فیلد multi-valued به جدول دیگر

    دیتابیس نمونه
    فایل های ضمیمه فایل های ضمیمه

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: کپی فیلد multi-valued به جدول دیگر

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    به همین رو ناچار از رکوردست و VBA کمک میگیریم،
    که دست ما رو برای هر نوع عملیات پیچیده باز نگه میداره:

    Option Compare Database
    Option Explicit


    Sub Export()
    Dim DBS As Database
    Set DBS = CurrentDb
    Dim rsS As Recordset
    Dim rsSN As Recordset
    Dim rsMVS As Recordset2
    Dim rsMVSN As Recordset2
    Set rsS = DBS.OpenRecordset("Students", dbOpenForwardOnly, dbReadOnly)
    Set rsSN = DBS.OpenRecordset("Students_New", , dbAppendOnly)
    Dim i As Integer
    Do Until rsS.EOF
    Set rsMVS = rsS("Courses").Value
    rsSN.AddNew
    rsSN("StudentID") = rsS("StudentID")
    rsSN("FullName") = rsS("FullName")
    Set rsMVSN = rsSN("Courses").Value
    Do Until rsMVS.EOF
    rsMVSN.AddNew
    rsMVSN("Value") = rsMVS("Value")
    rsMVSN.Update
    rsMVS.MoveNext
    Loop
    rsSN.Update
    Debug.Print rsS(0)
    DoEvents
    rsS.MoveNext
    Loop

    rsS.Close
    rsSN.Close
    Set rsS = Nothing
    Set rsSN = Nothing
    Set rsMVS = Nothing
    Set rsMVSN = Nothing
    Set DBS = Nothing


    End Sub


    اینجا فقط به چگونگی کپی دیتا این نوع فیلد پرداخته شد،
    برای مباحث فرعی از قبیل :
    تشخیص یکی بود فیلدها و ساختار اونها
    و زمانی که ساختار جدول مبدا و مقصد یک نباشه و ...
    در همون تاپیک مورد اشاره در پست شماره یک ادامه بدین.
    با سپاس فراوان
    چه راه خوب و میانبری . من میخواستم با فرم جدید و یک رکوردست قبلی این راه رو برم که کلی داستان میشد و معلوم نبود که چه مشکلاتی پیش می اومد

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: کپی فیلد multi-valued به جدول دیگر

    استاد فرقRecordset باRecordset2در چیه ؟

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

    complex fields (multi-valued , attachment) recordset2.parentrecordset

    نقل قول نوشته شده توسط moustafa مشاهده تاپیک
    فرقRecordset باRecordset2در چیه ؟
    اینجا هیچی - فقط برای تحریک حس کنجکاوی خواننده و بررسی میزان دقت در مطلب آوردم،
    میتونستیم برای این کد همه رکوردست ها رو از همون نوع recordset تعریف کنیم و مشکلی هم پیش نمیومد.

    ولی در واقع recordset2 یک فرق با recordset داره
    که داشتن یک پراپرتی دیگه به نام ParentRecodset هست:

    3.png


    4.png
    یعنی اگر رکوردست شما value یک فیلد complex مثل multi-valued یا attachment باشه،
    و ما در کد نیاز به کار روی parentrecordset اون (وقتی که این recordset2 باز هست) داریم،
    باید از این نوع استفاده کنیم - وگرنه نیازی نیست.

    برای کار با فیلدهای attachment (اون ها هم complex هستن ولی فیلدهای بیشتری نسبت به multi-valued دارن)
    میتونین تاپیک زیر ببینین:

    سوال: طراحی فرم منو اصلی پویا در اکسس (Dynamic Form) (barnamenevis.org)

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

  1. پاسخ: 1
    آخرین پست: یک شنبه 19 خرداد 1392, 12:53 عصر
  2. XCSR----->expert classifier system real valued
    نوشته شده توسط fkaz_fkaz در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 1
    آخرین پست: چهارشنبه 12 مهر 1391, 10:09 صبح
  3. استفاده از Table-Valued Paramete
    نوشته شده توسط Arman_1367 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: چهارشنبه 26 خرداد 1389, 12:44 عصر
  4. مشکل با CLR Table-Valued Function
    نوشته شده توسط hdv212 در بخش SQL Server
    پاسخ: 14
    آخرین پست: پنج شنبه 31 خرداد 1386, 16:28 عصر

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

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

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