Excel VBA를 통해 데이터베이스에서 사용되는 SQL 문에 대해 인용 된 문자열을 이스케이프하는 방법

지금 공유 :

SQL Server 작은 따옴표 쌍을 사용하여 s를 식별합니다.tart와 문자열의 끝. 'Mrs Brown 's Boys'를 데이터베이스 테이블에 삽입하면 세 개의 작은 따옴표가 두 개의 문자열을 의미하므로 그 중 하나는 불완전합니다. ap에는 이스케이프 문자가 필요합니다.ost브라운 뒤의 로프. 이 문서에서는 사용자 지정 VBA 함수를 사용하여이 문제를 해결하는 방법을 살펴 봅니다.

이 문서에서는 독자에게 개발자 리본이 표시되고 VBA 편집기에 익숙하다고 가정합니다. 그렇지 않은 경우 Google "Excel 개발자 탭"또는 "Excel 코드 창"을 사용하십시오.

여기서 "데이터베이스"라는 용어는 다음과 같은 "산업용"데이터베이스에 적용됩니다. SQL Server Oracle.

이 연습에 사용 된 통합 문서의 예를 찾을 수 있습니다. 여기에서 확인하세요.

SQL 문자열

ap 포함ostSQL 문 내의 로프 (또는 작은 따옴표)는 데이터베이스 관리자에서 리턴 된 다음 오류를 제공합니다 (이 경우 이름 O'Dowd에 대해).데이터베이스 관리자에서 반환 된 오류

이중 AP 인 이스케이프 문자가 필요합니다.ost단일 대신 로프. 따라서 O”Dowd는 데이터베이스에 허용됩니다. O'Dowd는 그렇지 않습니다.

함수

캡처 필드에 AP가 포함될 수있는 경우ostrophe, 사용자 지정 함수는 업데이트 전에 실행되도록 빌드 할 수 있으며 작은 따옴표를 큰 따옴표로 대체 할 수 있습니다.

  1. 새 통합 문서를 엽니 다.
  1. 첫 번째 시트의 이름을 "Update"로 지정하고 자신의 데이터베이스 이름 등을 사용하여 다음과 같이 완료합니다.이 필드는 다음과 같은 연결 문자열을 작성하는 데 사용됩니다. SQL Server.첫 번째 시트의 이름을 "업데이트"로 지정하고 다음과 같이 작성하십시오.
  2. 코드 창을 열고 모듈을 삽입하십시오. 메뉴 항목> 도구> 참조를 사용하여 ADO lib를 참조하십시오.rar예.코드 창을 열고 모듈 삽입

아래 코드를 모듈에 복사하십시오. 이것은 데이터베이스에 연결됩니다.

Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase () If connDB.State = 1 Then connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Sheets ( "Update"). Range ( "B2") strDBase = Sheets ( "Update"). Range ( "B3") strUser = Sheets ( "Update"). Range ( "B4") strPWD = Sheets ( " Update "). Range ("B5 ") If strPWD>" "Then strConnectionstring ="DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Connection Timeout = 30; "Else strConnectionstring ="DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'Windows 인증 End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit 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 ~ 100 x = InStr (x + 2, strWord, " '")'p의 위치 찾기ostrophes If x = 0 Then Exit For If x> 0 Then strWord = Left (strWord, x-1) & Chr (39) & Chr (39) & Right (strWord, Len (strWord)-(x)) End If Next n fRemoveApostrophe = strWord 끝 함수
  1. 기능을 무시하십시오.
Sub IgnoreFunction () Call ConnectDatabase strCriteria = Sheets ( "Update"). Range ( "B10") strSQL = "Insert into tblCrewMember (LastName) values ​​( '"& strCriteria & "')"MsgBox strSQL & ".이 SQL 항목은 실패; XNUMX 개의 ap에주의하십시오ostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. 기능 사용
Sub UseFunction () ConnectDatabase 호출 strCriteria = Sheets ( "Update"). Range ( "B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Insert into tblCrewMember (LastName) values ​​( '"& strCriteria & "')"MsgBox strSQL & ".이 SQL 항목은 성공하고 데이터 테이블에 O'Dowd로 나타납니다." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. 를 완료 업데이트 다음과 같이 워크 시트, star세포에서 팅 A8 :업데이트 워크 시트 작성
  1. 매크로에 버튼 할당 Ignore 함수 사용 함수 대답하여

결과

메시지 상자에 결과가 표시됩니다. 이 연습에서는 데이터베이스가 실제로 업데이트되지 않지만 그렇게하려면 필드 이름이 데이터베이스와 호환되는지 확인하고 VBA 문 conndb.execute (strSQL) 사용을 추가합니다.

Excel 충돌에서 복구

컴퓨터에 리소스가 부족하면 Excel이 중단되기 쉽습니다.이 연습을 작성하는 동안 아직 저장되지 않은 Excel의 스프레드 시트가 정지되었습니다. 코드 창이 부분적으로 반응하여 통합 문서 전체를 닫을 수있었습니다. 결과적으로 통합 문서는 내용과 코드가 완성 된 상태로 정상적으로 다시 열렸습니다. 템포가 있었다rary 및 소스 파일이 (너무 자주) 손상 되었으면 해결할 도구가 없으면 작업을 다시 수행해야했습니다. xlsx 손상. 이 경우에는 별 의미가 없었지만 더 큰 통합 문서에는 잠재적 인 재앙이 될 수 있습니다.

저자 소개 :

Felix Hooker는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. 복구 rar 및 SQL 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.