Vs2005+Access,AddNew 出现记录集只读?VC6下正常使用解决办法
Vs2005+Access,AddNew 出现记录集只读??VC6下正常使用
我数据库类是VC6创建的,VC6下使用正常,将该类拷贝到我的VS2005的工程下,结果就出现记录是只读的警告,无法更新数据库。源代码如下:
CFTSODB::CFTSODB(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CFTSODB)
m_No = 0;
m_Lotnum = _T("");
m_Time = COleDateTime::GetCurrentTime();
m_FerruleType = _T("");
m_NumA = 0;
m_NumB = 0;
m_NumC = 0;
m_NumD = 0;
m_NumE = 0;
m_nFields = 9;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CFTSODB::GetDefaultConnect()
{
return _T("ODBC;DSN=FTSODB");
}
CString CFTSODB::GetDefaultSQL()
{
return _T("[FerruleNum]");
}
void CFTSODB::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CFTSODB)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, _T("[No]"), m_No);
RFX_Text(pFX, _T("[Lotnum]"), m_Lotnum);
RFX_Date(pFX, _T("[Time]"), m_Time);
RFX_Text(pFX, _T("[FerruleType]"), m_FerruleType);
RFX_Long(pFX, _T("[NumA]"), m_NumA);
RFX_Long(pFX, _T("[NumB]"), m_NumB);
RFX_Long(pFX, _T("[NumC]"), m_NumC);
RFX_Long(pFX, _T("[NumD]"), m_NumD);
RFX_Long(pFX, _T("[NumE]"), m_NumE);
//}}AFX_FIELD_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CFTSODB diagnostics
#ifdef _DEBUG
void CFTSODB::AssertValid() const
{
CRecordset::AssertValid();
}
void CFTSODB::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
BOOL CFTSODB::AddItem(const CString strLotnum, const COleDateTime tmTime, const CString strFerruleType, const long lNumA, const long lNumB, const long lNumC, const long lNumD, const long lNumE)
{
if(IsOpen())
{
if(CanRestart())
{
Requery();
}
else
{
try
{
Open();
}
catch(CDBException *e)
{
AfxMessageBox(_T("打开数据库失败"));
return FALSE;
}
}
}
else
{
try
{
Open();
}
catch(CDBException *e)
{
AfxMessageBox(_T("打开数据库失败"));
return FALSE;
}
}
if(!IsBOF())
{
MoveLast();
}
AddNew();
m_Lotnum = strLotnum;
m_Time = tmTime;
m_NumA = lNumA;
m_NumB = lNumB;
m_NumC = lNumC;
m_NumD = lNumD;
m_NumE = lNumE;
if(CanUpdate())
{
try
{
Update();
}
catch(CDBException *e)
{
AfxMessageBox(_T("数据库更新失败"));
Close();
return TRUE;
}
}
Close();
return TRUE;
}
------解决方案--------------------
帮楼主顶一下
------解决方案--------------------
看看数据库或数据库所在文件夹是不是设置只读属性。
我数据库类是VC6创建的,VC6下使用正常,将该类拷贝到我的VS2005的工程下,结果就出现记录是只读的警告,无法更新数据库。源代码如下:
CFTSODB::CFTSODB(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CFTSODB)
m_No = 0;
m_Lotnum = _T("");
m_Time = COleDateTime::GetCurrentTime();
m_FerruleType = _T("");
m_NumA = 0;
m_NumB = 0;
m_NumC = 0;
m_NumD = 0;
m_NumE = 0;
m_nFields = 9;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CFTSODB::GetDefaultConnect()
{
return _T("ODBC;DSN=FTSODB");
}
CString CFTSODB::GetDefaultSQL()
{
return _T("[FerruleNum]");
}
void CFTSODB::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CFTSODB)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, _T("[No]"), m_No);
RFX_Text(pFX, _T("[Lotnum]"), m_Lotnum);
RFX_Date(pFX, _T("[Time]"), m_Time);
RFX_Text(pFX, _T("[FerruleType]"), m_FerruleType);
RFX_Long(pFX, _T("[NumA]"), m_NumA);
RFX_Long(pFX, _T("[NumB]"), m_NumB);
RFX_Long(pFX, _T("[NumC]"), m_NumC);
RFX_Long(pFX, _T("[NumD]"), m_NumD);
RFX_Long(pFX, _T("[NumE]"), m_NumE);
//}}AFX_FIELD_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CFTSODB diagnostics
#ifdef _DEBUG
void CFTSODB::AssertValid() const
{
CRecordset::AssertValid();
}
void CFTSODB::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
BOOL CFTSODB::AddItem(const CString strLotnum, const COleDateTime tmTime, const CString strFerruleType, const long lNumA, const long lNumB, const long lNumC, const long lNumD, const long lNumE)
{
if(IsOpen())
{
if(CanRestart())
{
Requery();
}
else
{
try
{
Open();
}
catch(CDBException *e)
{
AfxMessageBox(_T("打开数据库失败"));
return FALSE;
}
}
}
else
{
try
{
Open();
}
catch(CDBException *e)
{
AfxMessageBox(_T("打开数据库失败"));
return FALSE;
}
}
if(!IsBOF())
{
MoveLast();
}
AddNew();
m_Lotnum = strLotnum;
m_Time = tmTime;
m_NumA = lNumA;
m_NumB = lNumB;
m_NumC = lNumC;
m_NumD = lNumD;
m_NumE = lNumE;
if(CanUpdate())
{
try
{
Update();
}
catch(CDBException *e)
{
AfxMessageBox(_T("数据库更新失败"));
Close();
return TRUE;
}
}
Close();
return TRUE;
}
------解决方案--------------------
帮楼主顶一下
------解决方案--------------------
看看数据库或数据库所在文件夹是不是设置只读属性。