CopyFromRecordset copies & colle première ligne, même si plusieurs enregistrements sont présents dans Excel
J'ai une feuille Excel contenant le tableau de données de type
strSQL = "SELECT S.FIELD_NAME1,S.FIELD_NAME2,S.FIELD_NAME3 from [SourceData$A1:IV6] S"
Dim cn as ADODB.Connection
Dim rs as ADODB.Recordset
cn.Open strCon
Set rs = CmdSqlData.Execute()
Worksheets("SourceData").Cells.ClearContent
Worksheets("AnswerData").Cells(2, 1).CopyFromRecordset rs
Résultats :
Seule la première ligne et les autres dossiers sont ignorés.
J'ai essayé ci-dessous requête .,
strSQL = "SELECT COUNT(*) from [SourceData$A1:IV6] S"
Qui donne 5
comme résultat.
S'il vous plaît laissez-moi savoir pourquoi les autres documents ne sont pas copiés dans le jeu d'enregistrements?
Que SQL ne retourne qu'un seul nombre. Vous signifiait probablement
SELECT * FROM
.OriginalL'auteur logan | 2012-07-11
Vous devez vous connecter pour publier un commentaire.
Voici une sous-routine avec succès pâtes à un jeu d'enregistrements.
Noter que la gamme de pâtes à l'est de la même taille que le jeu d'enregistrements via le intMaxRow et intMaxCol variables:
À l'aide de cet exemple comme un modèle, je voudrais essayer somehting de ce genre pour votre code:
rs.Recordcount renvoie le nombre exact de documents une fois que vous movelast et movefirst Cela est nécessaire pour cela d'analyser et de les compter. J'ai modifié le code pour mettre le rs.MoveLast rs.MoveFirst avant l'instruction si, parce que je ne me souviens pas du haut de ma tête si vous pouvez vous contenter de le mettre à l'intérieur de la SI ou pas (j'ai pensé que vous pourriez) )
Merci Logan - malheureusement, je n'ai pas lu les commentaires avant j'ai essayé de comprendre ce qui n'allait - il TOUJOURS saute au-dessus de l'instruction SI comme il retourne -1 - apparemment, cela signifie qu'il y a des enregistrements, alors peut-être que Si l'instruction doit être si rs.RecordCount = -1 (encore un problème dans le premier exemple). Merci pour le reste tho Gimp - sinon, très utile. 😉
OriginalL'auteur danielpiestrak
Cette réponse dépend de votre base de données ODBC driver disponible dans Excel.
À cause de mon corp env, je suis obligé d'utiliser un très ancien pilote ODBC pour Oracle. Dans mon cas,
Recordset.RecordCount
est toujours-1
. Par défaut,Recordset.MoveLast
etRecordset.MoveFirst
n'est pas pris en charge. Comme la question d'origine, les appels àExcel.Range.CopyFromRecordset(Recordset)
aussi seulement d'écrire une seule ligne.Vous devrez peut-être configurer votre
ADODB.Recordset
différemment. Essayez ce code:Pour mon pilote, cela résout le problème. Cependant, votre kilométrage peut varier.
Vous pouvez lire plus au sujet de l'agitation types de curseur ici.
OriginalL'auteur kevinarpe
Je rencontre le même problème.
Seulement De Remplacer
avec
Alors le problème est sovled
Mais, je ne sais pas pourquoi.
OriginalL'auteur Zhang Hansen