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
  |