TheFox37 pourtant chez moi, ça marche | Salut à tous!
J'ai un pb avec des Ctime, un CRecordset et le Update() du CRecordset! Voila le truc.
J'ai une classe CPlanningrecordset dérivée de CRecordset. Elle a deux champs en CTime.
Code :
- class CPlanningRecordset : public CRecordset
- {
- public:
- CPlanningRecordset(CDatabase* pDatabase = NULL);
- DECLARE_DYNAMIC(CPlanningRecordset)
- // Field/Param Data
- //{{AFX_FIELD(CPlanningRecordset, CRecordset)
- long m_ID_Planning;
- BYTE m_NumPlanning;
- CTime m_DateDebut;
- CTime m_DateFin;
- //}}AFX_FIELD
- ... plus la suite, pas important je pense
- }
|
Quand je veux faire un ajout dans ma table Planning via mon CPlanningRecordset, ça plante au niveau du Update() :
Code :
- int CPlanningDatabaseManagement::AddPlanning(int NumPlanning)
- {
- CDBVariant varValue ;
- if(!OpenDB())
- {
- AfxMessageBox("Erreur à l'ouverture de la base de données!" ) ;
- return -2 ;
- }
- CPlanningRecordset Planning(&NewDB) ;
- try
- {
- Planning.Open(CRecordset::dynaset,NULL, CRecordset::appendOnly) ;
- Planning.AddNew() ;
- Planning.m_DateDebut = CTime(2003, 11, 1,0,0,0) ;
- Planning.m_DateFin = CTime(2003, 11, 28,0,0,0) ;
- Planning.m_NumPlanning = NumPlanning ;
- Planning.Update() ; <-- crash
- Planning.Close() ;
- CloseDB() ;
- }
- catch(CDBException e)
- {
- e.ReportError() ;
- e.Delete() ;
- CloseDB() ;
- return -2 ;
- }
- return Planning_ID ;
- }
|
Je ne pige pas pourquoi ça plante! en fait, le pb vient d'un fichier visual : dbrfx.cpp
Code :
- // If not NULL, restore the value, length and proxy
- if (!pFX->m_prs->IsFieldStatusNull(nField - 1))
- {
- AfxCopyValueByRef(pInfo->m_pvDataCache, &value,
- plLength, pInfo->m_nDataType);
- Cette fonction change la valeur 'value' passée en paramètres et lui fout une valeur négative, alors qu'elle était égale à un ctime valide avant (Planning.m_dateDebut)
- // Restore proxy for correct WHERE CURRENT OF operations
- TIMESTAMP_STRUCT* pts =
- (TIMESTAMP_STRUCT*)pFX->m_prs->m_pvFieldProxy[nField-1];
|
pts->year = (SWORD)value.GetYear(); ça plante ici, puisque 'value' est négatif, donc le GetYear plante!
QQ1 a une idée, parce que là je suis séché!
TheFox
PS : le pire, c'est que si on regarde dans la base, le planning a bien été ajouté, ça plante dans le update mais apres avoir enregistré les champs! Message édité par TheFox37 le 04-11-2003 à 07:40:31
|