Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMPORSQL -> IMPORTATION DE FICHIER AVEC UN LIEN ODBC


Information sur la source

Catégorie :Base de données Niveau : Débutant Date de création : 13/06/2003 Date de mise à jour : 15/04/2004 22:05:31 Vu / téléchargé: 5 602 / 623

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce programme permet d'importer un fichier dans une base de donnée de type SQL Server ou Acces avec les autres je n'ai pas testé. Pour ce faire il suffit de créer un lien ODBC.

Le format du fichier d'import est décrit dans l'aide ou plus bas  

Version 1.0.2 :
Porter sous le compilateur Dec C++
Controle de la bonne execution de la requete 'Insert' et retour du code erreur
 

Source

  • Extrait du code l'importation du fichier :
  • /* Lancement de l'importation */
  • void ImportFile ( HWND, char ServeurODBC[MAIN_LEN+1], char LoginAdmin[MAIN_LEN+1], char PwdAdmin[MAIN_LEN+1], char DirFile[MAIN_LEN+1], char NameTable[MAIN_LEN+1], char Colonne[LONG_LEN+1] )
  • {
  • // Déclaration des variables
  • SQLRETURN retcode;
  • char requete[1024+1]="";
  • char buffer[1024+1]="";
  • FILE *fp;
  • // Vérification de la présence du fichier
  • if ( (fp = fopen( DirFile, "rb")) == NULL)
  • {
  • /* Erreur impossible de creer le fichier de sortie */
  • MessageBox(hWndMain,"Attention le fichier n'existe pas !","Erreur",MB_OK|MB_ICONERROR);
  • }
  • else
  • {
  • // Vérification de la présence de colonnes
  • if ( strlen ( Colonne ) !=0 )
  • {
  • // Insertion des valeurs contenu dans le fichier
  • while ( fgets ( buffer, 1024, fp) != NULL )
  • {
  • // Contruction de la requete du type INSERT INTO MaTable (Monchamp1, MonChamp2 ....) VALUES ( MaValeur1, MaValeur2 ...)
  • strcpy ( requete, "INSERT INTO ");
  • strcat ( requete, NameTable);
  • strcat ( requete, " (");
  • strcat ( requete, Colonne);
  • strcat ( requete, ")");
  • strcat ( requete, " VALUES ");
  • strcat ( requete, "(");
  • strcat ( requete, buffer );
  • strcat ( requete, ")");
  • MessageBox(hWndMain,requete,"DEBUG",MB_OK|MB_ICONINFORMATION);
  • // Connexion à la base de données
  • retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
  • if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  • retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,0);
  • if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  • retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
  • if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  • retcode=SQLConnect(hdbc, (SQLCHAR*)ServeurODBC, SQL_NTS, (SQLCHAR*)LoginAdmin, SQL_NTS, (SQLCHAR*)PwdAdmin, SQL_NTS);
  • else
  • {
  • MessageBox(hWndMain,"Impossible de se connecter à la base de données","Erreur",MB_OK|MB_ICONERROR);
  • return;
  • }
  • if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  • retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  • if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
  • {
  • retcode=SQLExecDirect(hstmt, (SQLCHAR*)requete, SQL_NTS);
  • if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
  • {
  • // OK
  • }
  • else
  • {
  • sprintf( Erreur, "Impossible d'executer la requete ! code => %x", SQL_ERROR);
  • MessageBox(hWndMain,Erreur,"Erreur",MB_OK|MB_ICONERROR);
  • break;
  • }
  • }
  • else
  • {
  • MessageBox(hWndMain,"Impossible de se connecter à la base de données","Erreur",MB_OK|MB_ICONERROR);
  • }
  • /* Déconnexion */
  • SQLFreeStmt(hstmt, SQL_DROP);
  • SQLDisconnect(hdbc);
  • SQLFreeConnect(hdbc);
  • }
  • fclose(fp);
  • MessageBox(hWndMain,"Fin de la procédure d'importation","Information",MB_OK|MB_ICONINFORMATION);
  • }
  • }
  • }
Extrait du code l'importation du fichier :

/* Lancement de l'importation */
void ImportFile ( HWND, char ServeurODBC[MAIN_LEN+1], char LoginAdmin[MAIN_LEN+1], char PwdAdmin[MAIN_LEN+1], char DirFile[MAIN_LEN+1], char NameTable[MAIN_LEN+1], char Colonne[LONG_LEN+1] )
{
// Déclaration des variables
SQLRETURN retcode;
char requete[1024+1]="";
char buffer[1024+1]="";
FILE *fp;
	
// Vérification de la présence du fichier
if ( (fp = fopen( DirFile, "rb")) == NULL)
{
/* Erreur impossible de creer le fichier de sortie */
MessageBox(hWndMain,"Attention le fichier n'existe pas !","Erreur",MB_OK|MB_ICONERROR);
}
else
{
// Vérification de la présence de colonnes
if ( strlen ( Colonne ) !=0 )
{
// Insertion des valeurs contenu dans le fichier
while ( fgets ( buffer, 1024, fp) != NULL )
{
// Contruction de la requete du type INSERT INTO MaTable (Monchamp1, MonChamp2 ....) VALUES ( MaValeur1, MaValeur2 ...)
strcpy ( requete, "INSERT INTO ");
strcat ( requete, NameTable);
strcat ( requete, " (");
strcat ( requete, Colonne);
strcat ( requete, ")");
strcat ( requete, " VALUES ");
strcat ( requete, "(");		   		
strcat ( requete, buffer );
strcat ( requete, ")");

MessageBox(hWndMain,requete,"DEBUG",MB_OK|MB_ICONINFORMATION);

// Connexion à la base de données
retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
			
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,0);
				
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
				
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLConnect(hdbc, (SQLCHAR*)ServeurODBC, SQL_NTS, (SQLCHAR*)LoginAdmin, SQL_NTS, (SQLCHAR*)PwdAdmin, SQL_NTS);
else
{
MessageBox(hWndMain,"Impossible de se connecter à la base de données","Erreur",MB_OK|MB_ICONERROR);
return;
}
				
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
				
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLExecDirect(hstmt, (SQLCHAR*)requete, SQL_NTS);
				  				
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
  // OK
}
else
{
sprintf( Erreur, "Impossible d'executer la requete ! code => %x", SQL_ERROR);
                        
MessageBox(hWndMain,Erreur,"Erreur",MB_OK|MB_ICONERROR);
break;
}
}				    
else
{
MessageBox(hWndMain,"Impossible de se connecter à la base de données","Erreur",MB_OK|MB_ICONERROR);
}
							
/* Déconnexion */
SQLFreeStmt(hstmt, SQL_DROP);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
				
				
}
fclose(fp);
			
MessageBox(hWndMain,"Fin de la procédure d'importation","Information",MB_OK|MB_ICONINFORMATION);

}
}
} 

Conclusion

Voici l'aide pour comprendre le fonctionnement :

Contenu de l'aide :
Aide sur Import SQL by ODBC

Groupe "Connexion" :
- Serveur : Indique le nom du lien ODBC.
    Celui ci doit être configuré dans Source de données.
- Login : Indique le login de connexion à la base de donnée.
- Password : Indique le password de connexion à la base de donnée.

Groupe "Fichier à importer" :
Permet de saissir le chemin complet du fichier à importer. Ou bien
de sélectionner le fichier en cliquant sur le bouton "...". Le format
du fichier sera décrit après.

Groupe "Requete" :
- Table : Indique le nom de la table dans laquelle les enregistrements
  seront importés.
- Colonne : Indique le nom des différentes colonnes de la table séparées
    par une virgule.

Description du fichier à importer :
Le fichier à importer doit contenir le même nombre de champs que
de colonne saissi et les différentes valeurs doivent t'être séparées
par des virgules. Attention les champs spéciaux doivent avoir les cotes !

Trinita  
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de JCDjcd le 13/06/2003 23:37:57

Au lieu de faire :
-------------------------------------
strcpy ( requete, "INSERT INTO ");
strcat ( requete, NameTable);
strcat ( requete, " (");
strcat ( requete, Colonne);
strcat ( requete, ")");
strcat ( requete, " VALUES ");
strcat ( requete, "(");                
strcat ( requete, buffer );
strcat ( requete, ")");
-------------------------------------

tu pourrais faire :

-------------------------------------
sprintf("INSERT INTO %s (%s) ...",NameTable,Colonne);
-------------------------------------

C'est juste plus rapide.

signaler à un administrateur
Commentaire de Trinita16 le 13/06/2003 23:45:15

Peut être mais la c'est mieux détaillé je trouve !

signaler à un administrateur
Commentaire de JCDjcd le 14/06/2003 08:01:13

C'est vrai.
N.B. j'ai fais une erreur, c'est :
sprintf(requete,"INSERT INTO %s (%s) ...",NameTable,Colonne);

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.