แสดงกระทู้

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 2 3 [4] 5 6 7 ... 36
49
ห้อง MS Access / : สอบถามโค้ด SQL ครับ
« เมื่อ: 06 ส.ค. 64 , 14:01:25 »
WHERE (((PI.[Position]) NOT LIKE "ผช.ช่าง" And (PI.[Position]) Not Like "สัญญาจ้าง"));

ปกติใช้
WHERE (((PI.[Position]) NOT "ผช.ช่าง" And (PI.[Position]) Not  "สัญญาจ้าง"));

Not Like จะใช้ในกรณ๊ที่ต้องการประโยคบางส่วนของข้อมูลก็เข้าเงื่อนไขโดยใช้ *  เช่น
มีข้อมูล กขค
          กขจ
          ครง
          จกข
WHERE (((PI.[Position]) NOT "*ก"));

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

50
เปลี่ยนจาก Count เป็น Sum ธรรมดาได้เลยเช่น
ถ้าคุณมีข้อมูลใน Field แยกประเภท ข้อมูล จะมี สัญญาจ้าง และ พนักงานประจำ

เช่น
[แยกประเภท]
สัญญาจ้าง
สัญญาจ้าง
พนักงานประจำ
สัญญาจ้าง
พนักงานประจำ
สัญญาจ้าง

SQL คือ

SELECT Sum(IIf([แยกประเภท]="สัญญาจ้าง",1,0)) AS สัญญาจ้าง, Sum(IIf([แยกประเภท]="พนักงานประจำ",1,0)) AS พนักงานประจำ
FROM [ชื่อตารางหรือคิวรี่];


ข้อมูลจะได้
สัญญาจ้าง lพนักงานประจำ
      4     l       2


กรณีที่ Field แยกประเภท จะระบุเฉพาะคนที่มีสัญญาจ้างเท่านั้น พนักงานประจำไม่ได้ระบุหรือเว้นว่างๆ ไว้แต่อยากให้คำนวนด้วย
เราก็แก้เงื่อนไข True False ให้ False = 1 ก็ได้แล้วครับเช่น

SELECT Sum(IIf([แยกประเภท]="สัญญาจ้าง",1,0)) AS สัญญาจ้าง, Sum(IIf([แยกประเภท]="สัญญาจ้าง",0,1)) AS พนักงานประจำ
FROM [ชื่อตารางหรือคิวรี่];
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

51
เสริมเพิ่มเติม
บางครั้งแปลงไฟล์ เป็น ACCDE หรือ MDE
เพื่อป้องกันการแก้ไขหรือลบโค้ด Module  สามารถใช้งานรันได้ แต่ไม่สามารถเปลี่ยนแปลงได้
เพื่อที่ป้องกันผู้ใช้จากการเข้าถึงฐานข้อมูลแบบเต็มครับ

แต่เมื่อแปลงเป็น เป็น ACCDE หรือ MDE แล้ว ถ้า Admin ผู้พัฒนาจะแก้ไขโค้ดต่างๆ ต้องทำจากตัว ACCDB หรือ MDB เท่านั้นแล้วแปลงใหม่
จะไม่สามารถแก้ไขโค้ดจาก ACCDE ได้เช่นกัน
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

52
สามารถดึงตารางที่มี Field เพศ หรือ Field กรุ๊ปเลือด มานับจำนวนโดยสร้างคิวรี่ใหม่ขึ้นมาแล้ว ใส่ sql แบบนี้

SELECT [เพศ], Count([เพศ]) AS จำนวน FROM [ชื่อตารางหรือคิวรี่]  GROUP BY [เพศ];

และถ้าจะนับจำนวน กรุ๊ปเลือด ทำแบบเดียวกัน

SELECT [กรุ๊ปเลือด], Count([กรุ๊ปเลือด]) AS จำนวน FROM [ชื่อตารางหรือคิวรี่]  GROUP BY [กรุ๊ปเลือด];
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

53
ส่ง รหัส anydesk มาทางข้อความหน่อยครับ
ผมรีโมทไปแก้ให้
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

54
โค้ดผิดครับ
แก้เป็น

Set rsc = Forms!......................Form.RecordsetClone
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

55
ผมมี Textbox อยู่ 2 Textbox

Textbox  1 มี JPS64052271000002002321144130D08000 ต้องการโชว์แค่ 12 หลักหลัง

Textbox  2 มี JPS64052271000002744130D0800000232110 ต้องการโชว์แค่ 12 หลักตรงกลาง

จะต้องเขียนสูตร vba ยังไงครับ

1.BoundField
textbox bound กับ Field สามารถใส่โค้ดใน ControlSource ของ textbox ได้เลย โดยสมมุติ Field1 และ Field2 คือชื่อฟิลล์
ที่text1
=Right([Field1],12)

ที่text2
=Mid([Field2],18,12)

แบบที่2
ถ้าเป็นข้อมูลที่ผ่านการแสกนมาแล้วอยากตัดข้อความให้กำหนดตัวแปลมาเก็บค่าไว้เช่น
โค๊ด: [Select]
Dim strbarcode As String
strbarcode = Me.MyInput 'สมมุติว่ารับข้อมูลมาจาก textbox MyInput
Me.Text1 = Right(strbarcode, 12)
Me.Text2 = Mid([strbarcode], 18, 12)
โพสต์นี้ได้รับคำขอบคุณจาก: Nisar Malila

56
เราสามารถใช้ & เพื่อใช้ Control ในการค้นหาตัวเดียวกันได้ครับ เช่น


Code : sql = "SELECT * FROM Q_PI WHERE [ID_Card] & [NameTH] like '*" & Nz(Me.TextSearch, "*") & "*' AND [Position] like '" & Nz(Me.CmdPosi, "*") & "' AND [Section] like '" & Nz(Me.CmdSec, "*") & "'"

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

57
เพิ่มโค้ดแบบนี้ จากเดิมมีอันเดียวคือ Dim sql As String ใส่  Dim rstRecords As Recordset เพิ่มเข้าไป
Dim sql As String
Dim rstRecords As Recordset

ทีนี้เป็นตัวนี้ครับ ลองประกาศชื่อนี้ As String แต่ไม่ได้ครับ



ตัวนี้ as long ก็ได้คับ
ถ้าน้าย้อนกลับไปดูโพสดีๆ ผมแก้ให้แล้วนะครับ

https://www.thai-access.com/index.php?topic=1722.msg7425#msg7425
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

58
ยังไม่ได้ประกาศตัวแปร

ต้องประกาศยังไงหรอครับ

เพิ่มโค้ดแบบนี้ จากเดิมมีอันเดียวคือ Dim sql As String ใส่  Dim rstRecords As Recordset เพิ่มเข้าไป
Dim sql As String
Dim rstRecords As Recordset
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

59
แก้โค้ดเป็น
โค๊ด: [Select]
Private Sub Searchcriteria()
Dim sql As String
Dim FindRecordCount  As Long
Dim rstRecords As Recordset
sql = "SELECT * FROM Ptt WHERE [Name] like '*" & Nz(Me.TextSearch, "*") & "*' and [Sex] like '" & Nz(Me.Combo1, "*") & "' and [Dep] like '" & Nz(Me.Combo2, "*") & "' and [Age]  like '" & Nz(Me.Combo3, "*") & "'"
Set rstRecords = CurrentDb.OpenRecordset(sql)
forms!.....................recordsource = sql
forms!.....................Requery

        If rstRecords.EOF Then
            FindRecordCount = 0
        Else
            rstRecords.MoveLast
            FindRecordCount = rstRecords.RecordCount
        End If
   If FindRecordCount = 0 Then
   MsgBox "Not Found !!", vbCritical, "Status"
   End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

60

แก้ใน private sub SearchCriteria ครับ



ขึ้นแบบนี้ตอนเปิดครับครับเพราะผมใช้ Form_Load รัน SearchCriteria ด้วยครับ


จากโค้ดที่ให้ไป แก้ชื่อตารางจาก mytable เป็น ptt ก้อนครับผมลืมแก้ให้ :prettiness: :prettiness:
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

61

แก้ใน private sub SearchCriteria ครับ

ส่วนที่ปุ่มแล้วแต่คุณอยากว่าให้มันต่อเนื่องกันใหม

หรือถ้าอยากค้นหาแบบเดี่ยวๆ ก็ใส่ โค้ดที่ปุ่ม
โดยแก้ sql เป็น

โค๊ด: [Select]
sql = "SELECT * FROM ptt WHERE [Name] like '*" & Nz(Me.TextSearch, "*") "'"
ก็พอ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

62
อ่อเดียวแก้ให้ใหม่ครับ ชื่อถ้าพิมพ์ไม่เหมือนทุกตัวมันจะไม่ขึ้น ถ้าจะให้พิมพ์แค่บางตัวแล้วขึ้น ต้องใบ้ Like  เข้ามาเพิ่ม เดี่ยวแก้ให้

แก้เป็นแบบนี้ครับ
โค๊ด: [Select]
sql = "SELECT * FROM Mytable WHERE [Name] like '*" & Nz(Me.TextSearch, "*") & "*' and [Sex] like '" & Nz(Me.Combo1, "*") & "' and [Dep] like '" & Nz(Me.Combo2, "*") & "' and [Age]  like '" & Nz(Me.Combo3, "*") & "'"
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

63
Msgbox กรณีไหนครับ ?

เช่น แจ้งว่า ไม่พบข้อมูล
     แจ้งว่าเจอข้อมูล  จำนวน .... รายการ
     แจ้งว่า........

หรือการแจ้งกรณีที่ยังไม่ได้กรอกชื่อให้กรอกก่อนก็ใช้แบบนี้
Private CmdSearch_Click
if isnull(me.textsearch) then
MsgBox "กรุณาใส่ชื่อก่อน", vbInformation, "สถานะการค้นหา"
else
Cbosex = null
cboAge = null
cboDep = null
SearchCriteria
end if
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

64
seachcombo คืออะไรเอาออกได้ไหม

เหมือนมันทำงานซ้ำซ้อนกันอยู่

และตรง CmdSearch_Click เอาโค้ดออกให้หมดให้เหลือแค่
SearchCriteria พอ ถ้าอยากให้ที่ปุ่ม ค้นหาหาเฉพาะชื่อ ไม่ให้เงื่อนไขของ อายุ เพศ และ แผนกเข้ามาเกี่ยวข้องก็กำหนดให้คอมโบบ๊อกอื่นๆ มีค่า null ก่อนได้เช่น
Private CmdSearch_Click
Cbosex = null
cboAge = null
cboDep = null
SearchCriteria
End Sub

หรือถ้าต้องการกำหนดการค้นหาเฉพาะตัวมันเองเวลากดค้นหา
ที่ Private CmdSearch_Click
ก็ไม่ต้องใส่ SearchCriteria เข้าไป
ใส่เฉพาะ Combobox ที่ใช้ในการค้นหาก็พอ

ท่านสามารถุ Copy Code มาวางในนี้เพื่อง่ายต่อการช่วยแก้ไขมากกว่ารูปนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: 001Jetnipit

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