แสดงกระทู้

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 ... 19
1
ห้อง 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
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

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

3
แสดงเลขคู่ ให้ใช้เงื่อนไขต่อท้ายในใน SQL เป็น WHERE (student.ordinal mod 2 = 0)    และเปลี่ยนเป็น mod 2 = 1 สำหรับเลขคี่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

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

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

5
ไม่แน่ใจนะครับ  ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ link แล้วก็ลิงค์มาเป็น 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  ดูว่าจะแก้ปัญหาได้หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: PNR, mtaccess

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

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


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

อยากรู้ว่าตอนนี้ Server Collation, Database Collation มีค่าเป็นอะไรครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

7
ออกตัวไว้ก่อนว่าไม่รู้เรื่องอะไรของ .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 link เขาบอกว่า ตำแหน่งแรกของ OleDbDataReader object จะอยู่ก่อนเรคอร์ดแรก ดังนั้นต้องสั่ง Read method ของ OleDbDataReader object เพื่อดึงเรคอร์ดต่อไป(ซึ่งก็จะทำให้ได้เรคอร์ดแรก)ก่อนอ้างอิงฟิลด์ด้วย   โค้ดของคุณ ถ้าอ่านเรคอร์ดแรกเรคอร์ดเดียว ก็ควรเป็นคำสั่ง dr.Read() แทนที่ 'While dt.Read()  ยังไงก็ตาม ปกติแล้วก็ควรทดสอบว่ามีเรคอร์ดก่อนอ่านจริงด้วยคำสั่ง If dr.HasRows Then อยู่ด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: treethep

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

ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

9
เป็น 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 link

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

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

11
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

โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

12
select ... from ... where ฟิลด์ between #1-sep-2019# and #31-mar-2020#
โพสต์นี้ได้รับคำขอบคุณจาก: bgfc

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

14
ห้อง 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
ดูว่าได้ผลตามต้องการหรือไม่


โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

16
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 05 มิ.ย. 63 , 22:39:30 »
- ตรวจการกำหนดประเภทข้อมูลและความยาวของฟิลด์ข้อมูลที่เราตั้งเอาไว้ใน "QueryExportToSQLSERVER Export Specification" เพราะเมื่อเปลี่ยนฐานข้อมูลจาก Access ไปเป็นตัวอื่น สิ่งต่างๆข้างต้นอาจแตกต่างไป

- เปลี่ยนจาก
Const myPath As String = "C:\Exportfile\Test.csv"
ไปเป็น
Dim myPath As String
myPath = "C:\Exportfile\Test" & txtDivision & txtLoacation & ".csv"
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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