หลักการเชื่อม string ใน SQL
กระทู้เก่าบอร์ด อ.Yeadram

 10,359   4
URL.หัวข้อ / URL
หลักการเชื่อม string ใน SQL

ถ้าผมใช้คำสั่ง DoCmd.RunSQL "xxx", -1 แล้วผมลอก SQL ที่ได้จากการ RUN QUERY
มาใส่แทน XXX ทำไมมันไม่ได้ ครับ มันขึ้นเป็นตัว แดง เช่นได้ดังนี้

SELECT dr.ID, dr.Sprice_unit, dr.[48kk], dr.price_Bar, dr.saman, dr.am, dr.st_packsize, dr.out, dr.addr, dr.type, dr.unit, dr.name, [48ED].type, PhamaCO.ID, PhamaCO.ID_Gr, [dr]![id] AS idx"
FROM (48ED INNER JOIN dr ON ([48ED].ID = dr.ID_48ED) AND ([48ED].ID = dr.ID_48ED)) LEFT JOIN PhamaCO ON dr.ID = PhamaCO.ID_DR
ORDER BY [dr].name;

ถ้าผมลอก CODE นี้ใส่แทน XXX เลย การ RUNSQL จะไม่สามารถทำได้ ผมเข้าใจว่าจะต้องตัด
String ออกเป็นท่อนๆ เพราะเคยเห็นคุณ yearam เคยทำ
เช่น Dim SQL as string
               SQL=SQL+"xxxx" อะไรประมาณนี้
แล้วจึงเอามาใช้ แล้วมันมีหลักการตัด-ต่อ อย่างไรครับ ถึงจะใช้ได้ ไม่เป็นตัวแดง
เหมือนที่ผมเจอนะครับ ขอบคุณครับ

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

1 @R00461
คืออาจจะอธิบายยาวครับ
ขออธิบายสั้นๆก่อนละกัน

เวลาที่ copy มาจาก query มันจะอยู่คนละบรรทัดกัน ถ้าเอาให้ง่ายก็ปรับให้อยู่บรรทัดเดียวกัน
Select Field1, Field2
From table1
Where Field > 10;

ก็ให้เปลี่ยนเป็น อย่างนี้แทน
"Select Field1, Field2 From table1 Where Field > 10"

ถ้าจะเอาง่ายก็แค่นี้เองครับ ไม่ต้องไปเว้นบรรทัดมัน

เสร็จแล้วถ้ามันยาวมากไปค่อยมาต่อ String ด้วยเครื่องหมาย &
"Select Field1, Field2 From table1" & " Where Field > 10"
2 @R00462
ต่อให้อีกหน่อย
จากข้างบน... หากเราต้องการเขียนเว้นบรรทัด ก็ใส่เครื่องหมาย _ (under score) เข้าไป
"Select Field1, Field2 From table1" & _
" Where Field1 > 10"

ยังมีเงื่อนไขยิบย่อยอีกพอสมควร แต่เอาเป็นว่าเอาแค่นี้ไปลองดูก่อนนะครับ
3 @R00464
เพิ่มเติมครับ
การตัดต่อบรรทัด อย่างที่คุณแดนทำ เราจะอ้างตัวแปรแค่ครั้งเดียว คือที่บรรทัดแรก
sql = "Select Field1, Field2 From table1" & _
" Where Field1 > 10"

ส่วนที่คุณ kratok-man ยกตัวอย่าง โดยอ้างว่าผมเคยต่อประโยคอีกแบบนั้น
วิธีนั้น ก็ให้ผลเหมือนกันครับ วิธีนี้จะอ้างตัวแปรในทุกๆ บรรทัดเลยครับ
sql = "Select Field1, Field2 From table1"
sql = sql & " Where Field1 > 10"

วิธีที่สองนี้ จะไม่ต้องมี & _   ต่อท้ายนะครับ
ผลมันก็จะออกมาเหมือนกัน คือ ค่าของตัวแปร sql จะได้ string ชุดเดียว เขียนว่า
Select Field1, Field2 From table1 Where Field > 10

วิธีที่สองเหมาะสำหรับการใช้เงื่อนไขกำกับการเขียน statement ครับ เช่น
ถ้าเงื่อนไขเป็นจริงให้เขียนด้วยคำนี้ ถ้าเงื่อนไขเป็นเท็จ ก็เขียนในอีกแบบหนึ่ง
ตัวอย่างครับ
sql = "Select Field1, Field2 From table1"
if text1 <> "" then
sql = sql & " Where Field1 = '" & text1 "'"
else
sql = sql & " Where Field1 > 10"
end if

สิ่งที่ต้องระวังการเขียน statement เหล่านี้ใน vb หรือ vba ก็คือเครื่องหมายครับ
วางให้ถูกที่ มีเปิดต้องมีปิด ตัวไหนอยู่ส่วน statement ตัวไหนอยู่ส่วนคำสั่ง runsql
เครื่องหมาย สามตัวครับ   single, double, comma ดูให้ถี่ถ้วน แล้วจะไม่มีตัวแดงๆ มาให้เห็นครับ อิอิ
4 @R00465
ok ครับ ได้แล้วครับ ลองอยู่นานเหมือนกัน
ขอบคุณทั้ง สองท่านมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2494s