SQL Server 작은따옴표 쌍을 사용하여 문자열의 시작과 끝을 나타냅니다. 'Mrs Brown's Boys'를 데이터베이스 테이블에 삽입하면 세 개의 작은따옴표가 두 개의 문자열을 의미하는데, 그중 하나가 불완전하기 때문에 삽입이 실패합니다. Brown 뒤에 오는 아포스트로피에는 이스케이프 문자가 필요합니다. 이 문서에서는 이러한 문제를 해결하기 위해 사용자 지정 VBA 함수를 사용하는 방법을 살펴봅니다.
이 문서에서는 독자에게 개발자 리본이 표시되고 VBA 편집기에 익숙하다고 가정합니다. 그렇지 않은 경우 Google "Excel 개발자 탭"또는 "Excel 코드 창"을 사용하십시오.
여기서 "데이터베이스"라는 용어는 다음과 같은 "산업용"데이터베이스에 적용됩니다. SQL Server 그리고 오라클.
이 연습에 사용 된 통합 문서의 예를 찾을 수 있습니다. 여기에서 확인하세요.
SQL 문자열
SQL 문에 작은따옴표(또는 작은따옴표)를 포함하면 데이터베이스 관리자에서 다음과 같은 오류가 반환됩니다(이 경우 O'Dowd라는 이름에 대해).
이스케이프 문자가 필요하며, 이는 단일 아포스트로피 대신 이중 아포스트로피입니다. 따라서 O”Dowd는 데이터베이스에서 허용되지만 O'Dowd는 허용되지 않습니다.
함수
캡처 필드에 작은따옴표가 포함될 수 있는 경우, 업데이트 전에 실행되어 작은따옴표를 큰따옴표로 바꾸는 사용자 지정 함수를 만들 수 있습니다.
- 새 통합 문서를 엽니 다.
- 첫 번째 시트의 이름을 "Update"로 지정하고 자신의 데이터베이스 이름 등을 사용하여 다음과 같이 완료합니다.이 필드는 다음과 같은 연결 문자열을 작성하는 데 사용됩니다. SQL Server.
- 코드 창을 열고 모듈을 삽입하세요. 메뉴 항목 > 도구 > 참조를 사용하여 ADO 라이브러리를 참조할 수 있습니다.
아래 코드를 모듈에 복사하십시오. 이것은 데이터베이스에 연결됩니다.
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
- 모듈에 함수를 추가하십시오.
함수 fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") '따옴표 위치 찾기 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 End Function
- 기능을 무시하십시오.
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
- 기능 사용
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
- 를 완료 업데이트 워크시트는 다음과 같습니다. 셀부터 시작합니다. A8 :
- 매크로에 버튼 할당 Ignore 함수 사용 함수 대답하여
결과
메시지 상자에 결과가 표시됩니다. 이 연습에서는 데이터베이스가 실제로 업데이트되지 않지만 그렇게하려면 필드 이름이 데이터베이스와 호환되는지 확인하고 VBA 문 conndb.execute (strSQL) 사용을 추가합니다.
Excel 충돌에서 복구
엑셀은 컴퓨터 리소스가 부족해지면 충돌하는 경우가 많습니다. 이 연습 문제를 작성하는 동안 아직 저장하지 않은 엑셀 스프레드시트가 멈췄습니다. 코드 창은 부분적으로만 응답하여 통합 문서 전체를 닫을 수 있었습니다. 다행히 통합 문서는 내용과 코드가 모두 포함된 상태로 정상적으로 다시 열렸습니다. 만약 임시 파일과 원본 파일이 (너무나 자주 발생하는 것처럼) 손상되었다면, 문제를 해결할 도구가 없는 상황에서 작업을 처음부터 다시 해야 했을 것입니다. xlsx 손상. 이 경우에는 별 의미가 없었지만 더 큰 통합 문서에는 잠재적 인 재앙이 될 수 있습니다.
저자 소개 :
Felix Hooker는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. rar 복구 및 SQL 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM


