Всякий раз, когда моей программе требуется также запросить базу данных, это приведет к ошибкам графического интерфейса, таким как случайное изменение шрифтов формы, изменение размера самой формы, смешивание данных в сетке данных, и это повлияет на всю программу, а не только на форму, которая вызов функции запроса.
Я использую это соединение
"Provider=Microsoft.ACE.OLEDB.12.0;"
Public DBDA As OleDbDataAdapter
Public DBDT As DataTable
DBDT = New DataTable
DBDA = New OleDbDataAdapter(DBCmd)
RecordCount = DBDA.Fill(DBDT)
и вот моя функция Execute Query:
Public Sub ExecQuery(Query As String)
'RESET QUERY STATS
RecordCount = 0
Exception = ""
Try
'OPEN A CONNECTION
DBCon.Open()
'CREATE DB COMMAND
DbCmd = New OleDbCommand(Query, DBCon)
'LOAD PARAMETERS INTO COMMAND
Params.ForEach(Sub(Par) DbCmd.Parameters.Add(Par))
'CLEAR PARAMETERS LIST
Params.Clear()
'EXECUTE COMMAND & FILL DATA
DBDT = New DataTable
DBDA = New OleDbDataAdapter(DbCmd)
RecordCount = DBDA.Fill(DBDT)
Catch ex As Exception
Exception = ex.Message
End Try
'CLOSE CONNECTION
If DBCon.State = ConnectionState.Open Then DBCon.Close()
End Sub
и пример того, как я запрашиваю из формы
Private QC As New QueryControl
Public Sub RefreshGrid()
'RUN QUERY
QC.ExecQuery("SELECT * FROM Database")
If Not String.IsNullOrEmpty(QC.Exception) Then MsgBox(QC.Exception) : Exit Sub
'POPULATE DATAGRID
Datagridview1.DataSource = QC.DBDT
End Sub
Я попытался запустить отладку программы, комментируя каждую строку по отдельности, и пришел к выводу, что функция ExecQuery () является причиной проблемы. Кто-нибудь встречал нечто подобное?
У меня была проблема с изменением размера формы. Это был 32-битный провайдер Ace. Я скачал 64-битный провайдер Ace и установил его. В свойствах решения снимите флажок «Предпочитать 32-битный», и все должно быть в порядке.
Это сводило меня с ума надолго. Я думаю, что это на форумах MS в разделе «Невероятная форма сжатия» :-)
Большое спасибо, я загрузил 64-битные версии и изменил целевой вывод с «All CPU» на «x64», а также мне пришлось изменить методы подключения, в проводнике сервера в расширенных свойствах я изменил службы Oledb с Default на Enable Все и после всего, что работало. Я также включил осведомленность о DPI, как указано в предыдущем посте, но я думаю, этого было недостаточно.