สมัครสมาชิก

แสดงกระทู้

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 ... 7
1
ถ้าสามารถแก้ฟิลด์ในเทเบิลให้มีความยาว 500 ตัวอักษรได้ เวลาป้อนก็จะถูกจำกัดไปโดยปริยาย  แต่ถ้าไม่ได้ ก็ใส่โค้ดข้างล่างไว้ใน KeyPress event procedure ของ collection
โค๊ด: [Select]
Private Sub collection_KeyPress(KeyAscii As Integer)
    If KeyAscii <> vbKeyBack Then
        If Len(Me.collection.Text) = 500 Then
            KeyAscii = 0
            Msgbox "ข้อความแจ้งเตือน"
        End If
    End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

2
ห้อง MS Access / : Popup ข้อความ
« เมื่อ: 20 มี.ค. 62 , 19:07:20 »
เท่าที่ลองหาตามเวป ถ้ามีจำนวนบรรทัดไม่เกิน 1 หน้าฟอร์ม อาจพอทำได้ ... แต่ถ้าเกิน คิดว่าไม่น่าจะทำได้ ยกเว้นว่าใครจะหาวิธีทำให้รู้ได้ว่าเรคอร์ดแรกที่อยู่บรรทัดติดขอบบนของฟอร์มตอนนี้ คือเรคอร์ดที่เท่าไหร่ ซึ่งอาจไม่ใช่เรคอร์ดที่ 1 ก็ได้ และอาจไม่ได้เป็น Current Record ด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

3
ถ้าจะป้องกันการกดคีย์ภาษาไทยลงเท็กซ์บ็อกซ์ ก็ใส่โค้ดนี้ไว้ใน KeyPress event procedure
โค๊ด: [Select]
Private Sub xxx_KeyPress(KeyAscii As Integer)
    If KeyAscii >= 3585 And KeyAscii <= 3675 Then KeyAscii = 0
End Sub

ถ้าต้องการตรวจสอบว่ามีภาษาไทยอยู่ในเท็กซ์บ็อกซ์หรือไม่ ก็ใช้โค้ดนี้ครับ
โค๊ด: [Select]
    Dim i As Integer
    Dim c As String
   
    For i = 1 To Len(Me.Text2)
        c = Mid$(Me.Text2, i, 1)
        If AscW(c) >= 3585 And AscW(c) <= 3675 Then
            MsgBox "Found"
            Exit Sub
        End If
    Next i
โพสต์นี้ได้รับคำขอบคุณจาก: sjs, kitisak, TIM_cb

4
จากการทดลองเฉพาะกับ Textbox  ได้ข้อมูลเพิ่มเติมว่าสามารถใช้ OnPaint event เพื่อกำหนดค่า Property เหล่านี้ให้แตกต่างกันในแต่ละบรรทัดใน Continuous Form ได้นะครับ แต่ก็มีบางอันที่คุณสมบัติอาจเปลี่ยนไปจากที่กำหนดเมื่อเราคลิกไปที่ Textbox นั้นๆ แต่ถ้าไม่คลิกก็จะไม่มีปัญหาครับ อีกอย่างคือผมไม่ได้เช็คทุก Property นะครับ เช็คเฉพาะ Property ส่วนใหญ่ที่อยู่ในหมวด Format ใน Property Sheet เท่านั้น

Format
DecimalPlace
BackStyle
BackColor
BorderStyle
BorderWidth
BorderColor
SpecialEffect
ScrollBars
FontName
FontSize
TextAlign
FontWeight
FontUnderline
FontItalic
ForeColor
LineSpacing
TopMargin
BottomMargin
LeftMargin
RightMargin
โพสต์นี้ได้รับคำขอบคุณจาก: OddyWriter, ปิ่นณรงค์, Kxess

5
ไม่เคยรู้มาก่อนว่า OnPaint event สามารถควบคุมให้ Unbound Control ในแต่ละบรรทัดของ Continuous Form มีสีที่แตกต่างกันได้ .. ความรู้ใหม่ ขอบคุณครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์

6
สร้างไฟล์รูปภาพที่มีสีตามรหัสสี จะเป็น .png, .jpg, .bmp ก็ได้ ให้ขนาดใหญ่กว่าขนาดที่จะแสดงบนฟอร์มนิดหน่อย บันทึกไฟล์เหล่านี้ด้วยชื่อเดียวกับรหัสสี เช่น สีแดงก็มีชื่อไฟล์ว่า #FF0000.jpg เป็นต้น ในฟอร์มให้ใส่ Image control เพื่อแสดงรูปของสี โดยมี Control Source เป็น ="drive:\folder\" & [Hex] & "\.jpg" ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess

7
ไม่เข้าใจครับ สงสัยจุดไหน ยังไงครับ รายละเอียดด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: Prasert

8
ไม่เคยพบมาก่อนนะครับ แต่ไปอ่านดูสาเหตุจากที่คนอื่นๆพบ เขาก็บอกกันว่าเกิดจากการเขียนโค้ดที่วนลูปเรียก procedure ตัวเอง หรือที่เรียกว่า recursive โดย recursive เข้าไปลึกๆหลายชั้นมากจนระบบมีหน่วยความจำที่เก็บข้อมูลของ procedure ในแต่ละชั้น (เรียกหน่วยความจำนี้ว่า stack) ไม่เพียงพอที่จะรองรับอีกต่อไป หรืออีกสาเหตุก็คือ มีการใช้ตัวแปรที่มากๆๆๆใน procedure นั้นๆ แต่ผมเขียนโค้ดมานาน ก็ยังไม่เคยพบ error แบบนี้

ดังนั้นถ้ารายงานมีการใช้โค้ด VBA ไม่ว่าจากส่วนไหนจากตัวรายงาน ก็ให้เช็คโค้ดนั้นด้วยครับ แต่ถ้าไม่มี ก็แนะนำให้ Compile ก่อน ซึ่งอาจพบข้อผิดพลาดจากจุดอื่น แล้วมีผลกระทบถึง error ตัวนี้ ถ้ายังไม่พบอีก ก็ให้ Decompile ตัวโปรแกรมอีกทีครับ (หาวิธีจากกระทู้เก่าๆได้ครับ **ย้ำว่าให้ทำสำรองไฟล์เก็บไว้ก่อนการทำด้วยนะครับ** ถ้าแก้ปัญหายังไม่ได้ อันนี้ไม่ทราบแล้วครับ เพราะตัวรายงานเปล่าๆที่ไม่มีโค้ด VBA ผมคิดว่าไม่มีสาเหตุอะไรทำให้เกิดปัญหานี้ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Prasert

9
1. ลองดูว่าไฟล์ฐานข้อมูลของ Access มีขนาดใกล้ 2 GB ซึ่งเป็นขนาดสูงสุดที่ Access ให้ใช้ได้หรือเปล่า ถ้าใกล้หรือเต็มแล้ว ก็ต้องทำ Compact and Repair Database ของตัว Access เพื่อกระชับฐานข้อมูลให้เล็กลงก่อนครับ เพราะการลบเรคอร์ด,เทเบิล หรืออะไรต่างๆในไฟล์ Access จะไม่ได้ทำให้ขนาดของไฟล์ลดลงไปในทันทีครับ

2. อยากให้ปรับ SQL จากการอ้างหลายๆเทเบิลใน FROM cluase โดยไม่มีการ JOIN กันเลย แต่ไปใช้เงื่อนไขใน WHERE clause เป็นตัวจับคู่เรคอร์ดระหว่างเทเบิล S,B,W,T แทน ซึ่งผลของ FROM cluse แบบนี้ เป็นไปได้ว่า Oracle จะหาผลทุกเรคอร์ดจากทุกเทเบิลจับคู่กันหมดก่อน แล้วค่อยเอาผมมากรองโดย WHERE cluase เป็นลำดับถัดไป (ลำดับการทำงานของ Oracle-SQL https://oracle.readthedocs.io/en/latest/sql/basics/query-processing-order.html link) ถ้าแต่ละเทเบิลมีแค่ 100 เรคอร์ด เราจะได้ 100x100x100x100 = 100 ล้านเรคอร์ดออกมาก่อน ถึงจะค่อยถูกกรองโดย WHERE cluase อีกที ดังนั้นอยากให้ใส่ JOIN ใน FROM cluase เพื่อเชื่อมเรคอร์ดที่สัมพันธ์กันของแต่ละเทเบิลให้เสร็จก่อนจะมีประสิทธิภาพกว่าครับ ... ***แต่***ก็ไม่แน่ครับ ถ้าตัว Query Processing ของ Oracle ฉลาด มันก็จะไปเอาเงื่อนไขใน WHERE cluase ผนวกเข้าไปคิดพร้อมขั้นตอน FROM cluase เลยก็ได้
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz, Piya125

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

ตย.โค้ด

Dim RS As DAO.Recordset ' ชุดของเรคอร์ดที่อ่านได้
Dim SQL As String
Dim S As String  ' เก็บผลลัพธ์

' สร้าง SQL
SQL = "select ชื่อฟิลด์ as F from ชื่อเทเบิลหรือคิวรี่ where เงื่อนไข order by ฟิลด์ที่ใช้เรียงลำดับข้อมูล"

' เปิดชุดเรคอร์ดที่ได้จาก SQL
Set RS = CurrentDB.OpenRecordset(SQL)

' ทำจนกว่าจะอ่านเรคอร์ดไม่ได้แล้ว
Do Until RS.EOF

     If S = "" Then
          S = RS!F
     Else
          S = S & "," & RS!F  ' ต่อเท็กซ์ในตัวแปรด้วยเครื่องหมาย "," ถ้าก่อนหน้านี้ ตัวแปรมีค่าอยู่ก่อนแล้ว
     End If

     ' อ่านเรคอร์ดต่อไป
     RS.MoveNext

' วนลูปต่อไป
Loop

' ปิดชุดเรคอร์ด
RS.Close

' ต่อจากนี้ก็เอาตัวแปร S ไปใช้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

12
ตอนนำเข้า ระบุหรือเปล่าว่าใช้ | เป็น delimiter
โพสต์นี้ได้รับคำขอบคุณจาก: Un

13
1. ให้คอมไพล์โค้ดก่อนที่จะเอาไปลงเครื่องต่างๆ
2. ที่บอกว่าเปิดได้ หมายถึง เปิดจากตัว Runtime ที่ไปดาวน์โหลดมาใช่ไหม
2. ฟ้องว่าไม่เจอ ข้อความเต็มๆ คืออะไรครับ แสดงรายละเอียดด้วย
3. ถ้าเทเบิลเป็น Linked Table เช็คดีๆว่าแหล่งของเทเบิลต้นทางมีอยู่จริง และพาธที่ลิงค์ไปถูกต้องด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: TIM_cb

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

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

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

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

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