ODBC CONNEXION MDB ET CREATION TABLE (WIN32)

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 31 mars 2005 à 23:28
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 6 avril 2005 à 08:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27746-odbc-connexion-mdb-et-creation-table-win32

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
6 avril 2005 à 08:14
merci beaucoup !
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 avril 2005 à 23:19
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);
}
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
5 avril 2005 à 22:08
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 !
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
1 avril 2005 à 09:56
ok, je vais regarder cela !
merci a toi BruNews !
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 mars 2005 à 23:52
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);
}
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
31 mars 2005 à 23:28
salut, voila je viens de tomber sur ta source que je me suis empressé de tester... je le trouve nickel et m'a permit de bien comprendre comment se servir d'odbc, cependant j'ai une petite question:
-> Y a-t-il un moyenne de connaitre le nombre et le nom des tables ainsi que les nombres et le nom des attributs de chaque table?

Merci par avance pour ta réponse...
Rejoignez-nous