Odbc connexion mdb et creation table (win32)

Soyez le premier à donner votre avis sur cette source.

Vue 16 059 fois - Téléchargée 9 146 fois

Description

C'est juste une demo minimale faite pour question forum.
Fonctions:
OdbcConnEnvCreate()
OdbcMdbConnect(int bReadOnly, char* dbname, char* dbpwd)
OdbcExecAction(char *pszqry) // RETOURNE != 0 SI ERREUR

Une base vide Tmp.mdb fournie pour tests.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
merci beaucoup !
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
void OdbcEnumFields()
{ // return != 0 SI ERREUR
SQLHANDLE hstmt;
char *c;
lerror = 1;
retcd = SQLAllocHandle(SQL_HANDLE_STMT, hconn, &hstmt);
if(retcd & 0xFFFE) return;
retcd = SQLColumns(hstmt, 0, 0, 0, 0, szTableName, SQL_NTS, 0, 0);
if(retcd & 0xFFFE) goto fieldsFree;
SQLBindCol(hstmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);
SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);
SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);
SQLBindCol(hstmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);
SQLBindCol(hstmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength);
SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);
SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);
SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks);
SQLBindCol(hstmt, 13, SQL_C_CHAR, szColumnDefault, STR_LEN, &cbColumnDefault);
SQLBindCol(hstmt, 14, SQL_C_SSHORT, &SQLDataType, 0, &cbSQLDataType);
SQLBindCol(hstmt, 15, SQL_C_SSHORT, &DatetimeSubtypeCode, 0, &cbDatetimeSubtypeCode);
SQLBindCol(hstmt, 16, SQL_C_SLONG, &CharOctetLength, 0, &cbCharOctetLength);
SQLBindCol(hstmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);
SQLBindCol(hstmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable);
nextField:
c = szbuff;
retcd = SQLFetch(hstmt);
if(retcd & 0xFFFE) goto fieldEnd;
*c 32; *(c+1) 'F'; *(c+2) = 'l'; *(c+2) = 'd'; *(c+3) = '(';
c = bnultoa(OrdinalPosition, c+4);
*c ')'; *(c+1) 32;
c = bnstrcpy(c+2, (char*)szColumnName);
*c ','; *(c+1) 32;
c = bnstrcpy(c+2, (char*)szTypeName);
if(DataType == 12) {
*c 32; c bnultoa(ColumnSize, c+1);
}

MessageBox(0, szbuff, szappname, 0x40);
goto nextField;
fieldEnd: lerror = 0;
fieldsFree: SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
euh excuse moi... c'est juste a propos de la fonction que tu as poster, tu as oublier de mettre la fonction:
OdbcEnumFields();
si tu pouvais la rejouter ca serait super !
merci par avance et excuse pour le derangement !
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
ok, je vais regarder cela !
merci a toi BruNews !
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Voila un début, pas trop le temps d'aller plus loin en ce moment:
#define STR_LEN 132
long lerror = 0;
SQLINTEGER cbTableName, cbTypeName;
SQLCHAR szTableName[STR_LEN];
SQLCHAR szTypeName[STR_LEN];

void OdbcEnumTables()
{ // return != 0 SI ERREUR
SQLHANDLE hstmt;
lerror = 1; // presume erreur
retcd = SQLAllocHandle(SQL_HANDLE_STMT, hconn, &hstmt);
if(retcd & 0xFFFE) return;
retcd = SQLTables(hstmt, 0, 0, 0, 0, 0, SQL_NTS, 0, 0);
if(retcd & 0xFFFE) goto tablesFree;
SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);
SQLBindCol(hstmt, 4, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);
nextTable:
retcd = SQLFetch(hstmt);
if(retcd & 0xFFFE) goto tablesEnd;
if(szTypeName[0] != 'T') goto nextTable;
if(szTypeName[1] != 'A') goto nextTable;
if(szTypeName[5] != 0) goto nextTable;
MessageBox(0, (char*)szTableName, "TABLE", MB_ICONINFORMATION);
OdbcEnumFields();
goto nextTable;
tablesEnd: lerror = 0;
tablesFree: SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
Afficher les 6 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.