2017-12-06 9 views
2

많은 수의 .mdb 파일 (Microsoft Access db-files)이 있습니다. 첫 번째 필드 (또는 열)의 이름은 MyField1입니다. 그러나 파일이 손상되어 실제 필드 이름이 \ufeffMyField1이거나 다른 말로하면 실제 필드 이름 앞에 0xFEFF이 붙습니다..mdb 필드 이름에서 이상한 문자 제거

나는 pyodbc-명령 colname가 errouneous 필드 이름입니다

cursor.execute("UPDATE MyTable SET NewField=" + colname + ";") 

를 사용하여 NewField\ufeffMyField1에서 문제의 필드를 복사하기 위해 노력하고있어

값을 (NewField이 이미 존재한다고 가정) colname은 pyodbc와 같은 것을 사용하여 가져옵니다.

rows = cur.columns(table='MyTable') 
for row in rows: 
    if("MyField1" in row.column_name): 
     colname=row.column_name 

UPDATE... 명령을 실행하면 여기에 설명 된대로 https://support.microsoft.com/en-us/help/815281/-file-sharing-lock-count-exceeded-error-message-during-large-transacti과 같이 MaxLocksPerFile Ms 액세스 매개 변수가 너무 낮은 드라이버 오류가 발생합니다. 그러나 프로그램에서 하나의 파일 만 여는 동안 MaxLocksPerFile 매개 변수를 몇 배 증가 시키므로 실제 문제가 아닌 것 같습니다.

문제없이 MS Access에서 파일을 열고 gui의 필드 이름을 바꿀 수 있습니다. 나는 gui에서 여분의 비트가 일반적인 인코딩과 일치하지 않기 때문에 필드의 이름이 잘못 지정되었다고 생각하는 방법을 찾지 못했습니다.

마지막으로, 필자는 제 질문으로 : 원시 바이트를 pyodbc 명령으로 전달할 수 있습니까?

다른 방법으로 여분의 문자를 제거하는 실제 문제를 해결하려면 의견을 제시해주십시오. (필드 이름에서 모든 비 ASCII 문자를 지우는 것과 같습니다)

+0

COM 및 DAO를 사용하여 열의 이름을 바꾸려고합니다. 당신이 아마도 잘못된 이름으로 필드를 참조 할 수 없기 때문에 이것이 SQL과 ODBC를 통해 가능할지는 의문입니다. 당신은 필드 이름을'[]'괄호로 묶어 문자가 아닌 문자를 처리하도록 시도 할 수있다. –

+0

여기에 .mdb 파일이 없지만 열 이름의 문자열이 파일의 원시 이진 파일에 나타나기 때문에 단순히 파일을 바꿀 수 있는지 확인 했습니까? – Jeronimo

+0

필드 이름과 연결된 방식으로 확인했으나 찾지 못했습니다. 결정적으로 말하기에 충분하지 않은 시간을 보냈다 – Schaki

답변

0

DAO를 사용하려면 매우 간단합니다. 다음 코드를 수정하여 모든 데이터베이스의 폴더를 찾고 반복 할 수 있습니다.

Sub Rename_First_Field() 
Dim dbs As DAO.Database 
Dim tdf As DAO.TableDef 
Dim fld As DAO.Field 

    Set dbs = OpenDatabase("C:\....\SomeDB.mdb") 
    For Each tdf In dbs.TableDefs   ' Spin thru all tables in this database 
     Set fld = tdf.Fields(0)    ' Grab the first field 
     Debug.Print tdf.Name & vbTab & "|" & vbTab & fld.Name 
     fld.Name = "MyField1"    ' Rename to 'MyField1' 
    Next tdf        'Move to next table 
    Set tdf = Nothing 
    Set dbs = Nothing 
End Sub 
+0

그건 파이썬 코드가 아니야. 내 제안은 Python에서 COM과 PyWin32를 사용하여 DAO를 호출하는 것이었다. 물론 VBA를 사용하면 훨씬 쉽습니다. –

관련 문제