کپی فیلد multi-valued به جدول دیگر
این تاپیک به نوعی در تکمیل تاپیک زیر هست:
append کردن اطلاعات فیلدهای مشترک دو جدول متفاوت با کد (barnamenevis.org)
که در اونجا به طور مفصل در مورد چگونگی اضافه کردن رکوردهای جدید (غیرتکراری) از جدول(های) دیگه
به یک جدول مرجع بحث شده و خوندنش پیشنهاد میشه.
فیلد multivalued چیزی هست که حتما باید ازاون دوری کنین!
بجاش از جدول های مرتبط استفاده کنین و برای یک اینترفیس فریبنده،
که خیلی راحت با روشهای متعارف قابل ساخت هست،
خودتون رو به دردسر نندازین.
اما اگر از قبل دیتا دارین
یا این که ساختار دیتا دست شما نیست این تاپیک میتونه به شما کمک کنه.
2 ضمیمه
نقل قول: کپی فیلد multi-valued به جدول دیگر
یک جدول Students رو در نظر بگیرین
که یک فیلد به نام Courses از نوع multivalued داره:
ضمیمه 156143
هدف این هست که دیتا این جدول به یک جدول خالی 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
ضمیمه 156144
دلیلش این هست که فیلد multi-valued در واقع یک جدول هست،
پس ناچار هستیم به همین شکل با اون رفتار کنیم.
نقل قول: کپی فیلد 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
اینجا فقط به چگونگی کپی دیتا این نوع فیلد پرداخته شد،
برای مباحث فرعی از قبیل :
تشخیص یکی بود فیلدها و ساختار اونها
و زمانی که ساختار جدول مبدا و مقصد یک نباشه و ...
در همون تاپیک مورد اشاره در پست شماره یک ادامه بدین.
1 ضمیمه
نقل قول: کپی فیلد multi-valued به جدول دیگر
نقل قول: کپی فیلد 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
اینجا فقط به چگونگی کپی دیتا این نوع فیلد پرداخته شد،
برای مباحث فرعی از قبیل :
تشخیص یکی بود فیلدها و ساختار اونها
و زمانی که ساختار جدول مبدا و مقصد یک نباشه و ...
در همون تاپیک مورد اشاره در پست شماره یک ادامه بدین.
با سپاس فراوان
چه راه خوب و میانبری . من میخواستم با فرم جدید و یک رکوردست قبلی این راه رو برم که کلی داستان میشد و معلوم نبود که چه مشکلاتی پیش می اومد
نقل قول: کپی فیلد multi-valued به جدول دیگر
استاد فرقRecordset باRecordset2در چیه ؟
2 ضمیمه
complex fields (multi-valued , attachment) recordset2.parentrecordset
نقل قول:
نوشته شده توسط
moustafa
فرقRecordset باRecordset2در چیه ؟
اینجا هیچی - فقط برای تحریک حس کنجکاوی خواننده و بررسی میزان دقت در مطلب آوردم،
میتونستیم برای این کد همه رکوردست ها رو از همون نوع recordset تعریف کنیم و مشکلی هم پیش نمیومد.
ولی در واقع recordset2 یک فرق با recordset داره
که داشتن یک پراپرتی دیگه به نام ParentRecodset هست:
ضمیمه 156146
ضمیمه 156147
یعنی اگر رکوردست شما value یک فیلد complex مثل multi-valued یا attachment باشه،
و ما در کد نیاز به کار روی parentrecordset اون (وقتی که این recordset2 باز هست) داریم،
باید از این نوع استفاده کنیم - وگرنه نیازی نیست.
برای کار با فیلدهای attachment (اون ها هم complex هستن ولی فیلدهای بیشتری نسبت به multi-valued دارن)
میتونین تاپیک زیر ببینین:
سوال: طراحی فرم منو اصلی پویا در اکسس (Dynamic Form) (barnamenevis.org)