แปลง SQL text ไปใช้ใน vb ทำยังไง
กระทู้เก่าบอร์ด อ.Yeadram

 2,374   6
URL.หัวข้อ / URL
แปลง SQL text ไปใช้ใน vb ทำยังไง

ขอความช่วยเหลือค่ะ

SELECT tbOrderMain.OrderRefNo, tbOrderMain.OrderDate, tbProduct.ProdName, tbOrderSub.OrderQty, tbOrderSub.OrderRetInv , tbOrderSub.OrderRetItem, tbOrderSub.OrderRetQty, tbOrderSub.OrderRemark
FROM tbProduct INNER JOIN (tbOrderSub INNER JOIN tbOrderMain ON tbOrderSub.OrderID = tbOrderMain.OrderID) ON tbProduct.ProdCode = tbOrderSub.OrderProdCode
WHERE (((tbOrderMain.OrderRefNo) = "txtCustmPO") And ((tbProduct.ProdName) = "txtProductName") And ((tbOrderSub.OrderRetInv) = "txtInv"))
ORDER BY tbOrderSub.OrderRetItem;

แปลงเป็น SQL แบบที่เอาไปเป็น Record Source ที่เอาไปใช้ใน VB ยังไงคะ ช่วยอธิบายอย่างละเอียดด้วยจะดีมากเลยค่ะ

ขอบคุณค่ะ

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R06498
ขอแทรกนิดหน่อย ถ้าจะเรียก Visual Basic ที่ใช้กับ Microsoft Access หรือโปรแกรมใดๆในชุดของ Microsoft Office ให้เรียก VBA (Visual Basic for Application) ถ้าไม่เช่นนั้น จะเข้าใจว่าจะหมายถึง Visual Basic ใน Visual Studio ครับ
2 @R06499


ขอบคุณมากค่ะ อันที่จริงก็ VBA อย่างที่ท่าน อ.สันติสุข บอกนั้นแหละค่ะ

และขอถามว่า ถ้าใน กรณีที่เราใช้

Like " * " & [Data to find please] & " * "

ใน คิวรี่น่ะค่ะ แล้วจะแปลงรูปแบบยังไงเหรอคะ ยังสามารถใช้วิธีเดียวกับที่ท่าน อ.Yeadram สอนหรือไม่ค่ะ บอกจริงๆ สับสนมากๆ เลย
3 @R06500
ขอตอบแทรก อ.Yeadram หน่อยนะครับ การอ้าง Query Parameter ที่ชื่อ [Data to find please] นั้น เราใช้ได้ใน Query object เท่านั้น เราไม่สามารถใช้งานได้ถ้าหากจะแปลงเป็น SQL statement   จะด้วยวิธีใดก็แล้วแต่ เราต้องทำการหาค่าของส่วนนี้มาให้ได้ก่อน สมมุติว่า คุณหามาได้และใส่ไว้ในตัวแปรชื่อ txtData ดังนั้นตัวแปรประเภท string ที่จะเก็บ SQL statement ก็ต้องอยู่ในรูป

ชื่อตัวแปร = "SELECT ...... WHERE .... LIKE '*" & txtData & "*' "

เพิ่มเติมอีกนิดว่า เราสามารถเขียน VBA เพื่อเรียกใช้ Query object เพื่อให้ได้ผลลัพธ์ที่ต้องการโดยไม่จำเป็นต้องแปลงออกมาเป็น SQL statement ก็ได้นะครับ ไม่ว่า Query object นั้นจะมี Query Parameter อยู่ด้วยหรือไม่ก็ตาม

ถ้าไม่มี Query Parameter ก็เรียกด้วย Set RecordSetObject = DatabaseObject.OpenRecordset("ชื่อ Query Object")

ถ้ามี Query Parameter ก็เรียกด้วย
Dim QD As QueryDef
Set QD = DatabaseObject.QueryDefs("ชื่อ Query Object")
QD.Parameters("ชื่อ Parameter") = ค่าที่ต้องการ
Set RecordSetObject = QD.OpenRecordset

ลองหาตัวอย่างในกระทู้เก่าๆดูนะครับ

4 @R06501
ลองทำแล้วค่ะ ได้ออกมาแบบนี้

Private Sub cmdSearch_Click()

SQLtext = "SELECT tbOrderMain.OrderRefNo, tbOrderMain.OrderDate, tbProduct.ProdName, tbOrderSub.OrderQty,"
SQLtext = SQLtext & "tbOrderSub.OrderRetInv , tbOrderSub.OrderRetItem, tbOrderSub.OrderRetQty, tbOrderSub.OrderRemark"
SQLtext = SQLtext & "FROM tbProduct INNER JOIN (tbOrderSub INNER JOIN tbOrderMain ON tbOrderSub.OrderID = tbOrderMain.OrderID)"
SQLtext = SQLtext & "ON tbProduct.ProdCode = tbOrderSub.OrderProdCode"
SQLtext = SQLtext & "WHERE (((tbOrderMain.OrderRefNo) like '" & txtCustmPO.Value & "*') And ((tbProduct.ProdName) like '*" & txtProductName.Value & "*')"
SQLtext = SQLtext & "And ((tbOrderSub.OrderRetInv) like '" & txtInv.Value & "*'))"
SQLtext = SQLtext & "ORDER BY tbOrderSub.OrderRetItem;"

frmMakeInvSub.RecordSource = SQLtext
Me.RecordSource = SQLtext
Me.txtProductName.SetFocus

End Sub

ผ่านการตรวจสอบไม่เกิดเออเร่อของ โค็ด ค่ะ

แค่พอทดลองใช้งานจะเกิด ข้อผิดพลาดดังรูปค่ะ ไม่รู้จะแก้ยังไง

5 @R06505
SQLText แต่ละครั้งที่ทำการ concatenate กัน (เอามาต่อกัน) ไม่เห็นมีช่องว่างคั่นเลย ตย.ผลของบรรทัดที่ 2 กับบรรทัดที่ 3 ก็จะเป็น SELECT ..... tbOrderSub.OrderRemarkFROM tbProduct INNER JOIN... ก็จะทำให้ syntax error ครับ ก็แก้โดย เพิ่มช่องว่างสักช่องก่อนการ concatenate แต่ละครั้่ง

คุณต้องหัดอ่านว่า error ที่เกิดขึ้นคืออะไร แล้วลองพยายามหาจุดที่ผิดเอานะครับ และควรใช้ debuging ให้เป็นด้วย งานโปรแกรมมิ่งหลีกเลี่ยง debuging ไม่ได้นะครับ
6 @R06506

ขอบคุณมากค่ะ ท่านอาจารย์ น่าอายจัง แก้ได้นิดเดียวเอง แต่คิดไม่ถึง หลังจากพยายามมาสามวัน
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3296s