Imporsql -> importation de fichier avec un lien odbc

Soyez le premier à donner votre avis sur cette source.

Vue 8 349 fois - Téléchargée 983 fois

Description

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
C'est vrai.
N.B. j'ai fais une erreur, c'est :
sprintf(requete,"INSERT INTO %s (%s) ...",NameTable,Colonne);
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

Peut être mais la c'est mieux détaillé je trouve !
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.