Exportsql via odbc : exemple d'utilisation

Soyez le premier à donner votre avis sur cette source.

Vue 12 845 fois - Téléchargée 1 113 fois

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

Ajouter un commentaire Commentaires
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

HOLOGRAM > c:\test.mdb c'est la base de données qui va être utilisé dans le programme.
*.mdb == base access

++
Messages postés
1
Date d'inscription
samedi 4 février 2006
Statut
Membre
Dernière intervention
6 février 2006

j'ai essayé de compiler ça avec dev-c++, mais il manque visiblement un header. Peux-tu m'aider ?
Quand tu parles du lien odbc, c'est quoi ? "c:\test.mdb" ?
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

Slt,

Tu pourrais être plus clair, j'ai pas bien compris ton problème ?
Messages postés
1
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
7 janvier 2006

bonjour,j'utilise la database et tsession et tquery dans mon programme mais j'ai un probléme de relier les trois bouton ,1ére fait la liaison avec les alias,le 2eme avec non de la base,3 éme avec les tables,aider moi,s'il te plait
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

tu trouves ça dans le panneau de configuration sous le nom de :

Sources de données (ODBC)

nota sous win2000 =>
Panneau de configuration, outils d'administration, Sources de données (ODBC)

Bon Courage @+
Afficher les 13 commentaires

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.