ADO et transformation de code VB en C++

___Jp___ Messages postés 7 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 juin 2005 - 28 juin 2005 à 16:10
___Jp___ Messages postés 7 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 juin 2005 - 29 juin 2005 à 16:07
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

1 réponse

___Jp___ Messages postés 7 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 juin 2005
29 juin 2005 à 16:07
Re bonjour,



bon, je n'ai pas de réponse mais ce n'est pas grave.



Cette solution ne fonctionne qu'avec le pilote OLEDB Jet. Hors j'utilise le pilote SQLOLEDB pour SQL Server.



Cette solution ne fonctionne donc pas dans mon cas.

Je vous laisse la transformer en C++, cela peut être bien utile je pense, la plupart des sources relatives à ADO sont en VB :(



Voila, sinon pour ce qui sont intéressé par une autre solution, je
conseille de regarder du coté des tables systèmes de leur base de
données.

Ceux qui sont intéressés peuvent continuer la discussion ici, je les aiderais au besoin et selon mes compétences



voila



@ ++



Jp
0
Rejoignez-nous