2010-07-26 3 views
6

액세스 데이터베이스 (.mdb)에서 모든 유니 코드 압축을 해제하고 "길이를 모두 허용"하는 프로그램을 만들어야합니다.ADOX 다중 단계 OLE DB 작업에서 오류가 발생했습니다.

Allow Zero Length를 끄는 방법은 매우 잘 작동합니다. 그러나 유니 코드 압축을 해제하는 방법은 전혀 작동하지 않으며 다음 예외를 반환합니다.

여러 단계 OLE DB 작업에서 오류가 발생했습니다. 가능한 경우 각 OLE DB 상태 값을 확인하십시오. 어떤 일도 행해지 지 않았다.

해결 방법에 대한 단서가 있습니까?

텍스트를 복사하여 MS 워드와 같은 응용 프로그램에서 붙여 넣을 때 당신은 적절한 유니 코드 값이없는 자에 대한 귀하의 문자열을 확인해야합니다
+0

또한 Access에서 실행되는이 문제가 발생합니다. 이전 게시물에 제안 된 SQL이 적합하지 않습니까? – Fionnuala

+0

ADOX를 사용하여 Allow Zero Length를 제거해야하므로 ADOX를 사용하여 UNICODE 압축을 제거하지 않는 이유는 무엇입니까? 너무 나쁜 그것은 예상대로 작동하지 않습니다. 모든 아이디어? – MadSeb

+1

ADOX는 넌 - 네이티브 데이터 추상화 계층이며 특정 데이터베이스 엔진의 모든 속성을 반드시 조작 할 수있는 것은 아닙니다. Jet/ACE는 Jet 4 릴리스의 기간에 MS ADO-everywhere 캠페인 중 원시 데이터 인터페이스 레이어 인 DAO가 손상된 경우 특히 좋지 않습니다. 불행한 결과는 거의 모든 것이 DAO를 사용할 수 있지만 몇 가지 경우 유일한 지원은 ADO에 있다는 것입니다. 그리고 예, 그것은 바보스럽고 정말 짜증납니다. 액세스 팀이 ACE에서이 문제를 해결할 계획인지 아니면 일부가 이미 수정 된 것인지 여부는 알 수 없습니다. –

답변

0

이,이 종종 도입 할 수

private void TurnOffUnicodeCompressionInField(ADOX.CatalogClass catalogClass, String tableName, String field) 
{   
    ADOX.Column column = catalogClass.Tables[tableName].Columns[field]; 
    ADOX.Property prop = column.Properties["Jet OLEDB:Compressed UNICODE Strings"]; 
    prop.Value = true; 
} 

private void TurnOffAllowZeroLengthInAllFields(ADOX.CatalogClass catalogClass, String tableName) 
{ 
    foreach (ADOX.Column column in catalogClass.Tables[tableName].Columns) 
     column.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
} 

private void MyButton_Click(object sender, EventArgs e) 
{ 
    String filePath = ""; 
    OpenFileDialog ofd = new OpenFileDialog(); 
    DialogResult result = ofd.ShowDialog(); 

    if (result == DialogResult.OK) 
    { 
     filePath = ofd.FileName; 
     ADOX.CatalogClass catDatabase = new ADOX.CatalogClass(); 
     catDatabase.let_ActiveConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath); 

     // SoftwareTable 
     TurnOffAllowZeroLengthInAllFields(catDatabase,"Software"); 
     TurnOffUnicodeCompressionInField(catDatabase, "Software", "Description"); 
     TurnOffUnicodeCompressionInField(catDatabase, "Software", "Name"); 
    }      
} 
. 특히 "스마트 쿼트"는 종종 문제를 일으 킵니다.

또한 다음 스레드를 살펴보십시오 (C++에도 있음) Discussion on ADOX Property Usage in C++.

속성을 반복하고 현재 값을 표시 할 수 있습니까?