PDA

View Full Version : Merge کردن یک فیلد از Quey



Milad_ATM
چهارشنبه 12 شهریور 1399, 07:30 صبح
سلام
چطور میشه یک ستون از یک Quey رو با هم ادغام کرد و با یک کاراکتر از هم جدااشون کرد؟
مثال :
555,450,300,500
اینها از یک ستون با هم مرج شده و با "،" از هم جدا شدن!

eb_1345
چهارشنبه 12 شهریور 1399, 14:37 عصر
سلام
چطور میشه یک ستون از یک Quey رو با هم ادغام کرد و با یک کاراکتر از هم جدااشون کرد؟
مثال :
555,450,300,500
اینها از یک ستون با هم مرج شده و با "،" از هم جدا شدن!


سلام
برای اینکار از یک تابع در قسمت ماژول استفاده کردم

نمونه اصلاح شده خودت رو ببین !

Milad_ATM
چهارشنبه 12 شهریور 1399, 16:22 عصر
ممنون دوست عزیز کارتون فوق العاده بود
فقط این شرط رو به هر روشی برمیدارم با Error مواجه میشم
Set MyRS = MyDB.OpenRecordset("Select * From Preservation where([Number]>500)", dbOpenSnapshot)
نیازی به این نیست

eb_1345
چهارشنبه 12 شهریور 1399, 20:14 عصر
ممنون دوست عزیز کارتون فوق العاده بود
فقط این شرط رو به هر روشی برمیدارم با Error مواجه میشم
Set MyRS = MyDB.OpenRecordset("Select * From Preservation where([Number]>500)", dbOpenSnapshot)
نیازی به این نیست
سلام
خواهش می کنم
در کد فوق نام table1 حذف شده


Set MyRS = MyDB.OpenRecordset("Select * From Table1 Preservation", dbOpenSnapshot)

Milad_ATM
پنج شنبه 13 شهریور 1399, 08:27 صبح
من کد رو به این شکل تغییر دادم:


Public Function fAppendDogNames(ID As Integer) As String Dim intNoOfDogs As Integer, strNames As String
intNoOfDogs = DCount("*", "Preservation", "[ID]=" & ID)
If intNoOfDogs = 1 Then
fAppendDogNames = DLookup("[ReportNo]", "Preservation", "[ID]=" & ID)
Exit Function
Else
Dim MyDB As DAO.Database, MyRS As DAO.Recordset
Set MyDB = CurrentDb()
Set MyRS = MyDB.OpenRecordset("Select * From Preservation", dbOpenSnapshot)
MyRS.MoveFirst
Do While Not MyRS.EOF
If Len(strNames) = 0 Then
strNames = MyRS![ReportNo]
Else
strNames = strNames & "," & MyRS![ReportNo]
End If
MyRS.MoveNext
Loop
fAppendDogNames = strNames
End If

MyRS.Close
Set MyRS = Nothing




و در Query به این صورت ماژول رو استفاده کردم :

XXX: fAppendDogNames([ReportNo])

ولی در نهایت این خروجی زو از Query می گیرم :
152113

eb_1345
پنج شنبه 13 شهریور 1399, 13:28 عصر
من کد رو به این شکل تغییر دادم:


Public Function fAppendDogNames(ID As Integer) As String Dim intNoOfDogs As Integer, strNames As String
intNoOfDogs = DCount("*", "Preservation", "[ID]=" & ID)
If intNoOfDogs = 1 Then
fAppendDogNames = DLookup("[ReportNo]", "Preservation", "[ID]=" & ID)
Exit Function
Else
Dim MyDB As DAO.Database, MyRS As DAO.Recordset
Set MyDB = CurrentDb()
Set MyRS = MyDB.OpenRecordset("Select * From Preservation", dbOpenSnapshot)
MyRS.MoveFirst
Do While Not MyRS.EOF
If Len(strNames) = 0 Then
strNames = MyRS![ReportNo]
Else
strNames = strNames & "," & MyRS![ReportNo]
End If
MyRS.MoveNext
Loop
fAppendDogNames = strNames
End If

MyRS.Close
Set MyRS = Nothing




و در Query به این صورت ماژول رو استفاده کردم :

XXX: fAppendDogNames([ReportNo])

ولی در نهایت این خروجی زو از Query می گیرم :



سلام
خب علتش آرگومان تابع میباشد که از نوع Integer قرار داده بودم ، چون فکر کردم اون ستونی که قراره بصورت سطری و پشت سرهم نوشه شود از نوع عدد است و حالا بلحاظ اینکه این ستون از نوع استرینگ است این آرگومان باید به String تبدیل شود

حالت اول از نوع Integer


Public Function CmdMerge(MrgReportNo As Integer ) As String



حالت دوم از نوع String


Public Function CmdMerge(MrgReportNo As String) As String

حالت سوم : حذف نوع متغیر تابع


Public Function CmdMerge(MrgReportNo)


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

Milad_ATM
پنج شنبه 13 شهریور 1399, 15:58 عصر
یک موردی که پیش میاد این هست که شماره های تکراری رو هر چند بار که باشن نشون میده و باعث کند شدن و بهم ریختگی میشه
میشه هر شماره رو فقط یک بار نشون بده
و اینکه اگر در Query شرطی بزارم روی شامل این ماژول هم میشه یا خیر؟
مثلاً اگر

Between [Forms]![PreservationReportPopUp]![FromDate] And [Forms]![PreservationReportPopUp]![ToDate]
فیلد تاریخم رو بین دو تاریخ قرار بدم و در همین Query از این ماژول استفاده کنم Report No هایی که Merge میشن در همین بازه قرار دارند؟

eb_1345
پنج شنبه 13 شهریور 1399, 19:54 عصر
یک موردی که پیش میاد این هست که شماره های تکراری رو هر چند بار که باشن نشون میده و باعث کند شدن و بهم ریختگی میشه
میشه هر شماره رو فقط یک بار نشون بده


اگر منظورت از شماره تکراری همون ReportNo است نه ID میتوانی در ماژول بعد از Select کلید واژه DISTINCT را اضافه نمائید
بصورت زیر :


Set MyRS = MyDB.OpenRecordset("Select DISTINCT ReportNo From Preservation", dbOpenSnapshot)




Between [Forms]![PreservationReportPopUp]![FromDate] And [Forms]![PreservationReportPopUp]![ToDate][/CODE]
فیلد تاریخم رو بین دو تاریخ قرار بدم و در همین Query از این ماژول استفاده کنم Report No هایی که Merge میشن در همین بازه قرار دارند؟


تمام شرطهائی که در کوئری پیاده می کنید باید در قسمت ماژول قید شود
مثلاً شرط گذاشته اید که فیلد ID بزرگتر از 2 باشد
بصورت زیز:



CountID = DCount("*", "Preservation", "[ID]>2")
Dim MyDB As DAO.Database, MyRS As DAO.Recordset
Set MyDB = CurrentDb()
Set MyRS = MyDB.OpenRecordset("Select DISTINCT ReportNo From Preservation WHERE(id >2)", dbOpenSnapshot)

Milad_ATM
دوشنبه 17 شهریور 1399, 11:13 صبح
دوستان این شرط رو میتونید راهنمایی کنید چطوری به کد بالا اضافه کنم
من این شرط رو در Query نوشتم و میخوام به این کد اضافه کنم

Between [Forms]![PreservationReportPopUp]![FromDate] And [Forms]![PreservationReportPopUp]![ToDate]