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

แบ่งปันเลย:

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

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

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

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

สตริง SQL

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

จำเป็นต้องใช้อักขระพิเศษ คือ เครื่องหมายอะพอสโทรฟีสองตัวติดกัน แทนที่จะเป็นตัวเดียว ดังนั้น O”Dowd จึงเป็นที่ยอมรับในฐานข้อมูล แต่ O'Dowd ไม่เป็นที่ยอมรับ

ฟังก์ชั่น

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

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

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

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, "'") 'ค้นหาตำแหน่งของเครื่องหมายอะโพสโทรฟี ถ้า x = 0 แล้ว Exit For ถ้า x > 0 แล้ว strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. ละเว้นฟังก์ชัน
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". This SQL entry will fail; note the three apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. ใช้ฟังก์ชัน
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". This SQL entry will succeed, and appear in the datatable as O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. ทำแบบสำรวจ บันทึก เวิร์กชีตดังต่อไปนี้ โดยเริ่มที่เซลล์ A8:ทำแผ่นงานการอัปเดตให้เสร็จสมบูรณ์
  1. กำหนดปุ่มให้กับมาโคร ฟังก์ชันละเว้น และ ใช้ฟังก์ชัน ซ้ำ

ผลลัพธ์

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

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

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

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

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

แบ่งปันเลย:

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