แสดงกระทู้

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 2 [3] 4 5 6 ... 29
37
If #9:00 AM# < TimeValue(Me.txttime) and TimeValue(Me.txttime) < #4:00 PM# then

38
ห้อง MS Access / : Combo box Date picker
« เมื่อ: 03 ก.ค. 63 , 22:37:11 »
ผมได้ทำฟอร์มตัวอย่างแสดงการเลือก Date Picker ตามลักษณะที่ต้องการ โดยมีการตรวจสอบความถูกต้องของวันที่ระหว่างการเลือก แต่ผมไม่การันตีว่าจะตรวจสอบได้ถูกต้อง 100% หรือมีที่ผิดพลาดที่ไหนหรือไม่นะครับ ลองดูรายละเอียดการทำงานใน comment ภายในโค้ดที่ผมได้เขียนอธิบายไว้แล้วครับ

แก้บัก : ใน Private Sub cbMonth_AfterUpdate() บรรทัดต่อจาก Case 2 ให้แก้เป็น If Me.cbDay >= 29 Then

39
ผมลองค้นกูเกิลด้วยคำว่า ฐานข้อมูลร้านอาหาร จะพบลิงค์วิทยานิพนธ์เรื่อง ระบบจัดการร้านอาหาร Restaurant Management System ไม่ใช่เป็นไฟล์ฐานข้อมูล แต่ก็มีบอกไว้หมดว่ามีเทเบิลอะไร มีหน้าฟอร์มอะไร มีหน้าที่อะไรบ้าง คิดว่าพอจะช่วยได้

หรือจะค้นด้วย access template restaurant ก็จะพบของลิงก์เวปต่างประเทศ แต่จะฟรีหรือตรงความต้องการหรือเปล่า ต้องไปเช็คเองนะครับ

40
ไม่แน่ใจว่าใกล้เคียงที่ต้องการหรือไม่ มีตัวอย่างล็อคอินผู้ใช้แล้วแสดงเมนูเฉพาะของตนเองครับ https://www.thai-access.com/index.php?topic=932.0 แต่ทุกคนที่ใช้ฟอร์มนั้นๆได้ จะมีสิทธิ์เท่ากันทุกอย่าง ถ้าจะกำหนดว่าผู้ใช้คนนี้จะทำอะไรได้บ้างในหน้าฟอร์มนั้นๆ เช่น ดูได้อย่างเดียว หรือแก้ไขได้ด้วย แนะนำว่าเพิ่มเทเบิลของกลุ่มผู้ใช้ซึ่งจะเก็บว่ากลุ่มนี้มีใครบ้าง (คนนึงสามารถอยู่ได้หลายๆกลุ่ม) และเพิ่มเทเบิลสิทธิ์ของกลุ่มนี้ที่มีต่อฟอร์มนั้นๆว่า กลุ่มนี้เมื่อใช้ฟอร์มนั้นแล้ว จะมีสิทธิ์ชื่อว่าอะไรบ้าง เช่น ชื่อสิทธิ์ว่า "AE" (หมายถึง Add และ Edit ได้)   เมื่อเปิดฟอร์มที่ใช้งานขึ้นมา ก็เขียนโค้ดหาจากเทเบิลว่านาย ก. อยู่กลุ่มผู้ใช้ไหนบ้าง และรวมแต่ละกลุ่มที่พบแล้ว นาย ก. มีสิทธิ์รวมทั้งสิ้นอะไรที่ใช้กับฟอร์มนั้นได้บ้าง เมื่อฟอร์มจะทำการรับการป้อนเรคอร์ดใหม่ ก็ตรวจเลยว่าถ้าไม่มีสิทธิ์ A ก็ไม่ให้ทำ อย่างนี้เป็นต้นครับ

41
มันมีทั้ง Server Collation และ Database Collation  ส่วนควรจะเปลี่ยนที่ Server Collation ไปเลยหรือไม่ อันนี้ผมไม่กล้าแนะนำครับ  แต่ถ้าจะแก้ Server Collation คำเตือนมีอะไรบ้าง สิ่งที่ต้องเตรียมทั้งหลายก่อนทำ และวิธีการเปลี่ยนที่ถูกต้อง ให้อ่านใน Server Collation https://docs.microsoft.com/th-th/sql/relational-databases/collations/set-or-change-the-server-collation?view=sql-server-ver15

ส่วนใน Database Collation ผมถึงบอกให้เปลี่ยนแล้วทดสอบทั้งระบบอีกทีให้แน่ใจเสียก่อน  สำหรับวิธีการและคำเตือนอะไรต่างๆ ให้อ่านที่ https://docs.microsoft.com/th-th/sql/relational-databases/collations/set-or-change-the-database-collation?view=sql-server-ver15

42
แสดงเลขคู่ ให้ใช้เงื่อนไขต่อท้ายในใน SQL เป็น WHERE (student.ordinal mod 2 = 0)    และเปลี่ยนเป็น mod 2 = 1 สำหรับเลขคี่ครับ

43
Access 2010 อยู่ที่เมนู File - Save and Publish - Package Solution

ตั้งแต่ Access 2013 เป็นต้นไป ได้ยกเลิกการสร้างไฟล์ setup ให้แก่โปรเจคออกไปแล้ว ต้องไปใช้ซอฟท์แวร์อื่นแทน เช่นที่ได้ยินบ่อยๆคือ Inno Setup ลองไปใช้ดู

44
ไม่แน่ใจนะครับ  ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ แล้วก็ลิงค์มาเป็น Linked Table ใน Access  จากนั้นทดลองเขียน SQL โดยมีเงื่อนไขหาข้อมูลภาษาไทย ทำทั้งใน SQL Server และใน Access ดู นอกจากนี้ เมื่อเปลี่ยน Collation แล้ว น่าจะทำให้ไม่ต้องใส่ Prefix N แม้จะเขียน SQL ในตัว SQL Server เองก็ตาม

ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป


ข้อมูลใน Table แสดงภาษาไทยปรกตินะคะ ไม่ได้แสดง ???? แต่เวลาค้นหาด้วยภาษาไทย ไม่เจอ ถ้าใส่ N'สม' แบบนี้เจอ

อยากรู้ว่าตอนนี้ Server Collation, Database Collation มีค่าเป็นอะไรครับ

Collation ตามนี้ค่ะ


SQL_Latin1_General_CP1_CI_AS เป็น Collation สำหรับ English (United States)  ผมคิดว่าการตั้งไม่ตรงกับภาษาไทย ซึ่งใช้ Collation Thai_CI_AS น่าจะก่อให้เกิดปัญหานะครับ  อยากให้ลองทำตามที่ผมได้แนะนำไปก่อนหน้านี้ (ย้ำว่าทำการทดสอบบนฐานข้อมูลที่โคลนมาแล้วนะครับ ไม่ใช่ทดสอบบนฐานข้อมูลจริง) และตรวจสอบเพิ่มเติมด้วยว่า Windows System Locale ทั้งบนเครื่องที่ติดตั้ง SQL Server และเครื่องที่ใช้ Microsoft Access ได้ตั้งเป็น Thai (Thailand) แล้วหรือยัง เมื่อแก้ไขแล้ว ให้ลองเขียนคิวรี่ทั้งบน SQL Server และบน Microsoft Access โดยไม่ต้องมี prefix N  ดูว่าจะแก้ปัญหาได้หรือไม่

45
ไม่แน่ใจนะครับ  ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ แล้วก็ลิงค์มาเป็น Linked Table ใน Access  จากนั้นทดลองเขียน SQL โดยมีเงื่อนไขหาข้อมูลภาษาไทย ทำทั้งใน SQL Server และใน Access ดู นอกจากนี้ เมื่อเปลี่ยน Collation แล้ว น่าจะทำให้ไม่ต้องใส่ Prefix N แม้จะเขียน SQL ในตัว SQL Server เองก็ตาม

ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป


ข้อมูลใน Table แสดงภาษาไทยปรกตินะคะ ไม่ได้แสดง ???? แต่เวลาค้นหาด้วยภาษาไทย ไม่เจอ ถ้าใส่ N'สม' แบบนี้เจอ

อยากรู้ว่าตอนนี้ Server Collation, Database Collation มีค่าเป็นอะไรครับ

46
ออกตัวไว้ก่อนว่าไม่รู้เรื่องอะไรของ .NET เลยนะครับ แต่ไปอ่านหัวข้อ Remarks ของ OleDbDataReader.Read Method ใน https://docs.microsoft.com/en-us/dotnet/api/system.data.oledb.oledbdatareader.read?view=dotnet-plat-ext-3.1#System_Data_OleDb_OleDbDataReader_Read เขาบอกว่า ตำแหน่งแรกของ OleDbDataReader object จะอยู่ก่อนเรคอร์ดแรก ดังนั้นต้องสั่ง Read method ของ OleDbDataReader object เพื่อดึงเรคอร์ดต่อไป(ซึ่งก็จะทำให้ได้เรคอร์ดแรก)ก่อนอ้างอิงฟิลด์ด้วย   โค้ดของคุณ ถ้าอ่านเรคอร์ดแรกเรคอร์ดเดียว ก็ควรเป็นคำสั่ง dr.Read() แทนที่ 'While dt.Read()  ยังไงก็ตาม ปกติแล้วก็ควรทดสอบว่ามีเรคอร์ดก่อนอ่านจริงด้วยคำสั่ง If dr.HasRows Then อยู่ด้วย

47
ไม่แน่ใจนะครับ  ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ แล้วก็ลิงค์มาเป็น Linked Table ใน Access  จากนั้นทดลองเขียน SQL โดยมีเงื่อนไขหาข้อมูลภาษาไทย ทำทั้งใน SQL Server และใน Access ดู นอกจากนี้ เมื่อเปลี่ยน Collation แล้ว น่าจะทำให้ไม่ต้องใส่ Prefix N แม้จะเขียน SQL ในตัว SQL Server เองก็ตาม

ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป

48
เป็น bug ของ Access 2016 และคาดว่าได้รับการแก้ไขแล้วตั้งแต่เวอร์ชั้น 16.0.6322.1000  ลองอัพเดต Office ดูนะครับ

ข้อมูลจากโพสสุดท้ายใน https://answers.microsoft.com/en-us/office/forum/office_2016-access/access-2016-report-images-still-not-displaying/a0eab74c-a299-4fa2-a38c-26bec448b041

ลิงค์ที่โหลด patch
แต่ให้อ่านรายละเอียดดูก่อนนะครับว่าต้องทำอะไรก่อนอัพเดตด้วยไฟล์นี้หรือไม่ แต่ผมแนะนำว่าควรอัพเดตผ่านระบบอัพเดตของ office เอง  https://support.microsoft.com/en-us/help/3114379/december-8-2015-update-for-access-2016-kb3114379

49
Criteria ที่อยู่บรรทัดเดียวกันใน Query Design View จะเชื่อมแต่ละเงื่อนไขด้วย AND ซึ่งหมายความว่าทุกเงื่อนไขต้องเป็นจริงพร้อมกันเท่านั้นจึงจะนำเรคอร์ดนั้นออกมาให้ แต่สิ่งที่คุณต้องการคือ เงื่อนไขใดๆก็ได้ที่เป็นจริง ซึ่งหมายถึงเชื่อมแต่ละเงื่อนไขด้วย OR   วิธีการที่จะบอก Query Design View ว่าเป็น OR ก็คือ ใส่แต่ละเงื่อนไขให้อยู่กันคนละบรรทัดของ Criteria เท่านั้นเองครับ

50
1. ต้องสร้างตัวแปร IsSaveClicked ในระดับของ form module ตัวนึงที่เก็บสถานะว่าได้กดปุ่ม Save ก่อนจะเกิดการบันทึกหรือไม่ แล้วค่อยทำการปรับปรุง txtCreated, txtCreatedBy, txtModified หรือ txtModifiedBy ภายใน Form_BeforeUpdate event procedure เพียงจุดเดียวตามค่าของตัวแปรนี้

2. Me.Dirty = False และ DoCmd.RunCommand acCmdSaveRecord ทำงานเหมือนกันคือสั่งให้บันทึกเรคอร์ดบนฟอร์มลงฐานข้อมูล ดังนั้นเลือกคำสั่งใดคำสั่งหนึ่งก็พอ

3. Form_BeforeUpdate event procedure จะทำงานเสมอเมื่อจะบันทึกข้อมูลบนฟอร์มลงฐานข้อมูล เมื่อโค้ดในปุ่ม Save สั่งบันทึกปั๊ป โค้ดจะกระโดดมา Form_BeforeUpdate event procedure ทันที และตามด้วย Form_AfterUpdate event procedure  แล้วค่อยกลับมาที่โค้ดบรรทัดต่อไปในปุ่ม Save

4. การตรวจสอบว่าเป็นเรคอร์ดเก่าหรือใหม่ สามารถเช็คจาก Me.NewRecord ได้ จึงคิดว่าไม่ต้องแยกปุ่มบันทึกเรคอร์ดใหม่และเก่าแยกกัน

5. Form_AfterUpdate event procedure เป็นตำแหน่งที่เหมาะสมที่จะวางโค้ดแสดงข้อความว่าได้บันทึกแล้วเอาไว้ที่นี่ เราจะใช้สถานะความเป็นเรคอร์ดเก่าหรือใหม่เพื่อแสดงข้อความที่แตกต่างกัน แต่เนื่องจากเมื่อบันทึกเรคอร์ดแล้ว Me.NewRecord property จะให้ค่าเป็น FALSE เสมอ ดังนั้นใน event นี้จึงเช็คจาก property นี้ไม่ได้ จึงต้องเก็บสถานะว่าเป็นเรคอร์ดใหม่เอาไว้ในตัวแปร IsNewRecord เพิ่มเติมตั้งแต่อยู่ใน  Form_BeforeUpdate event procedure

หมายเหตุ ผมไม่ได้เปิดโปรแกรมคุณหรือทดสอบโค้ดนี้ คุณเอาไปลองหรือปรับปรุงเองนะครับ

โค๊ด: [Select]
Option Compare Database
Option Explicit

Dim IsSaveClicked   As Boolean
Dim IsNewRecord     As Boolean

Private Sub cmdSave_Click()
    IsSaveClicked = True
    Me.Dirty = False
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)

On Error GoTo Err_BeforeUpdate

    If Not IsSaveClicked Then
        If MsgBox("Are you sure you want to save change?", vbYesNo + vbQuestion, "Save Record") = vbNo Then
            Me.Undo
            GoTo Exit_BeforeUpdate
        End If
    End If
    If Me.NewRecord Then
        Me.txtNationalID1 = Me.txtNationalID2
        Me.txtCreated = Now()
        Me.txtCreatedBy = GetUserName()
        IsNewRecord = True
    Else
        Me.txtModified = Now()
        Me.txtModifiedBy = GetUserName()
    End If
   
Exit_BeforeUpdate:
   Exit Sub
   
Err_BeforeUpdate:
   MsgBox Err.Number & " " & Err.Description
   Resume Exit_BeforeUpdate
End Sub

Private Sub Form_AfterUpdate()
    If IsNewRecord Then
        MsgBox "Your record has been successfully saved!"
    Else
        MsgBox "Your edited record has been successfully saved!"
    End If
    IsNewRecord = False
    IsSaveClicked = False
End Sub

Private Sub Form_Undo(Cancel As Integer)
    IsSaveClicked = False
    IsNewRecord = False
End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    IsSaveClicked = False
    IsNewRecord = False
End Sub


51
select ... from ... where ฟิลด์ between #1-sep-2019# and #31-mar-2020#

52
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 09 มิ.ย. 63 , 21:09:53 »
หลังตำแหน่ง 8  ในช่อง Text Qualifier ให้เลือกเป็น {none}   เสร็จแล้วบันทึกเป็น Specification ตัวใหม่  พอเวลาจะ export  ก็ให้อ้าง Specification ตัวใหม่นี้ครับ

53
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 08 มิ.ย. 63 , 15:33:28 »
ถามผมกลับอย่างนี้นี่ผมงงเลย ตกลงคุณไม่ได้เป็นคนสร้าง spec เองเหรอ แล้วคุณไปเอาชื่อ spec จากไหนมาใส่ในคำสั่ง DoCmd.TransferText  ?

เอาอย่างงี้ เปิดคิวรี่แล้วกดตามลำดับ 1 - 6 ที่แสดงครับ สำหรับตำแหน่งที่ 8 ถ้าเลือกเป็น Fixed Width ก่อนกดตำแหน่งที่4 หลังจากเลือก Specification แล้ว ตารางของฟิลด์ (ตำแหน่งที่ 7) จะแสดงตำแหน่งเริ่มต้นและความยาวของฟิลด์ออกมาด้วย ที่นี้ก็ขึ้นกับคุณออกแบบว่าจะให้ export เป็นแบบไหน ออกแบบแบบไหน ในคำสั่ง DoCmd.TransferText ก็ให้ใช้ตัวเลือกเพื่อ export แบบนั้นด้วยนะครับ

ตำแหน่งที่ 4 หมายถึงคลิกที่ปุ่ม Spec... นะครับ

หรือไม่ก็ ลอง export โดยไม่ใช้ spec ด้วยคำสั่ง
DoCmd.TransferText acExportDelim, , qry, myPath, True
ดูว่าได้ผลตามต้องการหรือไม่



54
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 08 มิ.ย. 63 , 11:07:15 »
Short Text กับ nvarchar(255) ไม่น่าจะเป็นปัญหาครับ เพราะ nvarchar(255) จะเก็บตัวอักษรได้**อาจจะ**น้อยกว่า 255  แต่ให้ไปดูว่าใน Specification นั้น เอาฟิลด์นี้ออกมากี่ตัวอักษรมากกว่า

หน้า: 1 2 [3] 4 5 6 ... 29