แสดงกระทู้

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 - สันติสุข

หน้า: 1 ... 16 17 18 [19] 20 21 22 ... 29
325
ไม่เข้าใจครับว่าเกี่ยวกับคิวรี่ยังไง เพราะนี่มันภาษา XML นะครับ ไม่ใช่ Access

326
ไม่เคยมีใครทำแบบนี้ เลยสงสัยว่าแล้วจะเอาไปใช้งานยังไงครับ จำนวนฟิลด์ไม่เท่ากัน

327
ลองสร้างไฟล์ .accdb ใหม่ จาก Access 2016 ดูครับ สร้างเทเบิลเปล่าที่มีฟิลด์เดียวสักเทเบิล แล้วเอาไปเปิดในเครื่อง XP ถ้าเปิดได้ แปลว่าไฟล์ที่ใช้งานจริงอาจจะเสียหรือไม่ก็มีการใช้คุณสมบัติที่ไม่มีใน Access 2007 วิธีที่ทำกันอย่างนึงก็คือโหลดเอา Access 2016 Runtime มาใช้งานบนเคริ่องhttps://www.microsoft.com/en-us/download/details.aspx?id=50040  ซึ่งคร่าวๆก็คือ โปรแกรมของฟรีที่แจกให้ใครก็ได้เอาไปใช้เพื่อเปิดใช้งานไฟล์ฐานข้อมูล ซึ่งจะทำงานเหมือน Full Version แต่จะไม่สามารถแก้โครงสร้างเทเบิล แก้ไขคำสั่งแมโครและ VBA โค้ด

328
1. เปิดไม่ได้ มีข้อความแสดงออกมาว่าอะไร
2. ที่เขียน v.7 คือเวอร์ชั่น 2007 หรือไม่
3. สร้างไฟล์นามสกุลอะไร
4. ใช้ Access ระบบ 32 bit หรือ 64 bit ในการสร้างไฟล์ เพราะ Access 32 bit จะไม่สามารถเปิดไฟล์ .mde/.accde ที่สร้างจาก 64 bit

329
ถ้าเป็นผม ผมจะยังคงสร้างเทเบิลรายวันเหล่านั้นไว้ในไฟล์เดียวเหมือนเดิม แล้วเขียนโค้ดหรือแมโครเพื่อ export ข้อมูลออกมาสำหรับเก็บไว้สำรอง 1 วันอย่างที่ต้องการ แล้วค่อยลบข้อมูลทิ้งเพื่อรอรับข้อมูลวันใหม่

แต่ถ้าไม่ต้องการอย่างงั้น และข้อมูลอยู่ในรูปของเท็กซ์หรือเอ็กเซลล์ไฟล์ ก็ลิงค์ไฟล์เหล่านั้นโดยตรงเข้ามาเป็นลิงค์เทเบิลใน Access ได้เช่นกันครับ

330
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 25 ธ.ค. 61 , 11:14:32 »
Visit_Date เปลี่ยนเป็น VisitDate (ไม่แน่ใจ)

331
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 23 ธ.ค. 61 , 16:21:58 »
ในโค้ด ให้แก้คำสั่งเป็น

RS.FindFirst "PID = '" & aPK1 & "' and Visit_No = '" & aPK2 & "' "
หมายเหตุ : ถ้า PID และ Visit_No ตัวไหนที่มี Data Type ในเทเบิลเป็น Numeric ก็เอาเครื่องหมาย ' ออก

และแก้

If RS("Visit_Date") <> aF then
   F = aF
End If


332
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 23 ธ.ค. 61 , 15:10:15 »
=F(PID, Visit_No, Visit_Date)

333
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 23 ธ.ค. 61 , 13:54:43 »
- คอลัมน์ที่จะไม่ให้แสดงค่าซ้ำคือคอลัมน์อะไร
- คอลัมน์นั้นเอามาจากฟิลด์อะไรในเทเบิล

334
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 21 ธ.ค. 61 , 14:21:37 »
1. ฟังก์ชั่น F ไม่ได้ให้เอาไปใส่ในคิวรี่ แต่ให้ใส่ลงในช่อง Control Source ของ VD (ถ้าผมเข้าใจไม่ผิดนะ ว่า VD คือเท็กซ์บ็อกซ์ที่ไม่ต้องการให้แสดงค่าซ้ำ)

2. สิ่งต่อไปก็คือ ต้องหาฟิลด์ Primary Key หรือ Unique Key ทั้งหมดที่ค่ารวมของฟิลด์เหล่านี้สามารถบ่งบอกได้ว่า นี่คือบรรทัดนี้บนฟอร์มเท่านั้น จะไม่มีบรรทัดอื่นที่มีค่ารวมเหมือนกับบรรทัดนี้ ผมไม่รู้ว่า PID+Visit_date+Visit_No+diagcode เพียงพอหรือไม่  แต่ถ้าใช่ ก็ใส่ =F(PID, Visit_Date, Visit_No, DiagCode, VD) ลงใน Control Source ของเท็กซ์บ็อกซ์ VD ครับ

335
1. ไม่น่าจะเป็นไปได้ที่ Doxorubicin2 จะถูกเขียนทับเป็น 62.4 โดยยังไม่คลิกปุ่ม Save  ดังนั้นถ้าเกิด Doxorubicin2 กลายเป็นค่า 62.4 ก็น่าจะแปลได้ว่าเรคอร์ดถูก Save ด้วยวิธีใดวิธีหนึ่งไปแล้ว ให้ลองทดสอบดูครับ เมื่อเป็น 62.4 ในรอบแรกแล้ว และก่อนที่จะแก้ Doseadjust = 90  ก็เปิดดูจากเทเบิลโดยตรงไปเลยว่าตอนนี้ Doxorubicin2 เป็น 62.4 หรือไม่

2. สงสัยว่า AC-regimen มีแค่เรคอร์ดเดียวหรือยังไง ทำไมเวลาสั่ง DLookup(Doxorubicin2, "AC_regimen") จึงไม่มีพารามิเตอร์ตัวที่ 3 ใน DLookup เพื่อกำหนดว่าจะเลือกจากเรคอร์ดไหน

336
ผมคิดว่า มันไม่ได้เกี่ยวกับโค้ด แต่น่าจะเกี่ยวกับการตั้งขอบซ้ายขวาของกระดาษมากกว่านะครับ

337
ให้แก้เป็น

On Error Resume Next
DoCmd.RunCommand acCmdRecordsGoToNext
If Me.NewRecord Or Err.Number <> 0 Then Me.Requery

338
ใส่ Time Interval property ของฟอร์ม เป็นระยะเวลาที่แสดงแต่ละเรคอร์ด หน่วยเป็นมิลลิวินาที

ใน On Timer event procedure ใส่โค้ด

Private Sub Form_Timer()
    On Error Resume Next
    DoCmd.RunCommand acCmdRecordsGoToNext
    If Me.NewRecord Or Err.Number <> 0 Then DoCmd.RunCommand acCmdRecordsGoToFirst
End Sub

ส่วนคิวรี่ไม่ต้องเลือก TOP 1 ใช้คิวรี่ที่แสดงผลทุกเรคอร์ด หรือไม่ก็ผูกเข้ากับเทเบิลไปได้เลย

339
VDO และ PowerPoint อธิบายเรื่อง เข้าถึงหัวใจของปัญญาประดิษฐ์ และความน่าตื่นเต้นของ Deep Learning  https://aiat.or.th/heart-of-ai/?fbclid=IwAR0Emd5APHDq3uVXt53s2ID3FJxzv0uuazEWejViiY3ay6mV2XwUDEswqT8

หมายเหตุ : ไม่แน่ใจว่าเวปของลิงค์ (สมาคมปัญญาประดิษฐ์ประเทศไทย) มีอยู่ในลิงค์ของหัวกระทู้หรือเปล่า แต่ VDO นี้เพิ่งออกมาใหม่ครับ

340
Between IIf(Day(Date())>=3,DateSerial(Year(Date()),Month(Date()),2),DateSerial(Year(Date()),Month(Date())-1,2)) And IIf(Day(Date())>=3,DateSerial(Year(Date()),Month(Date())+1,2),DateSerial(Year(Date()),Month(Date()),2))

ความหมายก็คือ
หาข้อมูลระหว่างวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนนี้, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนที่แล้ว) และวันที่ (ถ้าวันที่ >= 3, ให้เป็นวันที่ 2 ของเดือนหน้า, ถ้าไม่ใช่ก็เป็นวันที่ 2 ของเดือนนี้)

ยังไงก็ตาม ถ้าดูตามเงื่อนไขที่คุณบอกมา จะพบว่าข้อมูลของวันที่ 2 จะนำมาหาผลลัพธ์ถ้าวันนี้เป็นวันที่ 2 เอง และแม้วันนี้จะเป็นวันที่ 3 ซึ่งเป็นวันที่เปลี่ยนเงื่อนไข แต่ข้อมูลของวันที่ 2 (เมื่อววาน) ก็ยังถูกนำมาหาผลลัพธ์อยู่ดี ลองพิจารณาดีๆว่าถูกต้องหรือไม่นะครับ

341
ห้อง MS Access / : Hide Duplicates
« เมื่อ: 01 พ.ย. 61 , 21:08:01 »
แนวทางเท่าที่คิดได้ตอนนี้คือสร้าง ฟังก์ชั่น F ที่รับค่าของทุกฟิลด์ใน Primary Key (หรือ Unique Key) ของบรรทัดนั้นๆ (aPK1 ถึง aPKn) และค่าของฟิลด์ (aF) ที่ต้องการเปรียบเทียบระหว่างบรรทัดนั้นกับบรรทัดก่อนหน้า ส่วนตัวฟังก์ชั่นเองก็คืนค่าของฟิลด์ aF ที่ต้องการแสดงกลับมา ซึ่งก็เป็นไปได้ 2 อย่างคือ ค่าที่ส่งเข้ามา หรือไม่ก็ไม่ต้องแสดงเพราะค่าเท่ากับบรรทัดก่อนหน้า

โค๊ด: [Select]
' โค้ดนี้เป็นแค่แนวทาง ต้องไปปรับปรุงเองนะครับ
Public Function F(aPK1 as Variant , ... , aPKn as Variant , aF as Variant) as Variant
Dim RS As DAO.Recordset

' กรณีเป็นบรรทัดของ New Record ค่าที่ส่งมาจะเป็น NULL
' ก็ไม่ต้องทำอะไร ออกจากฟังก์ชั่นได้เลย
If IsNull(aPK1) Then Exit Function

' กำหนด recordset ของฟอร์มที่โค้ดจะใช้ในการค้นหาเพื่อเปรียบเทียบ
Set RS = Forms("ชื่อฟอร์ม").RecordsetClone

' ทำการรวบรวมทุกเรคอร์ดให้ recordset รู้จัก
RS.MoveLast

' ค้นหาเรคอร์ดที่มีค่าตรงกับ Primary Key ของบรรทัดนั้นๆ
RS.FindFirst " ฟิลด์1 = " & aPK1 & " and ฟิลด์2 = " & aPK2 & ... & " and ฟิลด์n = " & aPKn

' ถ้าเป็นบรรทัดแรก ค่าที่ส่งกลับไปแสดงก็คือค่าที่ส่งเข้ามานั่นเอง
If RS.AbsolutePosition = 0 Then
F = aF
Exit Function
End If

' ย้อนกลับไป 1 เรคอร์ด (บรรทัด)
RS.MovePrevious

' ถ้าค่าของฟิลด์ในบรรทัดก่อนหน้าไม่เท่ากับค่าที่ส่งมา ก็ให้ส่งกลับไปแสดงค่าที่ส่งเข้ามาเช่นกัน
If RS("ชื่อฟิลด์") < > aF Then
F = RS("ชื่อฟิลด์")
End If

' แต่ถ้าเท่ากัน ก็ไม่ต้องส่งอะไรกลับ มันจะเป็น NULL เป็นค่าว่างๆ
End Function

ถ้าเท็กซ์บ็อกซ์ของฟิลด์ T ที่แสดงค่าชื่อว่า txtT  เราก็ใส่ =F([ชื่อฟิลด์ที่1ของ PK],...,[ชื่อฟิลด์ที่ n ของ PK], [T]) ไว้ใน Control Source property ของ txtT นั่นเอง

ตย.การแสดง

เลขเอกสาร(aPK1)   รหัสสินค้า(aPK2)   แผนกผลิต(txtT)   วันที่ผลิต   จำนวนที่ผลิต
A0001      001         CUT      15/11/2018   100
B0003      003                  16/11/2018   300
C0005      005         ASSY      16/11/2018   500
D0007      007                  17/11/2017   700

342
ดีที่สุดคือ เพิ่มฟิลด์ที่เก็บวันเวลาที่บันทึก และถ้าต้องการเรียงลำดับตามเวลาที่อัพเดทด้วย ก็ต้องมีฟิลด์ที่เก็บวันเวลาเมื่ออัพเดตอีกฟิลด์ครับ

หน้า: 1 ... 16 17 18 [19] 20 21 22 ... 29