แสดงกระทู้

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 - Un

หน้า: [1] 2 3 4 5
1
ขอบคุณครับอาจารย์ เดี๋ยวจะลองแบบนี้ดูครับ
จากโพสบนได้ปรับปรุงโค้ดนิดหน่อยนะครับ กรณีที่ครบ 15 ทุกหน้าก็ให้ทำงานตามปกติ ไม่ต้อง Addrow
โพสต์นี้ได้รับคำขอบคุณจาก: Un

2
ผม DIY เอานะครับ
ผมสมมุติตารางหลักชื่อ table1
          ตารางที่ออกรายงานชื่อ Table1Report โดยใช้การ Maketable โดยได้เพิ่ม Field Addrow มาด้วย
โดยใช้
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'เพื่อให้ได้ จำนวนแถวที่ขาดหายไป

แล้วใช้โค้ด Addnew เพื่อเพิ่มแถวที่ขาดหายไปยังตาราง Table1Report
เท่านั้นก็จะได้แถวครบ 15 แถวในหน้าสุดท้ายแล้วครับ โดยโค้ดสามารถดูได้จากปุ่ม เปิดรายงานบนฟอร์มนะครับ
โค๊ด: [Select]
Private Sub Command0_Click()
Dim totalRec As Integer
Dim RS As DAO.Recordset
Dim i As Integer
Dim sql As String
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'หาจำนวนแถวที่ขาดหายไปที่ไม่ครบ 15แถว
If Not totalRec = "15" Then
sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน
        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

For i = 1 To totalRec
    Set RS = CurrentDb.OpenRecordset("table1Report", dbOpenDynaset) 'add แถวที่เหลือไปยังตาราง สำรอง
            RS.AddNew
            RS![Addrow] = " " & i
            RS.Update
  Next
    RS.Close
    Set RS = Nothing
   
    Else 'ถ้าเช็คแล้ว ไม่เกิน 15 คือครบทุกหน้าก็ให้ทำงานที่คำสั่ง ล่าง Else ครับ
    sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน

        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

    End If
   
    DoCmd.OpenReport "rptdemo", acViewPreview
End Sub


และในส่วนของ รายงานแก้เป็นแบบนี้นะครับ
โค๊ด: [Select]
Private Sub รายละเอียด_Print(Cancel As Integer, PrintCount As Integer)
 If PrintCount = 1 Then curTotal = Nz(curTotal, 0) + Nz(Me.Amount, 0)
 End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Un

3
สร้าง textbox และใส่โค้ดแบบที่ผมโพสไปครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Un

4
ข้อที่ 1 ผมมีข้อมูลอยู่ 70 เรคคอด เอามาทำ รายงาน โดยที่ในแต่ละหน้า ต้องการเพียงแค่ 15 เรคคอด
(จากตัวอย่าง 2 เรคคอร์ดนะครับแก้เป็น 15 แทน)
http://www.databasedev.co.uk/report_printing.html link

ข้อที่ 2 ขึ้นหน้าใหม่ โดยแต่ละหน้า มีบรรทัด Sum ด้วย

    Option Explicit     
    Dim curTotal As Currency 'กำหนดตัวแปรไว้บนสุดของโค้ด
ตรงส่วนของ PageHeader เลือกEvent  Format ใส่
    curTotal = 0             'กำหนดให้เท่ากับ 0 เมื่อขึ้นหน้าใหม่
ตรง  DetailSection เลือก Event  Print  ใส่
    If PrintCount = 1 Then
    curTotal = curTotal + Me.Amount  'Me.Amount คือชื่อ textbox
    End if
สร้าง  unbound control ตั้งชื่อ  PageTotal ใส่ Page Footer
ตรง PageFooter's Format ใส่
     Me.PageTotal = curTotal

  เครดิต Allen Browne.
http://allenbrowne.com/ser-11.html link
โพสต์นี้ได้รับคำขอบคุณจาก: Un

5
ห้อง MS Access / : กำหนด Format ตัวเลข
« เมื่อ: 24 เม.ย. 63 , 15:47:22 »
ข้อมูล ยอดเงิน นั้นน่าจะเป็น Datatype text ครับ
ลองใส่
Format([B4], "#,##0.00" )
โพสต์นี้ได้รับคำขอบคุณจาก: Un

6
หน้าเว็บอัพโหลดภาพทำการปรับแต่งใหม่ให้รูปย่อมีขนาดใหญ่ขึ้น(เพิ่มการมองเห็น)ทำให้จำนวนรูปในหนึ่งหน้าน้อยลง จึงเพิ่มตัวเลือกหน้าดูชุดรูปภาพ จำนวน50รูปล่าสุดให้จะได้ย้อนดูรูปได้มากขึ้นเพื่อนำมาใช้ภายหลังหรือกันอัพภาพซ้ำเป็นต้นครับ :shout:


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

7
จากไฟล์ตัวอย่างใช้วิธี Datasheet > ซ้อน Datasheet > ซ้อน..... > ซ้อน Continuous Forms
Datasheet นั้นจะมีรูปแบบ,มุมมองคล้ายกับ Table ครับ

ส่วนที่ทำ Continuous มาปิดท้ายนั้นตอบเผื่อกระทู้ https://www.thai-access.com/index.php?topic=1191 ที่เคยโพสถามใว้นะครับ
ตัว Continuous Forms นั้นเหมือนจะมีอำนาจอยู่ต่ำสุดจึงไม่สามารถอยู่เหนือใครได้ และ Datasheet ยังคงมี + ไม่สามารถซ่อนได้แบบ Continuous อย่างที่ต้องการครับ

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

8
แวะมาโพสรูปเทียบไฟล์เดียวกันเครื่องเดียวกันแต่เปิด-ปิด Visual effects ของ Windows ต่างกัน
ผลคือถ้าปุ่มตั้งค่า Use Theme = Yes ใว้ Visual effects ไม่มีผล  :question:
โพสต์นี้ได้รับคำขอบคุณจาก: Un

9
ได้ข้อมูลมาจากเฟสบุ๊กเพจ "โปรแกรมเมอร์ไทย Thai programmer" ครับ

https://goalkicker.com/?fbclid=IwAR1TjcRyaWd6r_xdj510qNJOu_3B2c9EV_AWjkJ0_lyZqxdBS3bYFHCZERo link

แนะนำเพิ่มเติมว่า สำหรับคนที่ชอบเขียนโปรแกรม ให้ศึกษาวิชา Data Structure (ส่วนนึงอยู่ในหนังสือ Algorithms) และ Algorithms เพราะจะช่วยให้ขยับโลกทัศน์ในการวิเคราะห์และหาวิธีตอบโจทย์ที่ซับซ้อนยิ่งขึ้นได้
โพสต์นี้ได้รับคำขอบคุณจาก: Un

10
มีฟิลด์ SEQ ชนิด Number Long Integer
ต้องการเขียนโคตให้ Run เลขตั้งแต่ที่กำหนด ไปจนหมดเรคคอด
ต้องเขียนยังงัยครับ ขอบคุณครับ
มี 2 แบบไม่รู้ใช่ที่ต้องการไหมนะครับ

แบบที่1
ผมสมมุติมีฟอร์มแบบ Continuous Forms
มี textbox ระบุเลขที่กำหนดชื่อ txtSeqNum
โดยตารางที่จะดำเนินการชื่อ table1
มีฟิลล์ที่จะ รันตัวเลขชื่อ Seq




Private Sub Command0_Click()
Dim db As Database
Dim rs As DAO.Recordset
   Set db = CurrentDb
   Set rs = db.OpenRecordset("table1")   
 rs.MoveFirst
 Do Until rs.EOF
 If Nz(DMax("seq", "table1"), 0) = 0 Then
         rs.Edit
         rs!Seq = Me.txtSeqNum
         rs.Update
Else
         rs.Edit
         rs!Seq = DMax("seq", "table1") + 1
         rs.Update
End If
         rs.MoveNext
Loop
         Me.Requery
End Sub

แบบที่ 2
ถ้าไม่อยากสร้างฟอร์มขึ้นมาเพิ่ม ใช้การสร้าง ปุ่มขึ้นมา 1 ปุ่มแล้วใส่โค้ดนี้เข้าไปเพื่อทำการแก้ไขตาราง ที่ฟิลล์ Seq
โค๊ด: [Select]
Private Sub Command0_Click()
Dim db As Database
Dim rs As DAO.Recordset
Dim IntSeq As Integer
   Set db = CurrentDb
   Set rs = db.OpenRecordset("table1")
   IntSeq = InputBox("ระบุตัวเลขเริ่มต้น", "ระบบรันSeq")   
 rs.MoveFirst
 Do Until rs.EOF
 If Nz(DMax("seq", "table1"), 0) = 0 Then
         rs.Edit
         rs!Seq = IntSeq
         rs.Update
 Else
         rs.Edit
         rs!Seq = DMax("seq", "table1") + 1
         rs.Update
 End If
         rs.MoveNext
 Loop
    End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Un

11

ใช้ Like มาช่วยก็ได้ครับ เจอประโยคนี้ในข้อความก็เข้าเงื่อนไข เช่น

โค๊ด: [Select]
Private Sub Command2_Click()
If Me.Combo1.Value Like "*กรุงไทย*" Then
DoCmd.OpenForm "frm01"
ElseIf Me.Combo1.Value Like "*ไทยพานิชย์*" Then
DoCmd.OpenForm "frm02"
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: Un

12
อยากได้ตัวอย่าง
คลิกปุ่มแล้วเปิดหน้าต่างเลือกไฟล์(Textfile)
เมื่อเลือกแล้ว มีปุ่มกดเพื่อนนำเข้าไฟล์นั้นมาในฐานข้อมูล
ขอบคุณครับ
สมมุติ ตารางที่จะนำเข้าจากไฟล์ CSV ชื่อ table1 นะครับ

โค๊ด: [Select]
Private Sub Command0_Click()
Dim File As FileDialog
Dim getfile As String
Set File = Application.FileDialog(msoFileDialogFilePicker)
With File
.Title = "เลือก ไฟล์ที่จะนำเข้า"
        .Filters.Clear
        .Filters.Add "Text Files", "*.csv"
.AllowMultiSelect = False
End With
If File.Show Then
getfile = File.SelectedItems.Item(1)

DoCmd.TransferText TransferType:=acImportDelim, TableName:="table1", FileName:=getfile, HasFieldNames:=True
MsgBox "นำ้้เข้าเรียบร้อยแล้ว"

End If
End Sub

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

13
รายงานผลการแก้ให้รองรับมือถือ
ตอนนี้ในมุมมองเบื้องต้นสมบูรณ์แล้วนะ  :miao:
รบกวนท่านใดสะดวกลองไปใช้งาน(มือถือ,แท็บเล็ต,คอมฯ)แล้วพบปัญหาหรือมีคำแนะนำใดๆโพสบอกใว้ได้เลยนะครับ ขอขอบคุณครับ :love:


ปล.เว็บ"บอร์ดเรียนรู้ Access สำหรับคนไทย"ตอนนี้ใช้ Simple Machines Forum(SMF 2.0.15)ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Un

14
เว็บบอร์ดวันนี้มีการเพิ่มปุ่ม ตอบกระทู้ ให้กดกันง่ายขึ้นครับ(ข้างๆปุ่ม"อ้างถึง" :sweat:)
ปล.แผ่นป้ายช่วยลงไปกดกันสักหนึ่งทีพอครับ :love:
โพสต์นี้ได้รับคำขอบคุณจาก: Un

15
ลองคำสั่งแบบ API ดูไม๊ครับ เผื่อช่วยได้

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

การใช้งานแทน Sendkey

    keybd_event &HD, 0, 0, 0
    keybd_event &HD, 0, &H2, 0

จะเป็นการส่งคีย์ ENTER
โพสต์นี้ได้รับคำขอบคุณจาก: Un

16
อ้างถึง
เลยใช้คำสั่ง
ให้ไป Setfocus ที่ปุ่ม แล้ว Sendkey {Enter} มันใช้ได้ดีเลยครับ ติดที่มันสั่ง
 Numlock

ใช้ Event  Enter ของปุ่มช่วยก็ได้ครับเช่น
สมมุติปุ่มชื่อ ShowMap
Private Sub ShowMap_Enter()
คำสั่งแสดงแผนที หรือคำสั่งที่ต้องการ
End Sub

ที่ปุ่มที่ต้องการกดก็สั่ง

Private Sub Command1_Click()
Call ShowMap_Enter
End Sub

ถ้าจะทำเงื่อนไขต่อไปเลยแบบไม่ต้องกดปุ่มอื่นๆ ก็ใช้
Call ShowMap_Enter
ได้เลยซึ่งเป็นการประยุกต์ใช้คำสั่งแทนการกด Enter เองได้เลย แบบนี้ทำให้ SendKey ไม่ต้องใช้อีก และไม่ต้องสั่ง setfocus ด้วย
หรือถ้าท่านสั่ง Setfocus ปุ่มShowMap      Event Enter ก็จะทำงานทันทีเช่นกันคับ โดยไม่ต้อง Call อีก
โพสต์นี้ได้รับคำขอบคุณจาก: Un

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