0

getfieldvalueによってアクセスデータベースから取得したデータを保存するために、次の構造を宣言しました。エラーはSpds_old-> Time_old.push_back(OldTime);にありました。DBでは、値は午後3時00分00秒です。エラーを教えてください。ありがとうございました。さらに情報が必要な場合はお知らせください。ありがとう-キラン

typedef struct {
        std::vector<CString> pname_old;
        std::vector<CDBVariant> Date_old;
        std::vector<CDBVariant> Time_old;

    } Spd_old;

Spd_old * Spds_old;

次に、cppファイルでこれはコードです

                CRecordset rset(&pdatabase);
                CString pName;
                CDBVariant OldDate;
                CDBVariant  OldTime;



CString selectionStr = "SELECT I.PType,I.Date,I.Time FROM CCYX I,(select PType, MAX(Date) AS Date1";
                selectionStr += " FROM CCYX GROUP BY PType) T WHERE I.PType = T.PType AND I.Date =T.Date1"; 




                try
                {
                if(rset.Open(CRecordset::forwardOnly, selectionStr))
                {

                    try
                    {
                        while(!(rset.IsBOF()&&rset.IsEOF()))
                        {
                            m_Log->Log("Copying Previous spd Values from Access DB");
                            rset.GetFieldValue((short)0 ,pName );
                            rset.GetFieldValue((short)1 ,OldDate );
                            rset.GetFieldValue((short)2 ,OldTime);

                            Spds_old->pname_old.push_back(pName);
                            Spds_old->Date_old.push_back(OldDate);
                            Spds_old->Time_old.push_back(OldTime);
4

1 に答える 1

3

問題はCDBVariantコピーできないため、std::vector. 1 つの回避策は、代わりにポインターを格納することです。

std::vector<std::unique_ptr<CDBVariant>> Date_old;
std::vector<std::unique_ptr<CDBVariant>> Time_old;
...
std::unique_ptr<CDBVariant> OldDate(new CDBVariant);
...
rset.GetFieldValue((short)1 , *OldDate);
...
Spds_old->Date_old.push_back(std::move(OldDate));

上記の例で使用std::unique_ptrしましたが、他のオプションも使用できます。

于 2012-12-26T23:08:29.717 に答える