กระทู้เก่าบอร์ด อ.Yeadram
1,669 4
URL.หัวข้อ /
URL
ช่วยใส่โค้ดให้ หน่อยครับ
ช่วยใส่โค้ดให้หน่อยครับ
Private Sub Text24_AfterUpdate()
Dim txtsearch As String
Text24 = txtsearch
SELECT main.[ลำดับ], [main-sub].รายการ, [main-sub].[ราคาต่อหน่วย], [main-sub].[จำนวนสินค้า-แยก], [main-sub].[หน่วยสินค้า-แยก], main.[วันที่ใบสั่งซื้อ], main.[วันที่ตรวจรับ], main.[ชื่อร้าน], main.[บิลเล่มที่], main.[บิลเลขที่], main.[วัสดุหรือซ่อมอะไร], main.[เลขที่ใบสั่ง], main.sj
FROM main INNER JOIN [main-sub] ON main.[ลำดับ] = [main-sub].[ลำดับที่]
WHERE (((main.[ลำดับ]) Like "*" & txtsearch & "*") AND (([main-sub].รายการ) Is Not Null) AND ((main.[เลขที่ใบสั่ง]) Is Not Null)) OR ((([main-sub].รายการ) Like "*" & txtsearch & "*")) OR ((([main-sub].[ราคาต่อหน่วย]) Like "*" & txtsearch & "*")) OR ((([main-sub].[จำนวนสินค้า-แยก]) Like "*" & txtsearch & "*")) OR ((([main-sub].[หน่วยสินค้า-แยก]) Like "*" & txtsearch & "*")) OR (((main.[วันที่ใบสั่งซื้อ]) Like "*" & txtsearch & "*")) OR (((main.[วันที่ตรวจรับ]) Like "*" & txtsearch & "*")) OR (((main.[ชื่อร้าน]) Like "*" & txtsearch & "*")) OR (((main.[บิลเล่มที่]) Like "*" & txtsearch & "*") AND ((main.[บิลเลขที่]) Like "*" & txtsearch & "*")) OR (((main.[วัสดุหรือซ่อมอะไร]) Like "*" & txtsearch & "*")) OR (((main.[เลขที่ใบสั่ง]) Like "*" & txtsearch & "*")) OR (((main.sj) Like "*" & txtsearch & "*"));
End sub
รบกวนอาจารย์ท่านใด ช่วยใส่โค้ด ค้นหาให้ผมหน่อยครับ เอาคำที่ ได้จาก Text24 ไปใส่ในภาษา SQL ที่แสดงอยู่ ผมเขียนโค้ดไม่เป็นครับ
ปล.อยากจะรบกวนท่านใด ช่วยทำให้มัน ไฮไลท์ข้อความ ที่เราค้นหา เป็นสี ออกมาด้วย จะขอบพระคุณมากครับ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R12785
อาจารย์ yeadram ครับ พอใส่เครื่องหมายลูกน้ำแล้ว เอาไปใส่ใน microsoft vb มันมีปัญหาใน โค้ดครับ เหมือนกับว่ามันยาวไป มันเลยไม่ยอมต่อกัน แยกกันอยู่คนละบรรทัด
ผมเลยจะขอ อาจารย์ yeadram ช่วยดูไฟล์ให้หน่อยครับ ส่งไปไว้ใน accboard แล้วครับ ชื่อหัวข้อ "ช่วยใส่โค้ด ระบบค้นหา ให้หน่อยครับ search" ส่งเมื่อ 14/5/55 00.47 ขอบพระคุณอาจารย์ที่สละเวลาครับ
ผมเลยจะขอ อาจารย์ yeadram ช่วยดูไฟล์ให้หน่อยครับ ส่งไปไว้ใน accboard แล้วครับ ชื่อหัวข้อ "ช่วยใส่โค้ด ระบบค้นหา ให้หน่อยครับ search" ส่งเมื่อ 14/5/55 00.47 ขอบพระคุณอาจารย์ที่สละเวลาครับ
3 @R12789
อันดับแรก
ถ้าฟอร์มของคุณจะใช้ข้อมูลจากคิวรี่ คิวรี่ตัวนั้นไม่ควรมีการใช้ พารามิเตอร์ เพราะมันจะรบกวนผู้ใช้ เวลาเปิดฟอร์ม (คือผมยังไม่รู้ว่าคุณจะให้ดูอะไร ผมยังไม่รู้ว่าข้างในมีอะไรให้ดู แต่คุณถามผมก่อนแล้วว่า คีย์เวอร์ดคืออะไร แล้วผมจะเอาอะไรไปตอบล่ะ)
ถ้าคิดจะสร้างพารามิเตอร์หรือเงื่อนไขใดๆ ให้กับมัน ก็ให้เขาเปิดฟอร์มให้ได้ก่อน แล้วค่อยเขียนโค้ดฝังปุ่มหรือฝังเหตุการณ์ใส่เงื่อนไขให้มันทีหลัง
อันดับต่อมา การต่อสายอักขระร่วมกับตัวแปรใน vb
ถ้าคุณคัดลอกสายอักขระ มาจาก คิวรี่ สิ่งที่ควรกระทำอันดับแรกคือ ต้องเปลี่ยนเครื่องหมายก่อนเลย เพราะโดยปกติ เครื่องหมายคั่น string ใน คิวรี่ มักจะใช้ double quote
ส่วนใน vb ก็ใช้ตัวเดียวกันอีก ดังนั้นเวลาโค้ดมันทำการประมวลผล มันแยกไม่ออกว่า เครื่องหมายตัวใด เป็นของ sql หรือเครื่องหมายตัวใด เป็นของ vb
(อย่าลืมว่านี้คือการเขียนคำสั่งให้ vb ทำงานร่วมกันกับ sql หรือพูดอีกนัยหนึ่งก็คือ "คุณเขียนโค้ดสั่ง VB ให้ไปสั่ง SQL" มันมีการสั่งการ 2 ลำดับชั้น)
ทางเลือกสำหรับงานนี้ อาจทำได้สองวิธีคือ ให้ภาษา SQL ใช้ single quote แล้วให้ VB ใช้ double quote
แบบนี้
หรือให้มันใช้ double quote ทั้งสองภาษาเลยก็ได้ แต่ต้องดูว่า จุดไหนที่เป็นจุดร่วมของสองภาษา จุดนั้นจะต้องมีการซ้อน double quote คือปกติใส่ตัวเดียวก็ให้ใส่เป็นสองตัวซ้อนกัน อย่างนี้
อ้อ อีกอย่างโค้ดในตัวอย่างที่คุณทำมา ตก End if ไปตัวนึงนะ
ถ้าฟอร์มของคุณจะใช้ข้อมูลจากคิวรี่ คิวรี่ตัวนั้นไม่ควรมีการใช้ พารามิเตอร์ เพราะมันจะรบกวนผู้ใช้ เวลาเปิดฟอร์ม (คือผมยังไม่รู้ว่าคุณจะให้ดูอะไร ผมยังไม่รู้ว่าข้างในมีอะไรให้ดู แต่คุณถามผมก่อนแล้วว่า คีย์เวอร์ดคืออะไร แล้วผมจะเอาอะไรไปตอบล่ะ)
ถ้าคิดจะสร้างพารามิเตอร์หรือเงื่อนไขใดๆ ให้กับมัน ก็ให้เขาเปิดฟอร์มให้ได้ก่อน แล้วค่อยเขียนโค้ดฝังปุ่มหรือฝังเหตุการณ์ใส่เงื่อนไขให้มันทีหลัง
อันดับต่อมา การต่อสายอักขระร่วมกับตัวแปรใน vb
ถ้าคุณคัดลอกสายอักขระ มาจาก คิวรี่ สิ่งที่ควรกระทำอันดับแรกคือ ต้องเปลี่ยนเครื่องหมายก่อนเลย เพราะโดยปกติ เครื่องหมายคั่น string ใน คิวรี่ มักจะใช้ double quote
ส่วนใน vb ก็ใช้ตัวเดียวกันอีก ดังนั้นเวลาโค้ดมันทำการประมวลผล มันแยกไม่ออกว่า เครื่องหมายตัวใด เป็นของ sql หรือเครื่องหมายตัวใด เป็นของ vb
(อย่าลืมว่านี้คือการเขียนคำสั่งให้ vb ทำงานร่วมกันกับ sql หรือพูดอีกนัยหนึ่งก็คือ "คุณเขียนโค้ดสั่ง VB ให้ไปสั่ง SQL" มันมีการสั่งการ 2 ลำดับชั้น)
ทางเลือกสำหรับงานนี้ อาจทำได้สองวิธีคือ ให้ภาษา SQL ใช้ single quote แล้วให้ VB ใช้ double quote
แบบนี้
SQL = "SELECT main.[ลำดับ], [main-sub].รายการ, [main-sub].[ราคาต่อหน่วย], [main-sub].[จำนวนสินค้า-แยก], [main-sub].[หน่วยสินค้า-แยก], main.[วันที่ใบสั่งซื้อ], main.[วันที่ตรวจรับ], main.[ชื่อร้าน], main.[บิลเล่มที่], main.[บิลเลขที่], main.[วัสดุหรือซ่อมอะไร], main.[เลขที่ใบสั่ง], main.sj, [main-sub].[หมายเหตุเบิก], main.[รวมราคาทั้งสิ้น]"
SQL = SQL & " FROM main INNER JOIN [main-sub] ON main.[ลำดับ] = [main-sub].[ลำดับที่]"
SQL = SQL & " WHERE (((main.[ลำดับ]) Like '*" & txtsearch & "*') AND (([main-sub].รายการ) Is Not Null) AND ((main.[เลขที่ใบสั่ง]) Is Not Null)) OR ((([main-sub].รายการ) Like '*" & txtsearch & "*')) OR ((([main-sub].[ราคาต่อหน่วย]) Like '*" & txtsearch & "*')) OR ((([main-sub].[จำนวนสินค้า-แยก]) Like '*" & txtsearch & "*')) OR ((([main-sub].[หน่วยสินค้า-แยก]) Like '*" & txtsearch & "*')) OR (((main.[วันที่ใบสั่งซื้อ]) Like '*" & txtsearch & "*')) OR (((main.[วันที่ตรวจรับ]) Like '*" & txtsearch & "*')) OR (((main.[ชื่อร้าน]) Like '*" & txtsearch & "*')) OR (((main.[บิลเล่มที่]) Like '*" & txtsearch & "*') AND ((main.[บิลเลขที่]) Like '*" & txtsearch & "*')) OR (((main.[วัสดุหรือซ่อมอะไร]) Like '*" & txtsearch & "*')) OR (((main.[เลขที่ใบสั่ง]) Like '*" & txtsearch & "*')) OR (((main.sj) Like '*" & txtsearch & "*')) OR ((([main-sub].[หมายเหตุเบิก]) Like '*" & txtsearch & "*')) OR (((main.[รวมราคาทั้งสิ้น]) Like '*" & txtsearch & "*'));"
หรือให้มันใช้ double quote ทั้งสองภาษาเลยก็ได้ แต่ต้องดูว่า จุดไหนที่เป็นจุดร่วมของสองภาษา จุดนั้นจะต้องมีการซ้อน double quote คือปกติใส่ตัวเดียวก็ให้ใส่เป็นสองตัวซ้อนกัน อย่างนี้
SQ = "SELECT main.[ลำดับ], [main-sub].รายการ, [main-sub].[ราคาต่อหน่วย], [main-sub].[จำนวนสินค้า-แยก], [main-sub].[หน่วยสินค้า-แยก], main.[วันที่ใบสั่งซื้อ], main.[วันที่ตรวจรับ], main.[ชื่อร้าน], main.[บิลเล่มที่], main.[บิลเลขที่], main.[วัสดุหรือซ่อมอะไร], main.[เลขที่ใบสั่ง], main.sj, [main-sub].[หมายเหตุเบิก], main.[รวมราคาทั้งสิ้น]"
SQ = SQ & " FROM main INNER JOIN [main-sub] ON main.[ลำดับ] = [main-sub].[ลำดับที่]"
SQ = SQ & " WHERE (((main.[ลำดับ]) Like ""*" & txtsearch & "*"") AND (([main-sub].รายการ) Is Not Null) AND ((main.[เลขที่ใบสั่ง]) Is Not Null)) OR ((([main-sub].รายการ) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[ราคาต่อหน่วย]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[จำนวนสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หน่วยสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ใบสั่งซื้อ]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ตรวจรับ]) Like ""*" & txtsearch & "*"")) OR (((main.[ชื่อร้าน]) Like ""*" & txtsearch & "*"")) OR (((main.[บิลเล่มที่]) Like ""*" & txtsearch & "*"") AND ((main.[บิลเลขที่]) Like ""*" & txtsearch & "*"")) OR (((main.[วัสดุหรือซ่อมอะไร]) Like ""*" & txtsearch & "*"")) OR (((main.[เลขที่ใบสั่ง]) Like ""*" & txtsearch & "*"")) OR (((main.sj) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หมายเหตุเบิก]) Like ""*" & txtsearch & "*"")) OR (((main.[รวมราคาทั้งสิ้น]) Like ""*" & txtsearch & "*""));"
อ้อ อีกอย่างโค้ดในตัวอย่างที่คุณทำมา ตก End if ไปตัวนึงนะ
4 @R12799
ระบบค้นหาได้แล้วครับ ใช้ วิธีที่สอง double quote ทั้งสองภาษา
แต่ตรง ไฮไลท์ ข้อความที่ค้น ยังไม่ได้ครับ
นี่เป็นโค้ดที่ใช้ครับ เพิ่ม end if ตามที่อาจารย์บอกแล้ว
Private Sub Command38_Click()
Dim txtsearch As String
Dim SQL As String
If Not IsNull(Text24) Then
txtsearch = Text24
SQL = "SELECT main.[ลำดับ], [main-sub].รายการ, [main-sub].[ราคาต่อหน่วย], [main-sub].[จำนวนสินค้า-แยก], [main-sub].[หน่วยสินค้า-แยก], main.[วันที่ใบสั่งซื้อ], main.[วันที่ตรวจรับ], main.[ชื่อร้าน], main.[บิลเล่มที่], main.[บิลเลขที่], main.[วัสดุหรือซ่อมอะไร], main.[เลขที่ใบสั่ง], main.sj, [main-sub].[หมายเหตุเบิก], main.[รวมราคาทั้งสิ้น]"
SQL = SQL & "FROM main INNER JOIN [main-sub] ON main.[ลำดับ] = [main-sub].[ลำดับที่]"
SQL = SQL & "WHERE (((main.[ลำดับ]) Like ""*" & txtsearch & "*"") AND (([main-sub].รายการ) Is Not Null) AND ((main.[เลขที่ใบสั่ง]) Is Not Null)) OR ((([main-sub].รายการ) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[ราคาต่อหน่วย]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[จำนวนสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หน่วยสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ใบสั่งซื้อ]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ตรวจรับ]) Like ""*" & txtsearch & "*"")) OR (((main.[ชื่อร้าน]) Like ""*" & txtsearch & "*"")) OR (((main.[บิลเล่มที่]) Like ""*" & txtsearch & "*"")) OR (((main.[บิลเลขที่]) Like ""*" & txtsearch & "*"")) OR (((main.[วัสดุหรือซ่อมอะไร]) Like ""*" & txtsearch & "*"")) OR (((main.[เลขที่ใบสั่ง]) Like ""*" & txtsearch & "*"")) OR (((main.sj) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หมายเหตุเบิก]) Like ""*" & txtsearch & "*"")) OR (((main.[รวมราคาทั้งสิ้น]) Like ""*" & txtsearch & "*""));"
Me.RecordSource = SQL
Me.Requery
Text24.SetFocus
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If rs.RecordCount < 1 Then
Set rs = Nothing
Exit Sub
Else
rs.FindFirst "[รายการ] Like '*" & txSearch & "*'"
Me.Bookmark = rs.Bookmark
End If
End If
End Sub
ขอรบกวน อาจารย์ดูให้อีกรอบครับผม
แต่ตรง ไฮไลท์ ข้อความที่ค้น ยังไม่ได้ครับ
นี่เป็นโค้ดที่ใช้ครับ เพิ่ม end if ตามที่อาจารย์บอกแล้ว
Private Sub Command38_Click()
Dim txtsearch As String
Dim SQL As String
If Not IsNull(Text24) Then
txtsearch = Text24
SQL = "SELECT main.[ลำดับ], [main-sub].รายการ, [main-sub].[ราคาต่อหน่วย], [main-sub].[จำนวนสินค้า-แยก], [main-sub].[หน่วยสินค้า-แยก], main.[วันที่ใบสั่งซื้อ], main.[วันที่ตรวจรับ], main.[ชื่อร้าน], main.[บิลเล่มที่], main.[บิลเลขที่], main.[วัสดุหรือซ่อมอะไร], main.[เลขที่ใบสั่ง], main.sj, [main-sub].[หมายเหตุเบิก], main.[รวมราคาทั้งสิ้น]"
SQL = SQL & "FROM main INNER JOIN [main-sub] ON main.[ลำดับ] = [main-sub].[ลำดับที่]"
SQL = SQL & "WHERE (((main.[ลำดับ]) Like ""*" & txtsearch & "*"") AND (([main-sub].รายการ) Is Not Null) AND ((main.[เลขที่ใบสั่ง]) Is Not Null)) OR ((([main-sub].รายการ) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[ราคาต่อหน่วย]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[จำนวนสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หน่วยสินค้า-แยก]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ใบสั่งซื้อ]) Like ""*" & txtsearch & "*"")) OR (((main.[วันที่ตรวจรับ]) Like ""*" & txtsearch & "*"")) OR (((main.[ชื่อร้าน]) Like ""*" & txtsearch & "*"")) OR (((main.[บิลเล่มที่]) Like ""*" & txtsearch & "*"")) OR (((main.[บิลเลขที่]) Like ""*" & txtsearch & "*"")) OR (((main.[วัสดุหรือซ่อมอะไร]) Like ""*" & txtsearch & "*"")) OR (((main.[เลขที่ใบสั่ง]) Like ""*" & txtsearch & "*"")) OR (((main.sj) Like ""*" & txtsearch & "*"")) OR ((([main-sub].[หมายเหตุเบิก]) Like ""*" & txtsearch & "*"")) OR (((main.[รวมราคาทั้งสิ้น]) Like ""*" & txtsearch & "*""));"
Me.RecordSource = SQL
Me.Requery
Text24.SetFocus
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If rs.RecordCount < 1 Then
Set rs = Nothing
Exit Sub
Else
rs.FindFirst "[รายการ] Like '*" & txSearch & "*'"
Me.Bookmark = rs.Bookmark
End If
End If
End Sub
ขอรบกวน อาจารย์ดูให้อีกรอบครับผม
Time: 0.2988s
อันดับแรกก็อาจให้มันเป็น statement แบบไม่มี เงื่อนไขก็ได้
พอมีการคีย์ข้อมูลเข้า text24 ค่อยต่อสายอักขระ อย่างที่ต่อนั่นแหละครับ แล้วเอามันไปเป็น recordsource ของฟอร์ม
Private Sub Text24_AfterUpdate()
Dim txtsearch As String
Dim strSQL as string
txtsearch = Text24 ' ต้องเขียนกลับฝั่งแบบนี้ครับ
strSQL = "SELECT ..... อย่างที่ต่อไว้นั่นแหละครับ เอามาทั้งหมดเลย
me.recordsource = strSQL
me.requery
ตอนนี้ ในฟอร์มก็อาจจะมีหลายเรคคอร์ดหรือเรคคอร์ดเดียวหรืออาจจะไม่มีเลยก็ได้ เราจะไฮไลท์มันก็ต้องมีการนับเรคคอร์ดซะก่อน ว่ามันมีเรคคอร์ดหรือเปล่า
dim db as DAO.database
dim rs as DAO.recordset
set rs = me.recordsetclone
if rs.recordcount < 1 then
set rs=nothing
exit sub ' มันไม่มีเรคคอร์ดเราก็ไม่ต้องทำไฮไลท์
else
rs.findfirst "[รายการ] Like '*" & txSearch & "*'"
me.bookmark=rs.bookmark
set rs=nothing
end sub