กระทู้เก่าบอร์ด อ.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 ยังไงคะ ช่วยอธิบายอย่างละเอียดด้วยจะดีมากเลยค่ะ
ขอบคุณค่ะ
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 สอนหรือไม่ค่ะ บอกจริงๆ สับสนมากๆ เลย
ขอบคุณมากค่ะ อันที่จริงก็ 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
ลองหาตัวอย่างในกระทู้เก่าๆดูนะครับ
ชื่อตัวแปร = "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
ผ่านการตรวจสอบไม่เกิดเออเร่อของ โค็ด ค่ะ
แค่พอทดลองใช้งานจะเกิด ข้อผิดพลาดดังรูปค่ะ ไม่รู้จะแก้ยังไง
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 ไม่ได้นะครับ
คุณต้องหัดอ่านว่า error ที่เกิดขึ้นคืออะไร แล้วลองพยายามหาจุดที่ผิดเอานะครับ และควรใช้ debuging ให้เป็นด้วย งานโปรแกรมมิ่งหลีกเลี่ยง debuging ไม่ได้นะครับ
6 @R06506
ขอบคุณมากค่ะ ท่านอาจารย์ น่าอายจัง แก้ได้นิดเดียวเอง แต่คิดไม่ถึง หลังจากพยายามมาสามวัน
ขอบคุณมากค่ะ ท่านอาจารย์ น่าอายจัง แก้ได้นิดเดียวเอง แต่คิดไม่ถึง หลังจากพยายามมาสามวัน
Time: 0.3296s