แสดงกระทู้

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 - 001Jetnipit

หน้า: [1] 2 3 4 5
1
อ่านแล้วผมนึกถึงตอนเขียน VB ใช้ Application.Doevents() ใน VBA Access ใช้เหมือนกันหรือเปล่าผมยังไม่เคยใช้
ในตอนที่เราสั่งทำงานอะไรสักอย่างนาน ๆ ก็จะใช้ progress bar เพื่อแสดงสถานะที่ทำถึงไหนแล้วก็ใส่ Application.Doevents() ไว้ในการทำงานมันทำให้สามารถเลื่อนขยับทำอย่างอื่นได้ด้วย

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

2
มีคนถามว่า อยากให้เช็คเท็กซ์บ็อกซ์ ถ้าว่างให้เปลี่ยนสีให้หน่อย
Text box name = HomeMobile

What event should I use on the report: • Private Sub Report_Load() • Private Sub Report_Open(Cancel As Integer)

Private Sub Report_Open(Cancel As Integer)

If IsNull(Textbox.Value) = True Then
Textbox.BackColor = vbRed

End If

End Sub

อีกคำตอบ


You could try with the Format or Print event, and also arrange for the colour to be reset:

Textbox.BackColor = IIf(IsNull(Textbox.Value), vbRed, vbWhite)

อันนี้คำถามว่า อยากให้ฟอร์มโหลดขึ้นมาแล้วเปลี่ยนสีทุกกล่องข้อความ

You can place this code in the Onload event of your form and this will change all of your boxes at one time.
Delcare the control:
Dim tb as Control
Code:
 For Each tb In Me.Controls
        If TypeOf tb Is TextBox Then
            tb.BackColor = 'your color goes here
        End If
    Next
-----------------------------------------------------------------------------
อันนี้โค้ดของคนถาม
For Each Ctl In Detail.Controls
'ตรวจสอบเฉพาะที่เป็นประเภท TextBox / Combo Box
If Ctl.ControlType = acTextBox Or Ctl.ControlType = acComboBox Then 'Or ctl.ControlType = acCheckBox
'และเฉพาะที่ชื่อชื้นต้นด้วย Status
If Ctl.Name Like "Status*" Then
'ถ้าได้ค่าว่างๆ
If Ctl &"" = "Less than 1 day" Then
isBlank = "LT"
Elsef Ctl &"" = "More than 1 day" Then
isBlank = "MT"
Elsef Ctl &"" = "Card expired" Then
isBlank = "C"
Exit For
End If
End If
Next
If isBlank = "LT" Then
Ctl.BackColor = vbYellow
Elself isBlank = "MT" Then
Ctl.BackColor = vbGreen
ElseIf isBlank = "C" Then
Ctl.BackColor = vbRed
Exit Sub
End If
End if

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

3
ลองแก้ Ctl.BackColor เป็น StatusSamsung_Age.BackColor = RGB(0, 255, 0) ดูครับ
StatusSamsung_Age คือชื่อ
หรือไม่ก็คงตรงที่มีคำสั่งให้ Exit For (ผมไม่รู้จักหรือเคยใช้ :question:)


ปล.ส่วนที่เป็นโค้ดก็อบมาวางเลยก็จะดีนะ :dizzy:
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

4
docmd.runsql "Delete from BB where รหัส not in (select รหัส from AA)"
หรือ สร้าง Delete คิวรี่ จากตาราง BB ตรงฟิวด์รหัส ใส่ criteria not in (select รหัส from AA)
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

5
ไม่มีครับ ผมเช็คแล้ว เมื่อกี้ก็เช็คแล้วครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

6
ลองตามนี้
วิธีที่1 control ตัวอื่นทั้งหมด กำหนด properties tabStop เป็น No
วิธีที่ 2 ใช้ setFocus ที่ control ที่ต้องการ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

7
น่าสนใจมากเลยค่ะอาจารย์
ขออนุญาตคุณ001jetnipitด้วยนะคะ

รบกวนอาจารย์ OddyWriter ขอไฟล์ตัวอย่างแบบ 32 bit ด้วยได้ไหมคะ
หนูจะเอาไปปลุกผีงานเก่าที่เคยถอดใจล้มเลิกไปแล้วค่ะ

แต่หนูลองเอาไฟล์ตัวอย่าง64bit ของอาจารย์ไปรันกับ 32bit มันก็ทำงานได้ปกตินะคะ
ไม่ทราบว่าจริงๆแล้วจะมีผลแตกต่างอื่นๆหรือเปล่าคะ

จริงดิ ผมส่งผิดไฟล์เหรอเนี่ย ดันส่ง 32 Bit ไปซะงั้น ถ้าจะ Run บน 64 Bit ให้แก้โค้ด Function เป็น PtrSafe Function ครับ



windows คุณเป็น 64 Bit ไม่ได้หมายความว่า Access คุณจะเป็น 64 bit หรือ 32 Bit นะครับ โปรดเข้าใจให้ถูกต้อง

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

8
ขอบคุณค่ะอาจารย์ OddyWriter
บังเอิญโจทย์ของคุณ 001jetnipit ตรงกับที่หนูเคยทำเล่นลองผิดลองถูกอยู่ระยะหนึ่ง
ตอนหลังหนูไม่ได้ใช้เทคนิคนี้แล้วเพราะเบื่อผลข้างเคียงของมันก็คือ
ถ้าเครื่องเราเปิดใช้โปรแกรมหรือโฟลเดอร์อื่นอยู่ก่อน
เจ้าฟอร์มป็อปอัพของเรามันไม่ยอมป็อปอัพซะงั้น แต่กลับไปแอบอยู่ข้างหลังเฉยเลย
เข้าใจว่าอาจเป็นเพราะ Access ถูกเราสั่งให้ Minimize หรือเปล่า

งั้นเดี๋ยวลองดู จขกท. ว่าเค้าว่าไง
เพราะวิธีการที่ผมทำไว้มันซับซ้อนนนน แต่ไม่น่าจะเกิดปัญหาอย่างที่ว่า
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

9
ขอบคุณค่ะอาจารย์ OddyWriter
บังเอิญโจทย์ของคุณ 001jetnipit ตรงกับที่หนูเคยทำเล่นลองผิดลองถูกอยู่ระยะหนึ่ง
ตอนหลังหนูไม่ได้ใช้เทคนิคนี้แล้วเพราะเบื่อผลข้างเคียงของมันก็คือ
ถ้าเครื่องเราเปิดใช้โปรแกรมหรือโฟลเดอร์อื่นอยู่ก่อน
เจ้าฟอร์มป็อปอัพของเรามันไม่ยอมป็อปอัพซะงั้น แต่กลับไปแอบอยู่ข้างหลังเฉยเลย
เข้าใจว่าอาจเป็นเพราะ Access ถูกเราสั่งให้ Minimize หรือเปล่า
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

10
ขออนุญาตตอบคุณ 001jetnipit นะคะ
เห็นว่าคุณได้ทำฟอร์มป็อปอัพไว้แล้ว ลองทำอย่างนี้ดูนะคะ

ที่อีเวนต์ เมื่อเปิด ของฟอร์มป็อปอัพ ใส่คำสั่งนี้ลงไป (ต้องเป็นฟอร์มป็อปอัพนะคะ)
 DoCmd.RunCommand acCmdAppMinimize

และที่อีเวนต์ เมื่อปิด ของฟอร์มป็อปอัพ ใส่คำสังนี้ลงไปเพื่อคืนค่าเดิมค่ะ
 DoCmd.RunCommand acCmdAppRestore
หรือ
 DoCmd.RunCommand acCmdAppMaximize

ลองประยุกต์ใช้ดูนะคะ

วิธีการง่ายกว่าผมมาก (จะคิดเยอะทำไมเนี่ย)
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

11
ขออนุญาตตอบคุณ 001jetnipit นะคะ
เห็นว่าคุณได้ทำฟอร์มป็อปอัพไว้แล้ว ลองทำอย่างนี้ดูนะคะ

ที่อีเวนต์ เมื่อเปิด ของฟอร์มป็อปอัพ ใส่คำสั่งนี้ลงไป (ต้องเป็นฟอร์มป็อปอัพนะคะ)
 DoCmd.RunCommand acCmdAppMinimize

และที่อีเวนต์ เมื่อปิด ของฟอร์มป็อปอัพ ใส่คำสังนี้ลงไปเพื่อคืนค่าเดิมค่ะ
 DoCmd.RunCommand acCmdAppRestore
หรือ
 DoCmd.RunCommand acCmdAppMaximize

ลองประยุกต์ใช้ดูนะคะ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

12
ใช้ Access 64Bit หรือ 32ฺBit ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

13
ลองเช็ค Event ของฟอร์มเมื่อเปิดได้ไปกำหนดเป็น Maximize ของฟอร์มหรือเปล่าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

14
1.สร้างShortcutโปรแกรมaccess
2.คล๊กขวาที่Shortcut เลือก Properties
3.Run เลือก Minimized

โปรแกรมaccessของเรา
ตั้งค่าโปรแกรม
Option > Current Database

Display Form เลือกฟอร์มที่เราต้องการให้แสดง
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

15
การ Linked table ไม่สามารถแก้ไขหรือเพิ่มอะไรได้ ต้องไปแก้ที่ไฟล์excelข้างนอกเท่านั้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

16
ว่าจะไม่ยุ่งกับกระทู้นี้ เพราะเห็นคุณ PNR ตอบอยู่
แต่อดไม่ได้จริง เพราะรู้สึกว่ากำลังจะทำให้ได้ฐานข้อมูลที่สร้างปัญหาได้ในอนาคต

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

สำหรับการแก้ปัญหาของคุณนั้น ทำได้ง่ายมากคือ
1. ลบฟิลด์ "ชนิด" ในตารางหลักออกไป
2. ถ้าต้องการรู้ว่าคนไหนมีชนิดอะไร ให้สร้างคิวรี ที่เชื่อมข้อมูลรหัสของทั้ง 2 ตาราง แล้วดึงฟิลด์ รหัส,ชื่อ,ชนิด มาแสดงผล ก็จะได้อย่างที่คุณต้องการแล้วครับ

ทั้งนี้ยกเว้นคุณมีจุดประสงค์อื่น เช่นต้องการบันทึกการเปลี่ยนแปลงชนิด แบบนี้ก็ต้องสร้างตารางบันทึกการเปลี่ยนแปลงชนิด ซึ่งก็ต้องมีฟิลด์วัน-เวลา เพื่อเก็บข้อมูลด้วย
ผมได้รีโมทไปทำแบบนั้นให้เขาแล้วครับอาจารย์
โดยใช้คิวรี่ในการเชื่อมข้อมูลมาแสดงครับ
1.ตอนแรกไม่ค่อยเข้าใจโจทย์เมื่อได้เห็นการออกแบบก็ทำให้แล้วเป็น ถ้าแสดงข้อมูลธรรมดา
โค๊ด: [Select]
SELECT [TBLข้อมูลหลัก].[รหัส], [TBLข้อมูลหลัก].[ชื่อ], [TBLชนิด].[ชนิด]
FROM TBLชนิด INNER JOIN TBLข้อมูลหลัก ON [TBLชนิด].[รหัส] = [TBLข้อมูลหลัก].[รหัส];


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

17
ว่าจะไม่ยุ่งกับกระทู้นี้ เพราะเห็นคุณ PNR ตอบอยู่
แต่อดไม่ได้จริง เพราะรู้สึกว่ากำลังจะทำให้ได้ฐานข้อมูลที่สร้างปัญหาได้ในอนาคต

คำถามคือสาเหตุที่ต้องการฐานข้อมูลแบบในข้อความแรกคืออะไร
ทั้งนี้เพราะในระบบฐานข้อมูลนั้นควรจะเก็บข้อมูล Non Key แบบเชิงเดี่ยว

เพราะถ้ามีข้อมูลชุดเดียวกันอยู่ใน 2 ตาราง มันจะทำให้เกิดความสับสนเมื่อใช้งานไปนานๆ ได้

สำหรับการแก้ปัญหาของคุณนั้น ทำได้ง่ายมากคือ
1. ลบฟิลด์ "ชนิด" ในตารางหลักออกไป
2. ถ้าต้องการรู้ว่าคนไหนมีชนิดอะไร ให้สร้างคิวรี ที่เชื่อมข้อมูลรหัสของทั้ง 2 ตาราง แล้วดึงฟิลด์ รหัส,ชื่อ,ชนิด มาแสดงผล ก็จะได้อย่างที่คุณต้องการแล้วครับ

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

18
งั้นของผมควรใช้วิธีแรกใช่ไหมครับ

แล้วแต่การใช้งานครับ ลองสร้าง คิวรี่ใหม่แล้วเอา SQL นี้ไปวางแล้วรันดูครับ

โค๊ด: [Select]
SELECT DLookUp("ชนิด","TBLชนิด","รหัส = '" & [รหัส] & "'") AS ชนิด, [TBLข้อมูลหลัก].*
FROM TBLข้อมูลหลัก;
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

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