แสดงกระทู้

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

หน้า: 1 ... 25 26 27 [28] 29 30 31 ... 46
487
ขอสอบถามการแสดงรหัสไปรษณีย์ จากการใช้เครื่องอ่านบัตรประชาชนค่ะ ปรกติบัตรประชาชนไม่มีข้อมูลรหัสไปรษณีย์ใช่ไหมคะ เวลาอ่านบัตรไม่พบข้อมูลรหัสไปรษณีย์ ถ้าเราต้องการให้เสียบบัตรประชาชนแล้วให้ขึ้นรหัสไปรษณีย์อัตโนมัติจากบัตร สามารถทำได้ด้วยวิธีไหนได้บ้างคะ รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

โดยปกติเครื่องอ่านบัตรประชาชนจะแสกนได้รายละเอียด ของที่อยู่แยกเป็นฟิลล์ๆไป (แต่บางตัว รายละเอียดจะติดกันเป็น ข้อความยาว เราจะทำวิธีนี้ไม่ได้)
สำหรับเครื่องตัวที่แยกฟิลล์มาให้เราสามารถนำไป Join Table เพื่อหารหัสไปรษณีย์ได้ครับ
โดยไฟล์ access ที่มีรายละเอียด เกี่ยวกับ จังหวัด อำเภอ ตำบล จนถึงรหัสไปรษณีย์ ดูได้จากไฟล์ที่ลิ้งด้านล่างครับ
https://www.thai-access.com/index.php?action=dlattach;topic=571.0;attach=481           

488
ขอดูข้อมูลในตารางเบื้องต้นหน่อยครับ

1.ผมไม่เข้าใจ Criteria ว่า  N ด้านหน้านั้นคือต้องการทำอะไร
2.N'สม' คือต้องการหาชื่อพนักงานชื่อ สม ใช่หรือไม่

เพราะโดยปกติ จะใส่แบบนี้

SQL = "SELECT Title, Name, Surname " _
        & "FROM Employee " _
        & "WHERE Name = '" & Me.txtSearchName & "' "
        Me.RecordSource = SQL

หรือแบบนี้
Forms![ชื่อฟอร์ม].Form.Filter = "[name]  = '" & Me.txtSearchName & "'"
Forms![ชื่อฟอร์ม].Form.FilterOn = True

489
ห้อง MS Access / : แสดงส่วนหัวของ subreport
« เมื่อ: 22 มิ.ย. 63 , 13:48:54 »
@PNR ข้อ 3-5 ยังไม่เข้าใจครับ ลองหาในส่วน subreport แล้ว หา properties ไม่เจอครับ รบกวนรายละเอียดอีกครั้ง หรือรูปประกอบครับ ขอบคุณครับ
ส่วน subreport แล้วกดที่แถบของ หัวของหน้าที่เพิ่งสร้างมาใหม่ กดเลือกคุณสมบัติครับ
ลองทำดูก่อนถ้าไม่ได้ ให้ส่งไฟล์มาทางอินบ๊อกผมทำให้


490
ห้อง MS Access / : แสดงส่วนหัวของ subreport
« เมื่อ: 22 มิ.ย. 63 , 11:11:45 »
1.เปิด SubReport ในมุมมองออกแบบ
2.เปิดการเรียงลำดับและจัดกลุ่ม
3. ไปที่การกำหนดนิพจน์ ใส่ข้อความไปว่า =1 
4.แล้วจะเห็นแถบหัวของหน้า อันใหม่ขึ้นมา
5.เซ็ทตรง Group Header to Yes.
5. คลิกขวาแถบหัวของหน้าอันใหม่นั้น (แถบสีเทาบนรายงาน)และเลือก
Properties. จากนั้นกด เซ็ท  Repeat Section to Yes.

ลองดูครับ

491
ห้อง MS Access / : ไฮไลท์ row ที่โฟกัส
« เมื่อ: 19 มิ.ย. 63 , 16:48:52 »

การสร้าง Highlight ให้กับ Current Record ลองดูตัวอย่างนี้ครับ

1.สร้าง textbox unbound ขึ้นมา 1 อันชื่อ txtHighlight แล้วซ่อนไว้ ไม่ต้องแสดง

2.เลือก textbox ตรง Detail ทั้งหมด แล้วเลือกไปที่ี การจัดรูปแบบตามเงื่อนไข ดังภาพด้านล่าง


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


4.กำหนดโค้ด Event Form_Current()

Private Sub Form_Current()
Me.txtHighlight = Me.[ID]
End Sub

หมายเหตุ

ถ้าคุณอยากให้ได้แบบการเลือกทีละหลายๆ เรคคอร์ดโดยใช้ In เหมือนตัวอย่างเก่าที่เคยทำ ก็นำมาปรับใช้ได้เลยครับ ใช้วิธีแบบนั้นได้เหมือนกัน
โดยกำหนดเงื่อนไข แบบตัวอย่างข้อ 2

492
เปิดใช้งาน Macro หรือยังครับ
ดูจากลิ้งนี้
https://www.thai-access.com/index.php?topic=38.0

เพราะ บางคำสั่งจะไม่ทำงานครับถ้าไม่ได้เปิดใช้งาน

493
สวัสดีค่ะ
สอบถามเรื่องการดึงข้อมูลเดิมที่มีอยู่แล้ว มาเพื่อแก้ไขแล้วบันทึกไปยังtable ใหม่ โดยข้อมูลเดิมไม่เปลี่ยนแปลง เช่น การทำใบสั่งซื้อ ซึ่งจะดึงมาจากใบขอซื้อ โดยไม่เปลี่ยนแปลงข้อมูลในใบขอซื้อ ประมาณนี้ค่ะ

ขอบคุณค่ะ
ใช้ Dlookup ดึงข้อมูลแต่ละฟิลล์มาแสดงบน control แต่ละตัว วิธีนี้น่าจะดีอยู่ครับ
เช่น การกำหนดให้ค้นหา รหัสใบขอซื้อ ถ้าเจอก็ให้นำข้อมูลที่มีรหัสใบขอซื้อ มาแสดง บนฟอร์มทำใบสั่งซื้อ

สมมุติ textbox ค้นหารหัสใบขอซื้อชื่อ txtSearch
และมีปุ่มที่กดเพื่อค้นหาชื่อ btnSearch
มีtextbox บนฟอร์ม แบบ Unbound คือไม่ต้องเชื่อมฟิลล์ใช้ Dlookup มาแสดงแทน

Private Sub BtnSearch_Click()
Me.textboxA = dlookup("FieldA","Tableใบขอซื้อ","รหัสใบขอซื้อ ='" & Me.txtSearch & "'"
Me.textboxB = dlookup("FieldB","Tableใบขอซื้อ","รหัสใบขอซื้อ ='" & Me.txtSearch & "'"
Me.textboxC = dlookup("FieldC","Tableใบขอซื้อ","รหัสใบขอซื้อ ='" & Me.txtSearch & "'"
Me.textboxD = dlookup("FieldD","Tableใบขอซื้อ","รหัสใบขอซื้อ ='" & Me.txtSearch & "'"
End sub

วิธีการนี้จะทำให้เราสามารถดึงฟิลล์ A,B,C,D มาแสดงบน textboxชื่อ A,B,C,D ได้แล้วครับ

ส่วนขั้นตอนการจัดเก็บไปยัง ตารางใบสั่งซื้อ สามารถทำได้ทั้งใช้ sql แบบAppend หรือใช้แบบตัวอย่างด้านล่างก็ได้ครับ
    Private Sub BtnSave_Click()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("ตารางใบสั่งซื้อ", dbOpenDynaset)
            RS.AddNew
            RS![Fieldก] = textboxA
            RS![Fieldข] = textboxB
            RS![Fieldค] = textboxC
            RS![Fieldง] = textboxD
            RS.Update
    RS.Close
    Set RS = Nothing

จากตัวอย่างนี้คุณจะสามารถบันทึกข้อมูลที่กรอกไว้ใน textbox A,b,C,D ไปยังฟิลล์ ก ข ค ง ของตารางใบสั่งซื้อแล้วครับ

เนื่องด้วยการนำข้อมูลมาแสดงบนฟอร์มสามารถทำได้หลายแบบมาก
ถ้ามีตัวอย่างฟอร์มที่สร้างไว้อยู่คงแนะนำได้ง่ายขึ้นครับ

494
ถ้าเราใส่แบบนี้มันจะได้ไหม

=IIf([discount_sale]<>0,nz(([s_vol]*([s_price]-[text27])),""),nz(([s_vol]*([s_price]*(1-([discount_sale_rate])/100))),""))

495
มันมีใน active x นะครับลองไปเล่นดู


496
ลองนำไปทดสอบดูนะครับ

ขั้นตอนแรกสร้าง Module ขึ้นมา แล้วเอาโค้ดนี้ไปวาง
โค๊ด: [Select]
Function InsertSpace(strInput As String, n As Long) As String
Dim strTemp As String
Dim lngIndex As Long

For lngIndex = 1 To Len(strInput) Step n
strTemp = strTemp & " " & Mid$(strInput, lngIndex, n) 'ตรง " "   อยากให้กว้างกว่านี้อีกก็กด spacebar เพิ่มอีกได้
Next lngIndex
InsertSpace = Mid$(strTemp, 2)
End Function

ขั้นที่ 2 เวลาจะเรียกใช้กับ Field ไหน ยกตัวอย่าง ฟิวส์ POSID มีสตริงคือ 123456
         ให้ใส่ ประโยคนี้เข้าไปใน ControlSource ของ textbox ในรายงานได้เลย
         เช่น
       
โค๊ด: [Select]
=InsertSpace([POSID],1) '1 คือให้เว้นช่องทุก 1 ตัวอักษรนะครับ ถ้าอยากให้ แบ่งทุก 3 ตัวอักษรใส่เลข 3 แทนได้
       ที่รายงาน textbox ดังกล่างจะแสดงเป็น 1 2 3 4 5 6
       ไม่รู้ว่าอยากได้แบบนี้หรือไม่ ? ถ้าไม่ใช่อธิบายเพิ่มเติมมาอีกหน่อยนะครับผมยังไม่ค่อยเข้าใจโจทย์  :sweat: :sweat:

497
ขอบคุณท่านอาจารย์มากๆ ครับ พอดีผมไปค้นเจอ อีกหนึ่่งวิธีครับ ใช้ได้กับ IN ครับ

วิธีนี้ต่อยอดได้อีกเยอะเลยครับ
 ใช้วิธีกำหนดให้เก็บ สตริงหลังจากติ๊กเลือกแล้ว
 ใช้ replace เป็น ID,ID ไปเรื่อยๆ แล้วนำไปใส่กับ IN เยี่ยมครับ


498
เป็น 1 ถูกแล้วครับ
เวลาจะค้นหาถ้าผ่านฟอร์มก็ใช้การตัดคำให้เหลือเฉพาะตัวเลขเหมือนกับที่จัดเก็บในตารางเช่น

Private Sub Command25_Click()
Dim getID As String
getID = Me.txtSearch  'รับค่าการค้นหาเข้ามาโดยพิมพ์ค้นหา ISP-001 ได้ตามปกติ
getID = Val(Right(getID, Len(getID) - InStrRev(getID, "-"))) 'ตัดคำให้เหลือเฉพาะ ค่าตัวเลข 3 หลักสุดท้ายคือ "000" แล้วใช้ Val แปลงเป็นตัวเลข
Forms![frmtest].Form.Filter = "[INSP_ID] =" & getID  'กำหนดให้ตัวเลขที่ได้นั้น ไปใช้ค้นหาข้อมูลจริง
Forms![frmtest].Form.FilterOn = True
End Sub

ลองทดสอบดูนะครับ

499
ห้อง MS Access / : เพิ่มขนาด font ใน subform
« เมื่อ: 08 มิ.ย. 63 , 16:05:34 »
จะเพิ่มหรือปรับขนาด font ใน subform ที่แสดงเป็นตารางยังไงครับ
ขอบคุณครับ


500
รบกวนขอไฟล์ตัวอย่างไว้ศึกษาเพื่อเป็นความรู้ค่ะ
ไฟล์ตัวอย่างที่คุณ Maki โพสไว้นั้น โหลดไปแล้วเปิดไม่ได้ค่ะ(ไฟล์เสีย)
ใช้ โปรแกรม 7-Zip แตกไฟล์ครับ

https://www.7-zip.org/

501
แก้โค้ดตรงนี้ครับ จะบันทึกได้ปกติ

โค๊ด: [Select]
Private Sub BtnSave_Enter() 'ปกติเมื่อแสกน Barcode แล้วเครื่องจะมีระบบ Enter อัตโนมัติ คำสั่งนี้จะทำงานเองทันที คือบันทึกลงตาราง
Dim strBarcode As String
On Error Resume Next
strBarcode = Forms!FrmStart_Working!Barcode
strBarcode = Replace(strBarcode, " ", "")
Barcode = strBarcode
If IsNull(DLookup("EmpName", "tblEmployee", "EmpID='" & Forms!FrmStart_Working!Barcode & "'")) Then
Me.Lb_Status.Caption = "ไม่พบข้อมูลพนักงานคนนี้กรุณาลงทะเบียนก่อน"
Me.Barcode.SetFocus
Me.Undo
Else
Me.txtTimeIn = Format(Now(), "HH:mm:ss AM/PM")
Me.txtNameEmployee = DLookup("EmpName", "tblEmployee", "EmpID='" & Forms!FrmStart_Working!Barcode & "'")
Call SaveRecord
Me.Lb_Status.Caption = "บันทึกข้อมูลเสร็จเรียบร้อย"
Me.Barcode.SetFocus
End If
End Sub

502
หนูใช้เครื่องอ่านบัตร กับโปรแกรม Siam id รับค่าลง Access ได้ปกติ
(ลงใน textbox)
แต่ เลขประชาชน 13 หลักจะเข้ามาแบบ 1 2222 33333 11 1จะมีเว้นวรรค
อยากให้มันมาแบบ ติดๆกัน 1222233333111 แบบนี้คะ พอมีวิธีบ้างไหม

ตั้งค่าจากเครื่องผมไม่ทราบนะครับ รออาจารย์ท่านอื่นมาเสริม

แต่ถ้าแก้แบบง่ายๆ คือสรา้งตัวแปลมาเก็บค่า และแก้ไขก่อนให้แสดงบน textbox ชื่อ txtPersonalID เช่น
Dim strPersonalID as string
strPersonalID = ค่าที่มาจากเครื่องแสกน
strPersonalID = Replace([strPersonalID]," ","")
txtPersonalID = strPersonalID

หรือวิธีอื่นๆ เช่นใช้คิวรี่ก็ใส่ Replace([strPersonalID]," ","") ได้เลยครับ

วิธีนี้ใช้การ Replace ช่องว่างให้ ไม่มีช่องว่างครับ

503
ลองดูครับ ไม่รู้ต้องการแบบนี้ไหม
ถ้าจะปรับตรงไหนสอบถามได้ครับ

โดยขั้นตอนแรก
ใช้การนำข้อมูลจากตาราง work มา Addnew ไปยังตารางที่ 2 คือ WorkExtrackUNIT
โดยจำนวนครั้งเอามาจากการจำนวนของ Unit ในแต่ละ Fullname

โค๊ด: [Select]
Sub AddRowByUnit()
Dim RS As DAO.Recordset
Dim rst As DAO.Recordset
Dim strFullname As String
Dim I As Long
    Set rst = CurrentDb.OpenRecordset("Work", dbOpenDynaset)
    Set RS = CurrentDb.OpenRecordset("WorkExtrackUNIT", dbOpenDynaset)
 
rst.MoveFirst
Do Until rst.EOF
strFullname = rst!FullName
For I = 1 To rst!unit
If strFullname = rst!FullName Then
            RS.AddNew
            RS![FullName] = rst!FullName
            RS![HN] = rst!HN
            RS!row = "1"
            RS.Update
End If
    Next
  rst.MoveNext
  Loop
    RS.Close
    Set RS = Nothing
End Sub

ขั้นตอนต่อมา
ใช้การนำข้อมูลที่ได้มาสร้างเป็นแถวเดียว หลายคอลัมน์
โดยใช้ Do until
สั่งเกตุจากขั้นตอนแรกผมจะเพิ่มแถวที่ชื่อ Row เข้าไปด้วยเพื่อไว้เช็คค่าตอน Update ไปยังตาราง

โค๊ด: [Select]
Public Sub ExplodeTable()
    Dim DB  As DAO.Database
    Dim RS  As DAO.Recordset
    Dim I   As Integer
    Dim LastID  As Variant
   
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("SELECT WorkExtrackUNIT.row,WorkExtrackUNIT.Fullname, WorkExtrackUNIT.HN FROM WorkExtrackUNIT ORDER BY WorkExtrackUNIT.ID;")
    RS.MoveFirst
    Do Until RS.EOF
    If RS!row <> LastID Then
                I = 1
            DB.Execute "insert into Workreport (row, box1) values (" & CStr(RS!row) & ", '" & CStr(RS!FullName & vbCrLf & " HN " & RS!HN) & "')", dbFailOnError
            Else
                I = I + 1
            DB.Execute "update Workreport set Box" & CStr(I) & " = '" & CStr(RS!FullName & vbCrLf & " HN " & RS!HN) & "' where row = '" & CStr(RS!row) & "'", dbFailOnError
   End If
   LastID = RS!row
    RS.MoveNext
    Loop
    RS.Close: Set RS = Nothing
    DB.Close: Set DB = Nothing
    DoCmd.OpenReport "rptdemo", acViewPreview
End Sub

แล้วสร้างปุ่มคลิ๊กขึ้นมาซักตัวหนึ่ง ใส่โค้ดให้จัดลำดับการทำงานตั้งแต่เริ่มจนถึงการออกรายงาน
โดยจะสั่งให้ลบข้อมูลในตาราง ชั่วคราวออกก่อนรับข้อมูลใหม่มาแสดงที่รายงานทุกครั้ง
โค๊ด: [Select]
Private Sub Command0_Click()
Dim DB  As DAO.Database
Set DB = CurrentDb
DB.Execute "Delete * from WorkExtrackUNIT;"
DB.Execute "Delete * from Workreport;"
Call AddRowByUnit
Call ExplodeTable
DB.Close: Set DB = Nothing
End Sub

504
เดี่ยว DIY ให้ครับ

หน้า: 1 ... 25 26 27 [28] 29 30 31 ... 46