แสดงกระทู้

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 ... 19
19
ถ้าฟิลด์ Customer_ID มีประเภทข้อมูลเป็น Text  ต้องเขียนเป็น ... Customer_ID = '" & FromCustomerID & "'" ,dbFailOnError

หมายเหตุ : ถ้าคำสั่งเดิมถูกต้องแล้ว ยังไงก็ให้เติมส่วนสีแดงด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess

20
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 17:32:14 »
เหมือนว่าต้องใช้ Access 2007 เปิดเท่านั้น ผมมีแต่ Access 2010 เปิดมา ก็มีปัญหาแต่ต่างออกไปเลย ทำอะไรไม่ได้ ผมแนะนำว่าให้คุณสร้างฐานข้อมูลเปล่าสักตัว แล้ว import ทุกอย่างจากโปรแกรมตัวนี้เข้ามาใหม่ อาจจะช่วยให้ทำการ compile ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

21
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 09:00:11 »
มีสั่งรันแมโคร Autoexec หรือสั่งให้ฟอร์มทำงานทันทีเมื่อเข้า Access หรือไม่ ถ้ามี ก่อนเข้า Access ให้กดคีย์ SHIFT ค้างไว้จนกว่าหน้าต่างของ Access จะแสดงเรียบร้อยแล้ว แล้วลอง compile อีกครั้งครับ หรือถ้าโปรแกรมและข้อมูลไม่เป็นความลับ ลองโหลดขึ้นเวปบอร์ดนี้เพื่อให้ตรวจสอบครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

22
ขาดบางตัวไป และควรเว้นวรรคสักหน่อยในแต่ละคำใน SQL

sql = "SELECT * FROM SecName WHERE NameEmp = '" & Me.Combo1 & "'"

และพอกำหนด .RecordSource แล้ว ระบบจะอ่านเรคอร์ดเข้ามาแสดงบนฟอร์มอยู่แล้ว ไม่จำเป็นต้องสั่ง .Requery ให้ทำงานซ้ำครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Piyawat Sasikul

23
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 01 ส.ค. 63 , 18:28:43 »
ลอง compile แล้วดูว่ามีแจ้งที่ผิดที่ไหนในโค้ดหรือไม่ ถ้าไม่มี อาจเป็นไปได้ว่ามีการแก้ procedure ที่จุดไหนแล้วมีจำนวน/ประเภทของ argument ที่ส่งไป procedure นั้น แตกต่างจากเดิม
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

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

25
ห้อง MS Access / : รวมตัวเลขไม่ได้
« เมื่อ: 29 ก.ค. 63 , 14:14:16 »
ไม่ได้ไปดูรายละเอียดนะครับ แต่จะแนะนำว่าให้เลี่ยงการใช้ Round(N, D) เพราะเมื่อหลักต่อไปที่จะปัดเศษมีค่าเป็น 5 เขาจะไม่ปัดขึ้นเสมอไป เขาจะใช้วิธี Banker Rounding ซึ่งตามกฏจะปัดขึ้นหรือลงไปยังเลขคู่ที่ใกล้ที่สุด  เช่น Round(0.245, 2) ถ้าปัดขึ้นจะเป็น 0.25 แต่ปัดลงจะได้ 0.24 ดังนั้นเขาก็ปัดลงแทน จะได้เป็น 0.24  และ Round(0.235, 2) ก็จะได้ 0.24 เช่นกัน   แต่ Access ยิ่งมั่วไปกว่านั้นในค่าตัวเลขบางตัว เช่น Round(1.245, 2) ก็ควรจะเป็น 1.24 แต่กลับเป็น 1.25 ไปซะอย่างงั้น ซึ่งขัดกับ Banker Rounding ไปเสียอีก

ถ้าจะปัดเป็น 2 หลัก ให้ใช้เป็น CDec(Format(N, "0.00")) ดีกว่าครับ แต่ถ้าแสดงเฉยๆไม่ได้เอาไปคำนวน ก็ใช้แค่ Format(N, "0.00") ก็พอ

อีกอย่างที่ขอแนะนำคือ อย่าใช้ประเภทข้อมูล Number-Single หรือ Double เพราะจะเก็บค่าที่ไม่ตรงกับข้อมูล โดยจะมีผิดเพี้ยนในทศนิยมตำแหน่งหลังๆได้ ควรใช้ Number-Decimal แล้วกำหนด Scale property เป็นจำนวนทศนิยมที่ต้องการเก็บ จะทำให้การคำนวนตัวเลขที่มีทศนิยมได้ตรงตามความจริง
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

26
ตัวแปรที่เก็บชื่อและID ควรกำหนดไว้เป็นตัวแปร Public (Public strfullname As String) อยู่ใน Access Module ต่างหาก และเขียนโค้ดใน Form_Load event procedure ของแต่ละฟอร์ม เพื่อนำค่าในตัวแปรไปแสดงออกเท็กซ์บ็อกซ์บนฟอร์มนั้นๆ
โพสต์นี้ได้รับคำขอบคุณจาก: พิชญะ ชัยชนะ

27
พึ่งคิดได้ว่าก็ใช้คำสั่งให้ทุกปุ่มที่มีซ่อนก่อนแล้วค่อยมาสั่งแสดงตามตัวเลขที่หลังอีกที  :meaw:

โค๊ด: [Select]
Private Sub Text5_AfterUpdate()

Me.Command1.Visible = False
Me.Command2.Visible = False
Me.Command3.Visible = False
Me.Command4.Visible = False

GetNum = Me.Text5
    Select Case GetNum
        Case "1": Me.Command1.Visible = True
        Case "2": Me.Command2.Visible = True
        Case "3": Me.Command3.Visible = True
        Case "4": Me.Command4.Visible = True
    End Select
End Sub

โค้ดข้างบนสามารถลดรูปลงมาได้นะครับ พร้อมกับรองรับกรณี Text5 ไม่ได้เป็นตัวเลข

   Dim I   As Integer
   Dim J   As Integer

   If IsNumeric(Me.Text5) Then J = CInt(Me.Text5)
   For I = 1 to 12
      Me("command" & Cstr(I)).Enabled = (I = J)
   Next

แต่สงสัยว่าทำไมต้องทำ 12 ปุ่ม สร้างปุ่มเดียวแล้วพิจารณาการทำงานของโค้ดในปุ่มนั้นด้วยค่าจาก Text5 ไม่ง่ายกว่าหรือ ?
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, ิboonyarit

28
ผมไม่มีมอนิเตอร์ 2 จอ เลยทดสอบไม่ได้ว่าให้ผลจริงแค่ไหน แต่ถ้าจอเดียว ก็ให้กำหนด Popup property ของฟอร์มเป็น Yes ก่อน และใส่โค้ดนี้ไว้ใน OnLoad event procedure ของฟอร์ม

Private Sub Form_Load()
    DoCmd.MoveSize ซ้าย, บน
End Sub

โดยที่ซ้ายและบน คือความห่างจากขอบซ้ายและขอบบนของจอ มีหน่วยเป็น twips (เท่ากับ 567 * เซ็นติเมตร) ดังนั้นต้องหาเองว่าจอที่ 2 มีขอบซ้ายเป็นเท่าไหร่กันแน่
โพสต์นี้ได้รับคำขอบคุณจาก: ittiphol, PNR

29
If #9:00 AM# < TimeValue(Me.txttime) and TimeValue(Me.txttime) < #4:00 PM# then
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

30
ห้อง 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, kitisak, MAKI

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

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

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

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

34
ไม่แน่ใจนะครับ  ลองสร้าง 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  ดูว่าจะแก้ปัญหาได้หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: PNR, mtaccess

35
ไม่แน่ใจนะครับ  ลองสร้าง 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 มีค่าเป็นอะไรครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

36
ออกตัวไว้ก่อนว่าไม่รู้เรื่องอะไรของ .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 อยู่ด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: treethep

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