2010-07-26 18 views
6

Tüm Unicode sıkıştırmasını ve tüm "erişim sıfır uzunluğunu" bir erişim veritabanında (.mdb) kapatan bir program yapmalıyım.ADOX Birden çok basamaklı OLE DB işlemi oluşturulan hatalar

Sıfır Uzunluğuna İzin Ver özelliğini kapatma yöntemi çok iyi çalışır. Ancak, Unicode sıkıştırmayı kapatma yöntemi hiç çalışmaz ve şu özel durumu döndürür:

Birden çok aşamalı OLE DB işlemi oluşturulmuş hatalar. Varsa, her bir OLE DB durum değerini kontrol edin. Hiçbir iş yapılmadı.

Bunu nasıl çözeceğiniz konusunda herhangi bir ipucu var mı?

metin kopyalanmış ve MS Word gibi bir uygulamadan yapıştırıldığında Uygun UNICODE değerleri yok karakterler için Dizelerinizi kontrol etmelisiniz
+0

Bu sorun, Access'te de çalıştırılıyor. SQL önceki önermede önerilen uygun değil mi? – Fionnuala

+0

İzin Verilen Sıfır Uzunluğunu kaldırmak için ADOX kullanmalıyım, bu nedenle neden ADOX kullanarak UNICODE sıkıştırmasını kaldırmayasınız? çok kötü, beklendiği gibi çalışmıyor ... bir sürü fikir var mı? – MadSeb

+1

ADOX, yerel olmayan bir veri soyutlama katmanıdır ve belirli bir veritabanı motorunun tüm özelliklerini kullanamaz. Jet/ACE, yerel veri arabirimi katmanı olan DAO'nun, Jet 4 sürümünün zaman çerçevesinde MS ADO-her yer kampanyası sırasında sakatlanması nedeniyle özellikle kötü bir durumdur. Talihsiz sonuç, neredeyse her şey için, DAO'yu kullanabilmenizdir, ancak birkaç şey için, tek destek ADO'dur. Ve evet, bu aptalca ve gerçekten berbat. Access ekibinin bunu ACE'de düzeltmeyi mi yoksa bazılarının zaten düzeltilmiş mi olduğunu bilmiyorum. –

cevap

0

, bu çoğu sokulabilir

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"); 
    }      
} 
. Özellikle "akıllı teklifler" çoğu zaman sorunlara neden olur.

Ayrıca aşağıdaki iş parçacığına bir göz atın (C++ içinde olmasına rağmen) Discussion on ADOX Property Usage in C++.

Özellikler arasında geçiş yapabilir ve mevcut değerlerini görüntüleyebilir misiniz?

İlgili konular