SQL Server sử dụng cặp dấu ngoặc đơn để xác định start và kết thúc của một chuỗi. Việc chèn 'Mrs Brown's Boys' vào bảng cơ sở dữ liệu sẽ không thành công vì ba dấu ngoặc đơn ngụ ý hai chuỗi, một trong số đó không đầy đủ. Cần có ký tự thoát cho ứng dụngostrophe sau Brown. Bài viết này tìm hiểu cách sử dụng hàm VBA tùy chỉnh để giải quyết sự cố bất thường này.
Bài viết này giả định rằng người đọc đã hiển thị dải băng Nhà phát triển và quen thuộc với Trình soạn thảo VBA. Nếu không, hãy Google “Excel Developer Tab” hoặc “Excel Code Window”.
Thuật ngữ “cơ sở dữ liệu” ở đây áp dụng cho cơ sở dữ liệu “sức mạnh công nghiệp” như SQL Server và Oracle.
Một ví dụ về sổ làm việc được sử dụng trong bài tập này có thể được tìm thấy đây.
Chuỗi SQL
Bao gồm apostrophes (hoặc dấu ngoặc đơn) bên trong câu lệnh SQL cung cấp lỗi sau được trả về từ trình quản lý cơ sở dữ liệu (đối với tên O'Dowd trong trường hợp này):
Cần có một nhân vật trốn thoát, là một nhân vật képostrophe thay vì một cái duy nhất. Do đó, O”Dowd được cơ sở dữ liệu chấp nhận. O'Dowd thì không.
Chức năng
Trường hợp các trường chụp có thể chứa apostrophe, một chức năng tùy chỉnh có thể được xây dựng để kích hoạt trước khi cập nhật, thay thế dấu ngoặc đơn bằng dấu ngoặc kép.
- Mở một sổ làm việc mới;
- Đặt tên cho trang đầu tiên là “Cập nhật” và hoàn thành như sau, sử dụng tên cơ sở dữ liệu của riêng bạn, v.v. Các trường này sẽ được sử dụng để xây dựng chuỗi kết nối tới SQL Server.
- Mở cửa sổ mã và chèn một mô-đun. Sử dụng các mục menu >Công cụ >Tham khảo để tham khảo lib ADOrarcác bạn
Sao chép mã bên dưới vào mô-đun. Điều này kết nối với cơ sở dữ liệu.
ConnDB công khai dưới dạng ADODB.Connection công khai rs Như mới ADODB.Recordset Public strSQL dưới dạng chuỗi Public strCriteria dưới dạng chuỗi Sub ConnectDatabase() Nếu connDB.State = 1 Thì connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Trang tính("Cập nhật").Range("B2") strDBase = Trang tính("Cập nhật").Range("B3") strUser = Trang tính("Cập nhật").Range("B4") strPWD = Trang tính(" Cập nhật").Range("B5") Nếu strPWD > "" Thì strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Hết thời gian kết nối=30;" Khác strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Kết thúc xác thực Windows Nếu connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Thoát Sub ErrConnect: MsgBox Err.Description End Sub
- Thêm chức năng vào mô-đun:
Chức năng fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Tìm vị trí của apostrophes Nếu x = 0 Then Thoát For If x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = Hàm kết thúc strWord
- Bỏ qua chức năng.
Sub IgnoreFunction() Gọi ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Chèn vào các giá trị tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Mục SQL này sẽ thất bại; lưu ý ba apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Sử dụng chức năng
Sub UseFunction() Gọi ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Chèn vào các giá trị tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Mục SQL này sẽ thành công và xuất hiện trong bảng dữ liệu dưới dạng O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Hoàn thành mẫu đơn Cập nhật bảng tính như sau, starting tại tế bào A8:
- Gán các nút cho macro Bỏ qua chức năng và Sử dụngChức năng lần lượt
Kết quả
Một hộp thông báo sẽ hiển thị kết quả; không có cơ sở dữ liệu nào được cập nhật về mặt vật lý trong bài tập này nhưng nếu bạn muốn làm như vậy, hãy đảm bảo tên trường tương thích với cơ sở dữ liệu của bạn và sử dụng câu lệnh VBA conndb.execute(strSQL)
Khôi phục từ sự cố Excel
Excel dễ bị lỗi khi máy tính của bạn hết tài nguyên. Trong quá trình viết bài tập này, bảng tính Excel chưa được lưu đã bị treo. Cửa sổ Mã phản hồi một phần, cho phép đóng toàn bộ sổ làm việc. Hóa ra, sổ làm việc đã mở lại bình thường với nội dung và mã đã hoàn tất. Có nhịp độrary và các tệp nguồn bị hỏng (tất cả đều quá thường xuyên), công việc sẽ phải được thực hiện lại nếu không có công cụ để giải quyết thiệt hại xlsx. Nó ít có ý nghĩa trong trường hợp này, nhưng có thể là một thảm họa tiềm ẩn đối với các sổ làm việc lớn hơn.
Giới thiệu tác giả:
Felix Hooker là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm lấy lại rar và các sản phẩm phần mềm phục hồi sql. Để biết thêm thông tin, hãy truy cập www.datanumennăm


