powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MyODBC E_FAIL Подскажите что не так
10 сообщений из 10, страница 1 из 1
MyODBC E_FAIL Подскажите что не так
    #35317451
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Private Sub Button0_Click()
    Dim ConnectionString As String
    ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;PORT=3306;DATABASE=testdb;USER=sa;PASSWORD=pass;OPTION=3;"
    Dim MySQLConnection As New ADODB.Connection
    MySQLConnection.ConnectionString = ConnectionString
    MySQLConnection.CursorLocation = adUseClient
    MySQLConnection.Open
    If MySQLConnection.State = adStateOpen Then
        Debug.Print "Connection success"
        Dim MySQLRecordset As New ADODB.Recordset
        MySQLRecordset.CursorLocation = adUseClient
        MySQLRecordset.CursorType = adOpenStatic
        MySQLRecordset.Open "SELECT Id, MessageDate, MessageValue FROM odbctest", MySQLConnection, adOpenForwardOnly, adLockReadOnly
        If MySQLRecordset.State = adStateOpen Then
            Dim RowCount As Long
            RowCount = MySQLRecordset.RecordCount
            Debug.Print "Recordset success"; RowCount
            While Not MySQLRecordset.EOF
                Debug.Print "Id:" & MySQLRecordset!Id & " Date:" & MySQLRecordset!MessageDate & " Value:" & MySQLRecordset!MessageValue
                MySQLRecordset.MoveNext
            Wend
            MySQLRecordset.Close
        Else
            Debug.Print "Recordset failed"
        End If
        MySQLConnection.Close
    Else
        Bedug.Print "Connection failed"
    End If
End Sub

Этот код выполняется нормально. Однако если в запрос добавить текстовое поле MessageText :
Код: plaintext
SELECT Id, MessageDate, MessageValue, MessageText FROM odbctest
выдает ошибку при открытии MySQLRecordset - E_FAIL
Типы полей:
Код: plaintext
1.
2.
3.
Id - INTEGER AUTOINC
MessageDate - DATETIME
MessageValue - DOUBLE
MessageText - CHAR( 32 )
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35318026
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyAlexвыдает ошибку при открытии MySQLRecordset - E_FAIL
А в Err что находится при ошибке?
Код: plaintext
1.
2.
3.
    If Err <>  0  Then
        MsgBox Err.Source & "-->" & Err.Description, , "Error"
    End If
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35336522
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
...
On Error Resume Next
        MySQLRecordset.Open "SELECT Id, MessageDate, MessageValue, MessageText FROM odbctest", MySQLConnection, adOpenForwardOnly, adLockReadOnly
If Err <>  0  Then
        Debug.Print "ErrNo: " & Err.Number & " ErrMessage: " & Err.Description
End If
...


Код: plaintext
ErrNo: - 2147467259  ErrMessage: Поставщик данных или другая служба вернули состояние E_FAIL.

Вот такие пироги ...
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35337342
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так:

Код: plaintext
SELECT Id, MessageDate, MessageValue, `MessageText` as T FROM odbctest
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35337422
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneа если так:

Код: plaintext
SELECT Id, MessageDate, MessageValue, `MessageText` as T FROM odbctest


попробовал. результат тот же, то есть E_FAIL .

Может что не так с версиями ODBC драйверов от Microsoft/MySQL или Access?
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35337573
Errors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что появляется в коллекции MySQLConnection.Errors?
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35337581
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может проблемы с кодировкой в поле, char(32) не очень удачный тип.
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35339097
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErrorsЧто появляется в коллекции MySQLConnection.Errors?

Код: plaintext
1.
2.
3.
4.
5.
6.
Description: Поставщик данных или другая служба вернули состояние E_FAIL.
HelpContext:  0 
HelpFile: ""
NativeError:  0 
Number: - 2147467259 
Source: Microsoft Cursor Engine
SQLState: ""

Может со свойствами курсора что не так?
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35339101
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneможет проблемы с кодировкой в поле, char(32) не очень удачный тип.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `odbctest` (
  `Id` int( 10 ) unsigned NOT NULL auto_increment,
  `MessageText` char( 32 ) character set cp1251 collate cp1251_bin NOT NULL,
  `MessageDate` datetime NOT NULL,
  `MessageValue` double NOT NULL,
  PRIMARY KEY  (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
...
Рейтинг: 0 / 0
MyODBC E_FAIL Подскажите что не так
    #35339412
MyAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
УРА-А-А ! ! ! ЗАРАБОТАЛО ! ! !
Лечится очень просто, как оказалось:

Код: plaintext
SELECT Id, MessageDate, MessageValue, CONVERT(MessageText USING utf8) AS MessageText FROM odbctest

Всем большое спасибо за участие.
Кстати, если поля DATETIME (и не только) возвращают NULL все нормально интерпретируется - как пустая строка или ноль, в случае числовых данных. То есть дополнительных преобразований не требуется. На решение натолкнуло это.

UNICODE RULES ! ! !
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MyODBC E_FAIL Подскажите что не так
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]