วิธี Escape Quoted Strings สำหรับคำสั่ง SQL ที่ใช้ในฐานข้อมูลผ่าน Excel VBA

แบ่งปันเลย:

SQL Server ใช้คู่ของเครื่องหมายคำพูดเดี่ยวเพื่อระบุ start และจุดสิ้นสุดของสตริง การแทรก 'Mrs Brown's Boys' ลงในตารางฐานข้อมูลจะล้มเหลวเนื่องจากเครื่องหมายคำพูดเดี่ยวสามคำบ่งบอกถึงสองสตริงซึ่งหนึ่งในนั้นไม่สมบูรณ์ จำเป็นต้องมีอักขระหลีกสำหรับ apostrophe หลังจาก Brown บทความนี้จะอธิบายการใช้ฟังก์ชัน VBA ที่กำหนดเองเพื่อแก้ไขความผิดปกตินี้

บทความนี้ถือว่าผู้อ่านมี Ribbon ของนักพัฒนาปรากฏอยู่และคุ้นเคยกับ VBA Editor มิฉะนั้นโปรดใช้“ แท็บนักพัฒนา Excel” ของ Google หรือ“ หน้าต่างรหัส Excel”

คำว่า "ฐานข้อมูล" ในที่นี้ใช้กับฐานข้อมูล "ความแข็งแกร่งทางอุตสาหกรรม" เช่น SQL Server และ Oracle.

ตัวอย่างของสมุดงานที่ใช้ในแบบฝึกหัดนี้สามารถพบได้ Good Farm Animal Welfare Awards.

สตริง SQL

การรวม apostrophes (หรือเครื่องหมายคำพูดเดี่ยว) ภายในคำสั่ง SQL แสดงข้อผิดพลาดต่อไปนี้ที่ส่งคืนจากตัวจัดการฐานข้อมูล (สำหรับชื่อ O'Dowd ในกรณีนี้):เกิดข้อผิดพลาดจากตัวจัดการฐานข้อมูล

จำเป็นต้องมีอักขระหลบหนีโดยเป็น double apostrophe แทนที่จะเป็นแบบเดี่ยว ดังนั้น O” Dowd จึงเป็นที่ยอมรับของฐานข้อมูล O'Dowd ไม่ใช่

ฟังก์ชั่น

โดยที่ช่องจับภาพอาจมี apostrophe ฟังก์ชันที่กำหนดเองสามารถสร้างขึ้นเพื่อเริ่มการทำงานก่อนการอัปเดตแทนที่อัญประกาศเดี่ยวด้วยคู่

  1. เปิดสมุดงานใหม่
  1. ตั้งชื่อแผ่นงานแรกว่า“ Update” และกรอกข้อมูลดังต่อไปนี้โดยใช้ชื่อฐานข้อมูลของคุณเองเป็นต้นฟิลด์เหล่านี้จะใช้เพื่อสร้างสตริงการเชื่อมต่อ SQL Server.ตั้งชื่อแผ่นงานแรกว่า "อัปเดต" และกรอกตามนี้
  2. เปิดหน้าต่างรหัสและใส่โมดูล ใช้รายการเมนู> เครื่องมือ> การอ้างอิงเพื่ออ้างอิง ADO librarโอบอุ้มเปิดหน้าต่างรหัสและแทรกโมดูล

คัดลอกโค้ดด้านล่างลงในโมดูล สิ่งนี้เชื่อมต่อกับฐานข้อมูล

Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase () ถ้า connDB.State = 1 แล้ว connDB ปิดข้อผิดพลาด GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = ชีต ("อัปเดต") ช่วง ("B2") strDBase = ชีต ("อัปเดต") ช่วง ("B3") strUser = ชีต ("อัปเดต") ช่วง ("B4") strPWD = ชีต (" Update "). range (" B5 ") ถ้า strPWD>" "แล้ว strConnectionstring =" DRIVER = {SQL Server}; เซิร์ฟเวอร์ = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Connection Timeout = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'การรับรองความถูกต้องของ Windows สิ้นสุดหาก connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring ออกจาก Sub ErrConnect: MsgBox Err.Description End Sub
  1. เพิ่มฟังก์ชันลงในโมดูล:
ฟังก์ชัน fRemoveApostrophe (strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr (x + 2, strWord, "'")' ค้นหาตำแหน่งของ apostrophes ถ้า x = 0 แล้วออกสำหรับ If x> 0 แล้ว strWord = ซ้าย (strWord, x - 1) & Chr (39) & Chr (39) & ขวา (strWord, Len (strWord) - (x)) สิ้นสุดถ้าถัดไป n fRemoveApostrophe = strWord End Function
  1. ละเว้นฟังก์ชัน
Sub IgnoreFunction () เรียก ConnectDatabase strCriteria = Sheets ("Update") ช่วง ("B10") strSQL = "แทรกลงในค่า tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & "รายการ SQL นี้จะ ล้มเหลวสังเกตสาม apostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. ใช้ฟังก์ชัน
Sub UseFunction () เรียก ConnectDatabase strCriteria = Sheets ("Update") ช่วง ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "แทรกลงในค่า tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & "รายการ SQL นี้จะสำเร็จและปรากฏใน datatable เป็น O'Dowd" Debug พิมพ์ strSQL 'connDB.Execute (strSQL) End Sub
  1. ทำแบบสำรวจ บันทึก แผ่นงานดังนี้สtarการแต่งแต้มที่เซลล์ A8:ทำแผ่นงานการอัปเดตให้เสร็จสมบูรณ์
  1. กำหนดปุ่มให้กับมาโคร ฟังก์ชันละเว้น และ ใช้ฟังก์ชัน ซ้ำ

ผลลัพธ์

กล่องข้อความจะแสดงผลลัพธ์ ไม่มีการอัพเดตฐานข้อมูลในแบบฝึกหัดนี้ แต่หากคุณต้องการทำเช่นนั้นตรวจสอบให้แน่ใจว่าชื่อฟิลด์เข้ากันได้กับฐานข้อมูลของคุณและเพิ่มใช้คำสั่ง VBA conndb.execute (strSQL)

การกู้คืนจาก Excel ขัดข้อง

Excel มีแนวโน้มที่จะพังเมื่อคอมพิวเตอร์ของคุณใช้ทรัพยากรไม่เพียงพอในระหว่างการเขียนแบบฝึกหัดนี้สเปรดชีตของ Excel ซึ่งยังไม่ได้บันทึกจะหยุดนิ่ง หน้าต่างรหัสตอบสนองบางส่วนทำให้สามารถปิดสมุดงานโดยรวมได้ เมื่อปรากฎเวิร์กบุ๊กจะเปิดขึ้นใหม่ตามปกติโดยมีเนื้อหาและโค้ดเสร็จสมบูรณ์ มีจังหวะrary และไฟล์ต้นฉบับได้รับความเสียหาย (บ่อยเกินไป) งานจะต้องได้รับการทำใหม่หากไม่มีเครื่องมือในการแก้ไข xlsx ดาเมจ. มันมีความสำคัญเพียงเล็กน้อยในกรณีนี้ แต่อาจเป็นหายนะสำหรับสมุดงานขนาดใหญ่

บทนำผู้เขียน:

Felix Hooker เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ กู้ rar และผลิตภัณฑ์ซอฟต์แวร์กู้คืน sql ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด