2010-03-30 10 views
2

J'ai une feuille de calcul Excel. Je me connecte à une base de données Access via ODBC. Quelque chose le long des lignes de:Comment utiliser Excel VBA pour extraire le champ Mémo de la base de données Access?

Set dbEng = CreateObject("DAO.DBEngine.40") 
Set oWspc = dbEng.CreateWorkspace("ODBCWspc", "", "", dbUseODBC) 
Set oConn = oWspc.OpenConnection("Connection", , True, "ODBC;DSN=CLIENTDB;") 

Puis j'utilise une requête et récupère un ensemble de résultats pour obtenir des données de table.

Set oQuery = oConn.CreateQueryDef("tmpQuery") 
oQuery.Sql = "SELECT idField, memoField FROM myTable" 
Set oRs = oQuery.OpenRecordset 

Le problème se pose maintenant. Mon champ est un dbMemo car la longueur maximale du contenu est de quelques centaines de caractères. Ce n'est pas si long, et en fait la valeur que je lis est seulement une douzaine de caractères. Mais Excel ne semble tout simplement pas capable de gérer le contenu du champ Mémo. Mon code ...

ActiveCell = oRs.Fields("memoField") 

... donne erreur Erreur d'exécution '3146': ODBC - appel a échoué.

Des suggestions? Excel VBA peut-il réellement accéder aux données de champ de mémo? Ou est-ce juste complètement impossible. Je reçois exactement la même erreur de GetChunk. ... donne également une erreur Erreur d'exécution '3146': ODBC - l'appel a échoué.

La conversion à un champ de texte rend tout fonctionne bien. Cependant, certaines données sont tronquées à 255 caractères, ce qui signifie que cette solution n'est pas réalisable.

Répondre

0
  • Essayez Range.CopyFromRecordset pour voir si cela fonctionne.
  • Essayez d'utiliser CStr(oRs.Fields("memoField")) et affectez à Value2 du Range/ActiveCell.
  • Essayez de définir le champ Mémo comme la dernière colonne physique du tableau. Un champ Mémo est lu uniquement lorsqu'il est récupéré. Il y avait/peut-être encore un problème avec les champs Mémo qui ne sont pas physiquement à la fin d'une table.

Tout ce à quoi je peux penser maintenant.

+0

J'ai essayé CStr dès le début, pensant que c'était un problème avec la conversion, mais cela soulevait exactement la même erreur. Je vais essayer les deux autres options, merci. –

Questions connexes