Exportsql via odbc : exemple d'utilisation

Description

Dans cet exemple, je montre comment :
- se connecter a une bdd de type acces, sqlserver .... via ODBC.
- Executer une requete
- recuperer les enregistrements.

Nota cet exemple est fait pour trois colonnes d'une table

Source / Exemple :


// Export SQL
//
// Description :
// Permet d'exporter Le contenu d'une table dans un fichier
//
// Utilisation :
// Lien Serveur Odbc, Login et Pwd 	
// 
// Créateur : Trinita
// Date de création : 28/07/2003
//
// Date de modification : 29/07/2003
// Version : 1.0.0
//
// Nota : Il faut un link vers la librairie ODBC du Compilateur        
//	  Attention l'exemple est pour trois colonnes

#include <windows.h>

#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Les defines
#define MAIN_LEN 80
#define EXPORT_FILE "./export.txt"

// Les types SQL
SQLHENV     henv;
SQLHDBC     hdbc;
SQLHSTMT    hstmt;

void main ( )
{

// Déclaration des variables SQL
SQLRETURN retcode;
SQLINTEGER cbville, cbnom, cbprenom;
SQLCHAR szville[MAIN_LEN+1],sznom[MAIN_LEN+1],szprenom[MAIN_LEN+1];
 	
// Déclaration des variables Standart
// Exemple de requete
char requete[1024+1]="select ville,nom, prenom  from t_client where nom='test'";

char Serveur[MAIN_LEN+1]=" Le lien ODBC ";
char Login[MAIN_LEN+1]=" LOGIN USER";
char Pwd[MAIN_LEN+1]=" PASSWORD USER ";	
FILE *fp;

printf("Début de l'exportation\n");
	
// Création du fichier vide 
if ( (fp = fopen( EXPORT_FILE, "w")) == NULL)
{
printf("Attention le fichier n'existe pas !\n");
}
else
{
// Ecriture de l'entete pour les colonnes
fprintf ( fp, "Ville\tNom\tPrenom\n");
}
				
// 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);
else
printf("Erreur sur l'instruction SQLAllocHandle !\n");
	
// Vérification du Lien ODBC, Login Et Pwd		
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLConnect(hdbc, (SQLCHAR*)Serveur, SQL_NTS, (SQLCHAR*)Login, SQL_NTS, (SQLCHAR*)Pwd, SQL_NTS);
else
printf("Erreur sur l'instruction SQLSetEnvAttr !\n");
					
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
else
printf("Erreur sur l'instruction SQLConnect !\n");
				
// Execution de la requete
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode=SQLExecDirect(hstmt, (SQLCHAR*)requete, SQL_NTS);
else
printf("Erreur sur l'instruction SQLAllocHandle !\n");

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// Récupération des informations contenu dans les champs des tables
SQLBindCol(hstmt, 1, SQL_C_CHAR, szville, MAIN_LEN, &cbville);
SQLBindCol(hstmt, 2, SQL_C_CHAR, sznom, MAIN_LEN, &cbnom);
SQLBindCol(hstmt, 3, SQL_C_CHAR, szprenom, MAIN_LEN, &cbprenom);
   
// boucle de parcours des enregistrements de la tables   
while (TRUE)
{
retcode = SQLFetch(hstmt);
      
// tant qu'il y a des données
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// ouverture du fichier en ajout
if ( (fp = fopen( EXPORT_FILE, "a+")) == NULL)
{
printf("Attention le fichier n'existe pas !\n");
}
else
{
// Ecriture dans le fichier des enregistrements
printf("Enregistrement de : %s\t%s\t%s\n", szville,sznom,szprenom);
fprintf(fp, "%s\t%s\t%s\n", szville,sznom,szprenom);
}
fclose ( fp );
}
else
break;  
}
}
else
printf("Erreur sur l'instruction SQLExecDirect !\n");
							
// Déconnexion 
SQLFreeStmt(hstmt, SQL_DROP);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);

printf("Fin de l'exportation\n");
// Pause
getchar ();
	
}

Conclusion :


Pour plus d'information je reste à votre dispo...

Codes Sources

A voir également

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.