Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2057 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel][VBA][ODBC] Connexion SQL Server

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel][VBA][ODBC] Connexion SQL Server

n°1305044
FreeCake
Posté le 14-02-2006 à 12:00:08  profilanswer
 

Bonjour,
 
On m'a donné la difficile tâche d'effectuer quelques fonctions en VBA afin de pouvoir exporter le contenu d'une Feuille Excel dans une table sur une base de donnée  :ouch:  (SQL Server 2000 en l'occurence).
 
Est-ce que quelqu'un saurait comment procéder avec Excel pour ouvrir une connexion sur un SGBD ? Par ODBC ou n'importe quel autre moyen ... ça fera l'affaire ?
 
Comme je n'ai jamais codé 1 ligne en VB% :( , je suis un peu perdu ... et la doc est pas façile à trouver .... pendant que j'y suis si vous pouvez mon recommander un bon livre ou un site internet intéressant, je suis preneur.
 
Merci d'avance

mood
Publicité
Posté le 14-02-2006 à 12:00:08  profilanswer
 

n°1305245
tegu
Posté le 14-02-2006 à 14:49:44  profilanswer
 

On peut pas dire qu'il soit idéal de commencer la prog VB% (comme tu écris) par de l'accès ODBC (ou natif) en écriture sur un SGBD.
Déjà familiarise toi avec la lecture d'infos via ODBC et les requetes de données externes Excel (menu Données) et la création d'une source ODBC.  
Pour SQL Server ça doit être assez simple. Un fil de discussion ouvert par watashi parle déjà d'un accès AS400 via ODBC un peu plus bas.
Après il faudra trouver les objets qui permettent une mise à jour, mais il est possible qu'il suffise de changer quelquepart une requete SELECT en UPDATE ou INSERT.

n°1305326
FreeCake
Posté le 14-02-2006 à 15:43:37  profilanswer
 

Hello tegu ! merci pour ta réponse !
 
Je précise que je suis pas totalement "noob" ... c'est que j'ai l'habitude de développer en java/J2EE ! Donc tu comprends ma "chute" en scriptant en VBA... en plus je n'ai jamais utilisé d'activX au autre technologies Microsoft, donc je n'ai pas les bons reflexes ...  
 
Par exemple je viens de passer 20 minutes à capter qu'il ne fallait pas mettre de parenthèses autour de mes appels de fonctions sinon ça fesait des erreurs de syntaxe  :ouch:  
 
C'est surtout que je n'ai pas le choix car je suis obligé de passer par un fichier excel pour obtenir des données (notre client utilise une api propriétaire dans une appli excel afin d'obtenir des données) et je dois ensuite réinjecter des données dans une base de données ...
 
Donc pour la connexion j'ai pu m'en sortir péniblement avec un objet ADODB.Connection (http://drq.developpez.com/vb/tutoriels/ADO/), mais pour le reste je nage toujours. Par exemple comment utiliser passer un Range à une fonction pour qu'elle boucle dessus chaque ligne afin de générer des inserts etc ...
 
Alors vlà, si quelqu'un connait des ressources, livres etc ... merci

n°1305416
tegu
Posté le 14-02-2006 à 16:38:15  profilanswer
 

Les tuto c'est pas ce qui manque, il y en a limite trop.
 
Pour travailler avec les Range il faut passer par les tableaux mémoire pour être efficace.
Voir une réponse que j'avais donnée.
http://forum.hardware.fr/hardwaref [...] 3767-1.htm


Message édité par tegu le 14-02-2006 à 16:38:41
n°1305788
FreeCake
Posté le 15-02-2006 à 09:42:20  profilanswer
 

Merci bcp ! Je vais essayer la méthode avec la mémoire voir si j'obtiens de meilleures performances ...
 
Pour l'instant c'est assez désastreux ... il me faut +/- 5 minutes pour insérer 50'000 lignes dans la base de données  :ouch:  
 
En gros j'ai un feuille avec environ 300 lignes et 300 colonnes. Pour chaque cellule je dois générer une instruction INSERT. Mais dans certains cas (si la cellule et incorrecte etc ...) je dois me balader dans d'autres feuilles du document afin de générer un message d'erreur.  
 
Donc pour les tuto je suis d'accord. Y'a de tout et n'import quoi :D suffisait de chercher. Mais je préfère toujours investir dans un "bon" livre et passer 1 jours dessus plutôt que d'y aller à tâtons jusqu'a ce que sa marche, sans comprendre pourquoi :jap:
 

n°1305801
tegu
Posté le 15-02-2006 à 09:50:13  profilanswer
 

D'ailleurs il existe une autre astuce pour améliorer les perfs des tableaux volumineux : toujours mettre en dimension 1 le moins d'indices possibles.
C'est à dire plutot Dim tab(12, 50000) que Dim tab(50000,12)
Evidemment quand tu as presque autant d'indices dans tes dimensions cela n'est pas possible.
Cette astuce ne fonctionne pas non plus quand tu gères un tableau pour une feuille Excel car tu es tributaire de l'arrangement Ligne, Colonne de Excel


Message édité par tegu le 15-02-2006 à 09:51:21
n°1314113
mymy83
Posté le 27-02-2006 à 10:49:17  profilanswer
 

Salut, je sais je suis un peu en retard, mais on sait jamais ca peut peut etre t'aider !!
Je te conseille l'utilisation de l'outils bcp offert avec sql server. ca te permet de copier en bloc depuis un fichier vers une base de donnée. Je m'en sers de temps en temps et c'est super rapide (environ 10 000 lignes en 5 sec)

n°1315700
FreeCake
Posté le 28-02-2006 à 22:15:54  profilanswer
 

mymy83 a écrit :

Salut, je sais je suis un peu en retard, mais on sait jamais ca peut peut etre t'aider !!
Je te conseille l'utilisation de l'outils bcp offert avec sql server. ca te permet de copier en bloc depuis un fichier vers une base de donnée. Je m'en sers de temps en temps et c'est super rapide (environ 10 000 lignes en 5 sec)


 
Merci, je connaissais pas ! Je vais essayer

n°1320141
FreeCake
Posté le 07-03-2006 à 13:37:57  profilanswer
 

Bon, finalement je peux pas utiliser bcp car le seul moyen que j'ai s'est d'appeler une macro du fichier via jacob.  
 
Par contre j'ai trouvé un moyen de transféréer les données de manière beaucoup plus rapide, en ouvrant une connexion sur le fichier Excel lui-même et en utiliser une syntaxe de type SELECT * INTO qui crée une nouvelle table avec le résultat du Select sur le SGBD  

Code :
  1. SELECT * INTO [ODBC;Driver={SQL Server};Server=AddIpServer;Database=MaDb;Uid=UserName;Pwd=Password].[MaNouvelleTable] FROM [MonFichierExel]


 
Ca marche nickel si le Run la macro à la main, par contre pour une raison inconnue, si c'est jacob qui effectue l'appel, l'instruction SQL échou avec un message à la con de type "Erreur inatendue", comme si ADODB n'était pas d'accord de partager l'accès au fichier Excel avec jacob....
 
Je suis pas encore sorti :(

n°1320336
tegu
Posté le 07-03-2006 à 17:02:39  profilanswer
 

Excel n'est PAS une base de données, donc n'accepte pas les accès concurrents


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel][VBA][ODBC] Connexion SQL Server

 

Sujets relatifs
connexion à la BD, pas besoin du nom user?exporter des tables Access en VBA
[SQL] Requête multi-tables + DISTINCT ...VBA : Fonction Dir et attributs.
Utiliser un autre compte mail que celui par défaut avec VBA sous ExcelProblème de connexion.
Apprendre VBA access sans JAMAIS avoir fait de prog?probleme connexion sqlserver 2000 ?
[VBA Access] mise a jour 
Plus de sujets relatifs à : [Excel][VBA][ODBC] Connexion SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR