แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - PNR

หน้า: [1] 2 3 4 ... 50
1
ที่ท่านต้องการคืออัพเดท ฟิลล์ [Type1] [Type2] ของตาราง Main ที่นำเข้ามาจาก Excel โดยอ้างอิงจาก รหัส ใช่ไหมครับ

SELECT TblMain.Code, TblMain.Name, DLookUp("TypeV1","tbltype","CodeV = '" & Code & "'") AS Type1, DLookUp("TypeV2","tbltype","CodeV = '" & Code & "'") AS Type2
FROM TblMain;

โค๊ดนี้ ไว้สำหรับดูข้อมูลก่อนอัพเดทนะครับ เอาไว้ตรวจเช็คหรือแสดงข้อมูลก่อนอัพเดท
โดยใช้ Dlookup มาแสดง โดยอ้างอิงจากรหัส

หรือจะใช้การสร้างการเชื่อมความสัมพันธ์ ฟิลล์ รหัส แล้วดึงข้อมูลมาแสดงก็ได้ครับ

2
ว่าจะไม่ยุ่งกับกระทู้นี้ เพราะเห็นคุณ PNR ตอบอยู่
แต่อดไม่ได้จริง เพราะรู้สึกว่ากำลังจะทำให้ได้ฐานข้อมูลที่สร้างปัญหาได้ในอนาคต

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

สำหรับการแก้ปัญหาของคุณนั้น ทำได้ง่ายมากคือ
1. ลบฟิลด์ "ชนิด" ในตารางหลักออกไป
2. ถ้าต้องการรู้ว่าคนไหนมีชนิดอะไร ให้สร้างคิวรี ที่เชื่อมข้อมูลรหัสของทั้ง 2 ตาราง แล้วดึงฟิลด์ รหัส,ชื่อ,ชนิด มาแสดงผล ก็จะได้อย่างที่คุณต้องการแล้วครับ

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
ผมได้รีโมทไปทำแบบนั้นให้เขาแล้วครับอาจารย์
โดยใช้คิวรี่ในการเชื่อมข้อมูลมาแสดงครับ
1.ตอนแรกไม่ค่อยเข้าใจโจทย์เมื่อได้เห็นการออกแบบก็ทำให้แล้วเป็น ถ้าแสดงข้อมูลธรรมดา
โค๊ด: [Select]
SELECT [TBLข้อมูลหลัก].[รหัส], [TBLข้อมูลหลัก].[ชื่อ], [TBLชนิด].[ชนิด]
FROM TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส];



3
งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

แล้วแต่การใช้งานครับ ลองสร้าง คิวรี่ใหม่แล้วเอา SQL นี้ไปวางแล้วรันดูครับ

โค๊ด: [Select]
SELECT DLookUp("ชนิด","TBLชนิด","รหัส = '" & [รหัส] & "'") AS ชนิด, [TBLข้อมูลหลัก].*
FROM TBLข้อมูลหลัก;

4
จากตัวอย่างนั้น มี 2 ตาราง
การที่จะแสดงข้อมูลได้นั้นสามารถทำได้ 2 แบบ คือ
1. ใช้คิวรี่ในการแสดงผล (แบบนี้ใช้การ Dlookup ก็ได้ครับ) ถ้าอยากได้แบบใช้คิวรี่แสดงผล เดี่ยวทำให้ดู

2.คือให้อัพเดทข้อมูล ชนิด  ในตารางข้อมูลหลัก
โค๊ด sql ที่ให้ไปนั้นจะต้องสร้าง query ใหม่ขึ้นมาใช้งาน จะใช้สำหรับอัพเดทข้อมูลให้ตารางข้อมูลหลักก่อนการแสดงผลครับ

5
ใช้ Update Query ได้ครับ

เช่น
โค๊ด: [Select]
UPDATE TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส] SET [TBLข้อมูลหลัก].[ชนิด] = [TBLชนิด]![ชนิด];

6
เนื่องจาก ผมศึกษาแต่ access เพราะชื่อเว็บก็บอกอยู่ว่า Thai access
เลยไม่ถนัด Excel เท่าไร นานๆจะได้ศึกษาจากเพื่อนสมาชิกที่ถามซักครั้ง แต่จะพยายามดูให้นะครับ

จากโจทย์
อ้างถึง
สร้าง sheet
ต้นแบบไว้ แล้วค่อยเอาข้อมูลมาหยอด
จะได้หรือเปล่า และจะต้องแก้ code อย่างไรครับ


Dim xlapp As Object
Dim sPath, sFile As String
    sPath = "C:\"
    sFile = sPath & "MyExcelFile.xls"
Set xlapp = CreateObject("excel.application")
With xlapp
.Visible = True
.workbooks.Open (sFile)
.sheets("MysheetName").select 'กำหนดให้เลือก Sheet ที่เราสร้างไว้
.ActiveSheet.Range("A2") = "CCC" 'กำหนดค่าที่จะจัดวางข้อมูลตามใจชอบเลย

End With

ขั้นตอนการทำงาน
1.เปิดไฟล์ Excel ตาม Path ที่เรากำหนดไว้
2.เปิดไฟล์มาแล้วไปยัง Sheet ที่เราสร้างไว้
3.นำข้อมูลมาวางใน sheet ตามต้องการ

ส่วนขั้นตอนการนำข้อมูลมาวางเนื่องจากไม่มีตัวอย่างข้อมูล
ท่านเลยต้องเขียนต่อจากนี้ตามความต้องการของท่านได้เลย


7
เป็นมือใหม่ค่ะ หาไม่เจอเลยค่ะ ตามที่สอน เป็นภาษาไทยด้วยค่ะ รบกวนชี้แนะ เพิ่มได้มั้ยคะ
ทำได้ 2 แบบด้วยกัน

1.ตรง textbox เลขที่บิลในรายงานในส่วนรายละเอียด
กดคลิ๊กขวาเลือก เรียงลำดับจากน้อยไปหามากครับ




2.วิธีกำหนด Record Source ของ Report เป็น Query แล้วสั่ง Sort แบบ Ascending ที่ฟิลด์ "เลขที่บิล" ที่อาจารย์บอกมาก็สามารถทำดังนี้




8
ขอบคุณค่ะอาจารย์
ก่อนหน้านี้หนูได้ทดลองใช้วิธีลักไก่หลอกโปรแกรมโดยสร้างฟิลด์ใหม่ [Notจังหวัด] ที่คิวรี่ขึ้นมาอีกหนึ่งฟิลด์ค่ะ
แล้วแยกใส่คำสั่งทั้งสองลงไป สามารถตอบโจทย์ที่ต้องการได้แล้วค่ะอาจารย์



สุดยอด สาย DIY อีกคนเปล่าครับนี้  :shout:

9
ถ้าเป็น [Forms]![frmค้นหา]![text1] or Not [Forms]![frmค้นหา]![text2]
จะสามารถทำได้ แต่ถ้ามี Like ด้วยผมไม่เคยทำครับ
โดยปกติจะสร้างเงื่อนไข โดยใช้ IF check เช่น

IF ISnull(text1) and Not isnull(Text2) then
            กำหนด sql ของ Like "*" & [Forms]![frmค้นหา]![text1] & "*"

elseIF  ISnull(text2) and Not isnull(Text1) then
            กำหนด sql ของ Not [Forms]![frmค้นหา]![text2]
end if

10
ขออนุญาตเพิ่มเติมค่ะ
เบื้องต้นลองตั้งค่าตัวเลือกของ Access ดูก่่อนนะคะว่าได้ไหม ตามในรูปค่ะ


1.เปิด active x ก็พอครับ
2.ส่วนการเปิด macro ทั้งหมดนั้นตอนนี้ไม่แนะนำแล้วครับ เพราะมีอันตรายต่อโปรแกรมฐานข้อมูลได้ครับ
   ตรงส่วนของ Macro จะมีแจ้งเตือนให้กดเป็นแถบสีเหลืองสามารถกดยืนยันตรงนั้นได้เลย
   

11
สมมติว่าเรามีรายชื่อลูกค้ากระจายอยู่ในหลายจังหวัด ทีนี้หนูอยากจะให้ค้นหาโดยละเว้นเฉพาะจังหวัดที่เราระบุใน textbox บนหน้าฟอร์มแล้วสั่งไปที่คิวรี่ให้แสดงข้อมูลทุกจังหวัด ยกเว้นจังหวัดที่เราระบุค่ะ
เช่นระบุว่า กรุงเทพฯ ก็ให้ละเว้นเฉพาะกรุงเทพฯอย่างเดียว นอกนั้นแสดงจังหวัดอื่นขึ้นมาทั้งหมดเลยค่ะ

ในคิวรี่ ที่ฟิลล์ของจังหวัด เราสามารถใส่ Criteria
Not Forms![ชื่อฟอร์ม]![ชื่อtextboxบนฟอร์ม]
เท่านี้ ข้อมูลที่จะนำมาแสดง ก็จะไม่มีจังหวัดนั้นแล้วครับ

12
กำหนดให้เป็นเส้นประแบบไหนครับ

ปกติสามารถกำหนดแบบของเส้นได้โดยไปที่ Tab รูปแบบ >> เส้นกรอบรูปร่าง >> ชนิดเส้น ได้เลย

13
ตอนนี้ ข้อความอยู่ใน ส่วนท้ายของหน้า
ให้ลองเอาไปไว้       ส่วนท้ายของรายงาน    ดูนะครับว่าได้ไหม

ถ้ายังไม่ได้กำหนดให้แสดงส่วนท้ายก็กดคลิ๊กขวา แล้วเลือกส่วนหัวและท้ายรายงานด้วย


14
แก้ไขโค้ดในการตัด กรณี อายุแค่ 1 วัน ก็ให้แสดงว่า 1 วัน ไม่ใช่  0 ปี 0 เดือน 1 วัน
โค๊ด: [Select]
Public Function CalAge(FieldDateOfBirth) As String
Dim DayOfBirth As String
Dim MonthOfBirth As String
Dim YearOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalAge = ""
Else
DayOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date) - 1, [FieldDateOfBirth]), Date), DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date))
MonthOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) Mod 12, DateDiff("m", [FieldDateOfBirth], Date) Mod 12)
YearOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) \ 12, DateDiff("m", [FieldDateOfBirth], Date) \ 12)
CalAge = IIf(Left(YearOfBirth, 1) = 0, "", YearOfBirth & "ปี ") & IIf(Left(MonthOfBirth, 1) = 0, "", MonthOfBirth & "เดือน ") & IIf(Left(DayOfBirth, 1) = 0, "", DayOfBirth & "วัน")
End If
End Function



Public Function CalDay(FieldDateOfBirth) As String
Dim DayOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalDay = ""
Else
DayOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date) - 1, [FieldDateOfBirth]), Date), DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date))
CalDay = DayOfBirth & " วัน "
End If
End Function

Public Function CalMonth(FieldDateOfBirth) As String
Dim MonthOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalMonth = ""
Else
MonthOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) Mod 12, DateDiff("m", [FieldDateOfBirth], Date) Mod 12)
CalMonth = MonthOfBirth & " เดือน "
End If
End Function

Public Function CalYear(FieldDateOfBirth) As String
Dim YearOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalYear = ""
Else
YearOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) \ 12, DateDiff("m", [FieldDateOfBirth], Date) \ 12)
CalYear = YearOfBirth & " ปี "
End If
End Function

15
ท่านดูในโค้ดที่ copy มาว่า เป็นภาษาไทยมาครบไหม

บ้างที่เรา copy Code มาจากเว็บ ภาษาไทยจะเพี้ยน วิธีแก้่คือ
1.กด Copy Code จาก เว็บมา
2.เปิด Excel ขึ้นมา เลือกที่ Cell ได้ก็ได้กดคลิ๊กขวา  >> วางแบบพิเศษ >> มันจะมี ข้อความ Unicode กับ ข้อความ
3.ให้เลือก ข้อความ  แล้วดูว่าโค๊ดที่เรา copy มา เป็นภาษาไทย ถูกต้องหรือไม่
4.ถ้าถูกต้องแล้ว ให้ Copy โค๊ดนี้ไปวาง ในโปรแกรมเรา

16
สร้าง Module ใส่โค๊ดดังนี้

โค๊ด: [Select]
Public Function CalAge(FieldDateOfBirth) As String
Dim DayOfBirth As String
Dim MonthOfBirth As String
Dim YearOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalAge = ""
Else
DayOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date) - 1, [FieldDateOfBirth]), Date), DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date))
MonthOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) Mod 12, DateDiff("m", [FieldDateOfBirth], Date) Mod 12)
YearOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) \ 12, DateDiff("m", [FieldDateOfBirth], Date) \ 12)
CalAge = IIf(Left(DayOfBirth, 1) = 0, "", DayOfBirth & "ปี ") & IIf(Left(MonthOfBirth, 1) = 0, "", MonthOfBirth & "เดือน ") & IIf(Left(DayOfBirth, 1) = 0, "", DayOfBirth & "วัน")
End If
End Function



Public Function CalDay(FieldDateOfBirth) As String
Dim DayOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalDay = ""
Else
DayOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date) - 1, [FieldDateOfBirth]), Date), DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date))
CalDay = DayOfBirth & " วัน "
End If
End Function

Public Function CalMonth(FieldDateOfBirth) As String
Dim MonthOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalMonth = ""
Else
MonthOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) Mod 12, DateDiff("m", [FieldDateOfBirth], Date) Mod 12)
CalMonth = MonthOfBirth & " เดือน "
End If
End Function

Public Function CalYear(FieldDateOfBirth) As String
Dim YearOfBirth As String
If IsNull(FieldDateOfBirth) Then
CalYear = ""
Else
YearOfBirth = IIf(DateDiff("d", DateAdd("m", DateDiff("m", [FieldDateOfBirth], Date), [FieldDateOfBirth]), Date) < 0, (DateDiff("m", [FieldDateOfBirth], Date) - 1) \ 12, DateDiff("m", [FieldDateOfBirth], Date) \ 12)
CalYear = YearOfBirth & " ปี "
End If
End Function

ที่คิวรี่ใส่ SQL
SELECT DOB, CalAge([DOB]) AS Age, CalDay([DOB]) AS [Day], CalYear([DOB]) AS [YEAR], CalMonth([DOB]) AS [Month]
FROM MyTable;

สามารถใช้ชื่อฟังชั่นในการ แสดงผลได้เลยเช่น

ต้องการอายุจากวันเกิดก็ใส่
คำนวนอายุ: CalAge([ชื่อฟิลล์วันเกิด])
ส่วนหาวัน CalDay([ชื่อฟิลล์วันเกิด])
หาเดือน CalMonth([ชื่อฟิลล์วันเกิด])
หาปี CalYear([ชื่อฟิลล์วันเกิด])

หน้า: [1] 2 3 4 ... 50