با سلام خدمت دوستان عزیز
چطور میتونم چند رکورد رو که فرمت تکست داره با هم ادغام کنم؟؟
توی فایل پیوست
توی کوئری گروپ کردم . میخوام مقادیری که توی یه کارتن هست رو در یک ردیف جلو کارتن قرار بده
ضمیمه 148130
میخوام به این صورت تبدیل بشه
ضمیمه 148131
Printable View
با سلام خدمت دوستان عزیز
چطور میتونم چند رکورد رو که فرمت تکست داره با هم ادغام کنم؟؟
توی فایل پیوست
توی کوئری گروپ کردم . میخوام مقادیری که توی یه کارتن هست رو در یک ردیف جلو کارتن قرار بده
ضمیمه 148130
میخوام به این صورت تبدیل بشه
ضمیمه 148131
اول باید یک تابع پابلیک بنویسین که شماره کارتن رو دریافت کنه و لیست پیوسته رو برگردونه
بعد در همون کوئری که روی شماره کارتن گروه بندی کردین از این تابع استفاده کنین
ببخشید امکانش هست روی فایل پیوست زحمتشو بکشین؟
چند مورد در فایل پیوستی هست که باید اصلاح کنین:
1- اسامی فیلدها رو فارسی انتخاب کردین - اینکار بعدها و بخصوص در کدنویسی باعث دردسر میشه.
اسامی باید حتما با حروف انگلیسی باشه بجاش میتونین از caption استفاده کنین.
2- تمام فیلدها از نوع string هست. مقادیر عددی باید رو باید در فیلد عدد ذخیره کنین.
3- فیلدهایی مثل شماره کارتن که بعدها باهاش کارهایی مثل گروهبندی و سورت دارین باید ایندکس بشن.
4- برای یک سری از کارها مثل همین موردی که اینجا هست از فیلد calculated استفاده کنین.
جدول اصلاح شده اینجوری میشه:
ضمیمه 148202
یک فیلد calculated به اسم ItemX اضافه کردم که در محاسبات بعدی راحتتر باشیم.
دقت کنید چون فرمت بندی استفاده میکنیم نوع فیلد باید حتما LONG TEXT و فرمت اون هم RICH TEXT باشه.
ضمیمه 148203
با این حساب جدول شما اینجوری میشه:
ضمیمه 148204
اگر دقت کنین نام کالا به رنگ قرمز و توپر هست تا بعدا که محتویات کنار هم میاد نتیجه خوانا باشه.
شما میتونین سلیقه خودتون رو بکار ببرین یا کلا فرمت بندی رو حذف کنین.
حالا میریم سروقت کد - یک ماجول بسازین و این کد رو درش کپی کنین:
Option Compare Database
Option Explicit
Dim RS As Recordset
Public Function BoxItems(ByVal BoxNumber As Long, _
Optional ByVal Separator As String = " / ") As String
On Error GoTo Error_Handler
Set RS = CurrentDb.OpenRecordset("SELECT ItemX FROM Boxes WHERE BoxNumber=" & BoxNumber)
If RS.EOF Then
BoxItems = ""
Else
BoxItems = RS(0)
RS.MoveNext
Do While Not RS.EOF
BoxItems = BoxItems + Separator + RS(0)
RS.MoveNext
Loop
End If
Exit Function
Error_Handler:
BoxNumber = "Error " & Err.Number & " : " & Err.Description
End Function
کد نکته خاصی نداره. تابعBoxItems شماره کارتن رو میگیره و یک لیست پیوسته از محتویات اون میسازه.فقط یک پارامتر اختیاری داریم که میتونین بعنوان جداکننده مقادیر ازش استفاده کنین.
بصورت پیشفرض از / استفاده کردیم.
حالا یک کوئری میسازیم و نتیجه رو تست میکنیم:
ضمیمه 148205
در اینجا هم فیلدItemsAll رو از نوع LONG TEXT و با فرمت RICH TEXT انتخاب میکنیم.
و این هم نتیجه نهایی:
ضمیمه 148206
در نهایت یک نکته لازم هست گفته بشه:
عملیات از این دست اگر تعداد رکوردها کم باشه و گزارش ها هم با فاصله زمانی زیاد نیاز باشه چندان مهم نیست وگرنه زمان محاسبه سربار زیادی داره.
اگر اینجور باشه باید تمام عملیات هنگام ورود دیتا انجام بشه تا گزارش ها سریع ساخته بشن.
واقعا باید تشکر کرد از شما
توضیحات کامل همراه با جزییات دقیق!
علاوه بر کمک به سرانجام رسیدن درخواست شروع کننده تاپیک، کلی مطالب دیگه هم آموزش داده میشه!
خداقوت