晓斌 黄 Ответов: 2

НЕАНГЛИЙСКАЯ строка red из MS ACCESS 2007 становится грязным кодом


Дорогие

Мой VB.NET проект соединяет MS ACCESS 2007 с помощью OleDbConnection, строка подключения как показано ниже
"Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=Д:\Мои Документы\управление макро надежного расположения\DOMTS.# то # ;"
считывает поля с помощью OleDb. OleDbDataReader
Фрагмент кода, который читает строку, выглядит следующим образом
cmd.CommandText = "select BLNO,SUM(WT) AS [T_WT],SUM(VOL) AS [T_VOL],NPOD,CCD FROM QueryNotify where [InSVVD.SVVD]='" + ComboBoxIn.Text + "' and [OutSVVD.FULL]='" + ComboBoxOut.Text + "' GROUP BY BLNO,NPOD,CCD"
'cmd is a OleDb.OleDbCommand
dr = cmd.ExecuteReader
'dr is OleDb.OleDbDataReader
Do While dr.Read
    DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO), Excel.Range).Value = intBL_COUNT
    DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 1), Excel.Range).Value = dr.Item("BLNO")
    DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 5), Excel.Range).Value = dr.Item("T_WT")
    If dr.Item("T_VOL") > 0 Then
        DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 6), Excel.Range).Value = dr.Item("T_VOL")
    End If
    MsgBox(dr.Item("CCD"))
    'To show the string red from database before assinged to MS Excel range, but messy code shown
    DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 7), Excel.Range).Value = dr.Item("CCD")
    DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 8), Excel.Range).Value = dr.Item("NPOD")

    Dim cmd2 As New OleDb.OleDbCommand
    Dim dr2 As OleDb.OleDbDataReader
    cmd2.Connection = conDOMTS
    cmd2.CommandText = "select CTNNO,CTNTYPE,SEALNO from QueryNotify where BLNO='" + dr.Item("BLNO") + "'"
    dr2 = cmd2.ExecuteReader
    While dr2.Read
        DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 2), Excel.Range).Value = dr2.Item("CTNNO")
        DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 3), Excel.Range).Value = dr2.Item("CTNTYPE")
        DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 4), Excel.Range).Value = dr2.Item("SEALNO")
        intROW_Detl = intROW_Detl + 1
    End While
    dr2.Close()
    intBL_COUNT = intBL_COUNT + 1
Loop


Проблема, поднятая из приведенных ниже утверждений
MsgBox(dr.Item("CCD"))
'To show the string red from database before assinged to MS Excel range, but messy code shown,also messy code shown in Excel
DirectCast(EXWS.Cells(intActRowNO + intROW_Detl, intActColNO + 7), Excel.Range).Value = dr.Item("CCD")


CCD - это поле памятки в MS ACCESS 2007. Если я открою файл базы данных напрямую, чтобы проверить файл, я увижу, что все символы показаны на правильном китайском языке.

Позавчера я не вносил никаких изменений в свой код и базу данных, но вчера хорошо работающий код начал испытывать проблемы. Может ли кто - нибудь помочь подсказать, как это исправить?

Что я уже пробовал:

Пытались изменить строку соединения на
"Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=Д:\Мои Документы\управление макро надежного расположения\DOMTS.# то#; кодировка=utf8 в"
но возникла ошибка, так как не удалось найти устанавливаемый ISAM

2 Ответов

Рейтинг:
1

Richard MacCutchan

Видеть https://support.microsoft.com/en-gb/kb/209805[^].


Рейтинг:
0

Maciej Los

Наиболее распространенная причина Could not find installable ISAM сообщение об ошибке-это плохая инструкция компиляции. Ты должен измениться Target platform к платформе, которая соответствует текущей установленной версии Office (x86 или x64)

Другая причина заключается в том, что драйверы OLEDB не установлены в целевой ОС. Ты должен загрузите и установите распространяемый пакет Microsoft Access Database Engine 2010 из официального центра загрузки Microsoft[^]


晓斌 黄

Привет Мацей

Вы упомянули платформу, вы меняете платформу, где находится мой файл MS ACCESS?

Maciej Los

Не в доступе! Перейдите в свойства проекта и измените "целевая платформа".