Преобразование MEMO Ms Jet DB Тип данных в MySql - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть программа Access 97 VBA, которая копирует кучу информации с эмулятора терминала PCOM.Я хотел бы синхронизировать эту базу данных с удаленным сервером SQL.Я не смог найти никого, кто делал это с помощью MS Access 97, поэтому я решил сделать это по-своему.Удаленная база данных подключена с помощью Access 97. Я пытаюсь запустить этот код:

Set qweMensagens = Mdb.OpenRecordset("SELECT * FROM AtualizarMensagens WHERE AtualizarMensagens.contrato_bb = '" & contratoVAR & "';")
If qweMensagens.RecordCount > 0 Then GoTo MOVENEXTNOW3
qweMensagens.AddNew
qweMensagens!contrato_bb = qweCont!Contrato
qweMensagens!mensagem = qweCont!mensagem
qweMensagens!Data = data_padrao
qweMensagens!Append = qweCont!Append
qweMensagens!qweContratos = qweCont!qweContratos
qweMensagens!men_data_evento = qweCont!men_data_evento
qweMensagens!men_data_movimento = qweCont!men_data_movimento
qweMensagens.Update

Проблема возникает с этой строкой: qweMensagens! Mensagem = qweCont! Mensagem Ошибка времени выполнения 3163 - данные тожебольшой для поля.

Поле qweCont! Mensagem в БД MS Access - это MEMO с ~ 3000 симв.И я уже пытался изменить поле qweMensagens! Mensagem в БД MySQL на LONGTEXT и LONGBLOB.

Это совсем не помогло.Это все еще дает ту же ошибку.

Я осознал, что это может быть проблема текстового типа, но решение здесь не помогло вообще.И даже здесь они сказали, что я должен использовать LONGTEXT для типов MEMO.

Я что-то здесь упускаю?Могу ли я принудительно преобразовать данные типа MEMO в UTF-8 или ANSI перед отправкой на сервер mysql?

РЕДАКТИРОВАТЬ:

Странно, если я копирую поле MEMO и вставляю его в таблицу, используя MySql Workbench, все работает нормально ... может быть, мне следует установить переменную для копирования информации?

EDIT2:

Это не сработало.Тем не менее говорит, что поле не может обрабатывать столько информации.Я начинаю думать, что дело в том, как access обрабатывает ситуации ... Может быть, есть способ добавить эту информацию в MySql?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Я не эксперт по MySQL , но вы не можете просто использовать функцию Left , чтобы ограничить длину символов, которые вы вводите в новый столбец. Очевидно, что используется число, которое является максимумом, который поместится в столбце.

Проблема в том, что если в столбце memo есть какие-либо записи с более длинным значением, они будут обрезаны, а данные будут потеряны.

Также вы можете создать более одного столбца и поместить первую половину в один столбец, а вторую - в другой.

Надеюсь, это поможет, спасибо Марк

0 голосов
/ 02 января 2012

попробуй!

Set cnn = New ADODB.Connection
With cnn
    .ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=<SeuServidor>;Database=<nomeDoBanco>;User=<usuario>;Password=<senha>;Option=3;"
    .CursorLocation = adUseClient
    .Open
End With

While Not qweCont.EOF
    ssql = vbNullString
    ssql = ssql & "Insert into AtualizarMensagens Values ([contrato_bb],[Mensagem],[Data],[Append],[qweContratos],[men_data_evento],[men_data_movimento]) Values("
    ssql = ssql & "'" & qweCont!Contrato & "','" & qweCont!Mensagem & "','" & data_padrao & "','" & qweCont!Append & "','" & qweCont!qweContratos & "',"
    ssql = ssql & "'" & qweCont!men_data_evento & "','" & qweCont!men_data_movimento & "'"
    ssql = ssql & " where AtualizarMensagens.contrato_bb = '" & contratoVar & "'"
    cnn.Execute ssql
    qweCont.MoveNext
Wend
...