Utilisation de CDatabase pour modifier une base de données O
J'utilise le code suivant pour essayer d'accèder à une base de donnèes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include "afxdb.h"
class CRec : public CRecordset
{
public :
CRec (CDatabase*);
CString m_prod;
virtual void DoFieldExchange (CFieldExchange *pFX);
};
void main ()
{
int rc;
CDatabase db;
rc=db.OpenEx ("DRIVER=SQL Server;SERVER=NOM_ORDINATEUR;UID=sa;PWD=interstiss",0);
printf ("OpenEx=%x\n",rc);
CRec rec (&db);
printf ("rec=%x\n",rec);
rc=rec.Open (CRecordset::dynaset,"select * from [T Assemlages]",CRecordset::none);
printf ("Open=%x\n",rc);
rec.MoveFirst ();
rc=rec.CanUpdate ();
printf ("prod=%s\n",rec.m_prod);
printf ("CanUpdate=%x\n",rc);
rec.Edit ();
rec.Close ();
db.Close ();
}
CRec::CRec (CDatabase *db)
:CRecordset (db)
{
}
void CRec::DoFieldExchange (CFieldExchange *pFX)
{
CRecordset::DoFieldExchange (pFX);
pFX->SetFieldType (CFieldExchange::outputColumn);
RFX_Text (pFX,"Num produit",m_prod);
} |
L'éxécution donne le résultat suivant
OpenEx=1
rec=5530d0
Open=1
prod=
CanUpdate=1
puis le programme se plante lors de l'execution de la méthode Edit
dans dbcore.cpp ligne 1622 sur une instruction ASSERT (m_nFields!=0)
en effet la valeur est n_mFields est 0.