Bonjour à tous,
je bosse sur une petit programme de bases de données via ADO en c++.
Pour cela, je dois détecter si certains colonnes d'une table sont auto-incrementielles.
J'ai bien trouvé une source en VB mais, ne matrisant pas bien ce langage, j'ai du mal à la convertir en C++
Voici cette source :
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim colFields As ADODB.Fields
Set rs = New ADODB.Recordset
With rs
.Open "SELECT TOP 1 * FROM " & strTableName, cnx
Set colFields = .Fields
For Each fld In colFields
Set oField = New clField
IsAutoIncrement = fld.Properties("ISAUTOINCREMENT").Value
IsAutoIncrement contient vrai/faux selon que le champ est autonumber ou pas. Et ca fonctionne aussi bien pour une table en Ms-Access que pour une table en Sql-Server
source :
http://vbfrance.com/forum.v2.aspx?id=61543 Merci Phil

au passage.
J'ai donc commencé comme cela

:
g un objet que l'on va appelé CRst qui encapsule le RecordSetPtr de ADO mais ce dernier reste accessible à coup de ->
il reprend la méthode Open, et est inialisé avec un Connection de ADO.
voici le code :
CRst tmpRst (conn);
ADODB::Field15Ptr tmpFieldAutoInc;
tmpFieldAutoInc.CreateInstance(__uuidof(ADODBField15));
ADODB::FieldsPtr tmpFieldsAutoInc;
tmpFieldsAutoInc.CreateInstance(__uuidof(ADODBFields));
bool isautoinc = false;
tmpRst .Open("SELECT TOP 1 * FROM " + tmpDBTable.m_strName);
tmpFieldsAutoInc = tmpRcdS.m_pRecordset->Fields;
for (int i=0; i <= tmpFieldsAutoInc->GetCount(); i++)
{
tmpFieldAutoInc = tmpFieldsAutoInc->GetItem(i);
isautoinc = tmpFieldAutoInc->Properties("ISAUTOINCREMENT")->Value;
}
mais ça ne marche pas
tout fonctionne jusqu'à l'affectation de "isautoinc" : la propriété "ISAUTOINCREMENT" semble manquée ou avoir changer de forme. Dans la documentation que j'ai, je n'ai aucune information au sujet d'un changement.
Merci de votre aide et de tous vos conseils potentiels
Jp