แสดงกระทู้

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 ... 17 18 19 [20] 21 22 23 ... 32
343
ห้อง MS Access / : การ run number โดยไม่ใช้ autonumber
« เมื่อ: 28 มิ.ย. 61 , 10:33:30 »
รบกวนสอบถามนะคะ มือใหม่มากๆ ต้องการ การ run number โดยไม่ใช้ autonumber จุดประสงค์เพื่อให้ข้อมูลซ้ำกันได้ แต่ต้องการให้แสดงค่าเริ่มต้นเมื่อเพิ่มระเบียนใหม่ ต้องการให้ไปเอาค่า number ในระเบียนสุดท้ายมา + 1 ตรง sub on click ต้องกำหนดอย่างไรคะ หรือมีวิธีอื่นแบบไหน รบกวนผู้รู้ด้วยนะคะ เพิ่งหัดทำครั้งแรกค่ะ ความรู้งูๆปลาๆมากๆ

ฟอร์มที่จะสร้างเป็นแบบไหนครับ
อันนี้เป็นตัวอย่าง การสร้าง Running Number แทน AutoID นะครับ
ใช้การค้นหาค่าส่าสุดจากตารางเป้าหมายแล้วนำมา+1 เมื่อกดเปลี่ยนระเบียนใหม่

คำสั่งบน Module
โค๊ด: [Select]
Function getDigits(s As String) As String
    Dim retval As String
    Dim i As Integer
    retval = ""
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next
    getDigits = retval
End Function


คำสั่งที่ปุ่ม CommandBotton ที่ใช้กดเพื่อขึ้นระเบียนใหม่

โค๊ด: [Select]
Private Sub AddNewRecord_Click()
DoCmd.GoToRecord , , acNewRec
If Me.NewRecord = True Then
    Dim strOldID As String
    Dim lngCurrentNumber As Long
    Dim lngNextNumber As Long
   
    If IsNull(DLast("[NO]", "tblDATA")) Then
    Me.No = "1"
    Else
    strOldID = DLast("[NO]", "tblDATA")
    Debug.Print strOldID
   
    lngCurrentNumber = getDigits(strOldID)
    Debug.Print lngCurrentNumber
    lngNextNumber = lngCurrentNumber + 1
    Debug.Print lngNextNumber
 
    Me.No = lngNextNumber
   
End If
      End If
     
End Sub

หมายเหตุ
tblDATA คือตารางที่ Bound กับฟอร์ม

DLast("[NO]", "tblDATA ส่วน NO นี้คือชื่อ Field ในตารางที่จะหาค่าล่าสุดเพื่อมา Running Number

ตัวอย่างด้านล่าง

344
ลองดูตัวอย่างนี้นะครับ

เวลาจะกด Export คุณอาจจะนำ คำสั่งนี้ต่อท้ายไปตอนกดเปิดรายงานนะครับ

วิธีใช้คือ ที่ปุ่มกดเปิดรายงาน
ใส่ Call ExportExcel()


ตัวอย่างคำสั่งครับ

Sub ExportExcel()
Dim strReportName As String
Dim strPathOUT As String
Dim OpenTarget As Object
Set OpenTarget = CreateObject("Shell.Application")

strReportName = "ReportName"
strPathOUT = CurrentProject.Path & "\ " & strReportName & ".xls"


DoCmd.OutputTo acOutputReport, strReportName, acFormatXLS, strPathOUT

OpenTarget.Open (strPathOUT)
End Sub


หมายเหตุ ReportName คือชื่อของ Report ที่เราจะ Export ออกไปเป็น Excel นะครับ

345
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 26 มิ.ย. 61 , 15:02:42 »
ลองตั้งค่า เปิดใช้ Macro VBA ตามนี้ดูครับว่าได้ไหม
https://www.ugetproject.com/wp/ms-office-access/ตั้งค่าให้vbaทำงาน.html

อีกอย่างคือ ผมสร้างโปรแกรมตัวนี้ ด้วยการตั้งค่า Location เป็นไทย ถ้าท่านตั้งเป็นที่อื่นต้องแก้เป็นไทยให้เหมือนกัน
วิธีแก้กดที่ RUN > intl.cpl > administrative > language for non-Unicode programs > change system locale

346
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 26 มิ.ย. 61 , 11:35:37 »
ส่วนท้ายที่ผมโพสผมจะแนบตัวอย่างอยู่ด้วยครับ


ชื่อ database.rar
หรือถ้าสะดวกลง Treamveiwer แล้วส่งรหัสมาทางข้อความ เดี่ยวผมไปทำให้คับ

347
ลองอธิบายอีกนิดครับอยากได้แบบไหน เช่น
1.คุณต้องการคำนวนว่าพนักงานลาไปแล้วกี่วัน หรือ เกินจากเกณฑ์ ที่ให้ไว้ 10 วันไปกี่วัน อยากได้แบบไหนครับ
2.ที่ว่าจะมีการหักแต้ม คำนวนการหักอย่างไรครับ
3.คุณอยากให้แสดง ไว้ตรงไหนของรายงานครับ

348
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 26 มิ.ย. 61 , 00:53:40 »
คุณพยายามอ่านที่ผมอธิบายนิดนึงนะครับบางทีผมก็แจ้งไว้แล้วแต่คุณไม่ได้ตั้งค่าเลยผิดพลาด


349
ตัวอย่างใหม่ครับ แก้ไขเลือกวันที่ล่าสุดและ ถ้าวันที่ล่าสุดซ้ำกันก็จะเอาจาก ID มากสุด เป็น True


Query แรก ชื่อ FindDuplicate

โค๊ด: [Select]
SELECT i1.*
FROM table1 AS i1 LEFT JOIN table1 AS i2 ON (i1.DDate < i2.DDate) AND (i1.NNAME = i2.NNAME)
WHERE i2.DDate IS NULL;


Query2 FindDuplicate2

โค๊ด: [Select]
SELECT Max(FindDuplicate.ID) AS ID, FindDuplicate.NNAME, FindDuplicate.DDATE, True AS OLD
FROM FindDuplicate, FindDuplicate AS t
GROUP BY FindDuplicate.NNAME, FindDuplicate.DDATE, True;

คิวรี่สุดท้าย ชื่อ Result

โค๊ด: [Select]
SELECT TABLE1.ID, TABLE1.NNAME, TABLE1.DDATE, IIf(Not IsNull([OLD]),True,False) AS CheckOLD
FROM TABLE1 LEFT JOIN FindDuplicate2 ON TABLE1.ID = FindDuplicate2.ID;

350
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 25 มิ.ย. 61 , 22:01:26 »
ผมทำแล้วแต่มันยังไม่ได้ครับพี่

คุณกำหนด Event ใน Report เป็น On Click มันเลยไม่ทำงาน
ต้องกำหนดที่ Event On Open ครับ



351
ขอรบกวนอาจารย์ด้วยครับ คือผมต้องการโค้ดที่สามารถ Export Data To Excel

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

ขอบคุณครับ

ลองดูตัวอย่างนี้นะครับ ผมสมมุติกำหนด CommandBotton ชื่อ ExportExcel นะครับ

Private Sub ExportExcel_Click()
Dim outputFileName As String
outputFileName = CurrentProject.Path & "\DataName" & " - " & Format(Date, "DDMMYYYY") & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "targetName", outputFileName, True
End Sub

หมายเหตุ DataName คือชื่อของไฟล์ ที่เราจะกำหนด ต่อท้ายด้วยวันที่ล่าสุด
            Format(Date, "DDMMYYYY")  คือการกำหนดให้มีวันที่ในรูปแบบที่เรากำหนดเองได้ Y คือปี M คือเดือน D คือวัน
            targetName  คือชื่อ Table หรือ Query ที่ต้องการจะ Export

352
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 25 มิ.ย. 61 , 19:51:36 »
สามารถกำหนดให้ Report ตัวเดียว สามารถใช้กับ Query Report ที่เรากำหนดได้โดยกำหนดดังนี้
ที่ RecordSource ของรายงานเว้นว่างไว้ ไม่ต้องกำหนด

ที่ตัวรายงาน ใส่ Event On Open Code ตามนี้

โค๊ด: [Select]
If Len(Me.OpenArgs & "") > 0 Then
Me.RecordSource = Me.OpenArgs
End If

OpenArgs คือการกำหนดตั้งค่าคุณสมบัติให้กับ RecordSounce ของตัวรายงาน หรือฟอร์ม

ส่วนที่ Command Botton ที่เราใช้เปิดรายงานบนฟอร์มนั้น กำหนดค่า Docmd.OpenReport..........
เป็นแบบนี้ ผมยกตัวอย่างเปิดรายงานจากฟอร์ม PG_Type

Private Sub Print_PG_Click()
Form.Requery   
DoCmd.OpenReport "report", acViewPreview, , , , "Report_PG"
End Sub

Report คือ ชื่อของ Report ที่เราจะเปิดขึ้นมา 
Report_PG คือ ชื่อคิวรี่ที่จะกำหนดเป็น RecordSource

353
Macro เดิมติดตั้งไว้ที่ Event ไหนครับ ของ Form หรือ Control 

ที่ Event Afterupdate
ลองใส่ Call itemsalesMacro()
ดูครับได้ไหม

354
จากไฟล์ที่แนบมา ผมได้ฟอร์มเป็นแบบในรูป เมื่อคลิกที่ปุ่ม ค่า Old ของ A ไม่เปลี่ยน
เพิ่มเติมอีกนิดครับ ค่า Old ของผมเก็บเป็นแบบ Yes/No(Boolean) ต้องแก้ยังไงครับ



อ่อคุณอยากได้แบบที่ วันที่เป็นวันอะไรก็ตามแต่มี A ซ้ำกัน ก็แก้ไขหมดใช่ไหมครับ
เพราะจากที่ดู วันที่คนละวันกัน และมี A แค่วันละ 1 อันมันเลยไม่ใช่ค่าซ้ำกันครับ เดี่ยวแก้ให้ใหม่

355
เวลา เอามารันบน access 2016 นั้น มันไม่สามารถใช้งานได้ ใช่เปล่า มันต้องเปลี่ยนเป็นคำสั่ง vba code ใช่มั้ยครับ ผมอยากรู้ว่า  sendkey f9 นั้น ใช้ทำงานอะไรครับ ถ้าผมจะเอามาเขียนเป็น vba code นั้น ต้องเขียนว่า อะไรครับ :dizzy:

Send Key F9 คือการใส่ให้ Requery  หรือ  recalc ครับ คือการให้ฟอร์มแสดงผลลัพท์ล่าสุด
ถ้าเป็นฟอร์ม ให้ลบคำสั่งนั้นทิ้ง ใส่ว่า Form.requery แทน เป็น combobox ก็ใส่ me.combobox.requery  แทนครับ

356
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 25 มิ.ย. 61 , 11:40:12 »
ถ้าจะรวมข้อมูลจาก 3 ตารางเพื่อมาแสดงบนฟอร์มและสามารถออกรายงานได้เลย




ลองดูตัวอย่างด้านล่างครับ

357
ผมสร้างคิวรี่ค้นหาค่าซ้ำ เมื่อได้ค่าซ้ำมาแล้วต้องการแก้ไขค่า
ตัวอย่าง
Id   Name   Date   Old
7    A         21/6    Yes
10  A         21/6    Yes
ต้องการให้เป็น
Id   Name   Date   Old
7    A         21/6    No
10  A         21/6    Yes
สอบถามเพิ่มเติม ถ้า A ในตาราง ซ้ำกันมากกว่า สองละครับ เป็น No หมดไหม

358
จากที่ คุณ sls บอกคงแสดงให้เห็นว่า Event ของ textbox ID ของBarcode แสดงแล้ว กดค้นหาทันที คืออีเว้น KeyPress คับ เมื่อป้อนข้อมูล Event จะตรวจสอบทันที ไม่ต้องกด Enter เหมือน afterupdate หรือ on Exit คับ

ซึ่งสามารถนำไปประยุกต์ใช้ เช่นอาจจะเขียนคำสั่งใน Event นั้นว่า ถ้า textboxBarcodeId ไม่ใช่ค่าว่าง ให้ทำงานคำสั่งค้นหา ทันทีคับเพราะ Event นี้ผมเคยใช้สร้างการค้นหาข้อมูลแบบกดทีละตัวแล้วแสดงข้อมูลทันที ทุกตรั้งที่กดปุ่ม

359
ยกตัวอย่างเช่น           --------->   อยากให้เป็นแบบนี้ครับ   
ครั้ง      ออม                                      ครั้ง      ออม                                         
1          5                                         1         5
2          7                                         2         7
3          1                                         3         1
4          2                                         4         2
5         12                                        5        12
6           2                                        6         2
7           2                                        9         0                                     
8           2                                        10       2
9           0
10         2


ขอรบกวนท่านผู้รู้ด้วยนะครับ :prettiness:
ตัวอย่างวางบน Module นะครับ

Public Function DeleteIFDuplicate
Dim db As DAO.Database
Dim recIn As DAO.Recordset
Dim strSaving As String
Dim lngRecordsDeleted As Long
lngRecordsDeleted = 0
Set db = CurrentDb()
Set recIn = db.OpenRecordset("Query1")
If recIn.EOF Then
    MsgBox ("No Input Records")
    recIn.Close
    Set recIn = Nothing
    Set db = Nothing
    Exit Function
End If
Do
If recIn!saving = strSaving Then
   recIn.Delete
   lngRecordsDeleted = lngRecordsDeleted + 1
Else
    strSaving = recIn!saving
   
End If
recIn.MoveNext
Loop Until recIn.EOF
recIn.Close
Set recIn = Nothing
Set db = Nothing
MsgBox ("You Deleted " & lngRecordsDeleted & " Records")
End Function




หมายเหตุ Field Saving คือ Field ที่ชื่อ ออม นะครับ

Query1 คือชื่อ Query ที่เราต้องการ ที่ผมกำหนดจากคิวรี่ เพราะต้องการเรียง Round จากน้อยไปหามากก่อน
การใช้งาน สร้างปุ่ม Command Botton มีอันนึง ที่ Event Onclick ใส่ไปว่า
โค๊ด: [Select]
Private Sub Command1_Click()
Call DeleteIFDuplicate
End Sub

360
ขอบคุณครับ ผมยังต้องปรับขนาดกระดาษ และ รูปภาพ ด้วยครับเพราะกระดาษที่ใช้พิมพ์มีขนาดประมาณ 3*5 นิ้ว ครับ
ยังหาที่ปรับไม่ได้...แต่จะมีประโยชน์สำหรับผู้ที่ทำเต็มกระดาษเอ4ใช้ได้ทุกกลุ่มสาระการเรียนรู้
เลยครับ



ที่ตั้งรายงานกด ตรงนี้เพื่อกำหนดขนาดที่ต้องการครับ ปกติจะไม่มีขนาดกระดาษ 3 x 5 ให้กด Edit เข้าไปเพื่อเพิ่มขนาดที่เราต้องการ
กำหนด หน่วยเป็น Inch นะครับ


แล้วกำหนดขนาดกระดาษ
เป็นขนาดที่เรากำหนดไว้



ถ้ากำหนดเองแต่ยังไม่ได้ ก็ส่งรหัส TeamView มาที่กล่องข้อความเดี่ยวผมตั้งค่าให้


หน้า: 1 ... 17 18 19 [20] 21 22 23 ... 32