• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            posts - 54, comments - 32, trackbacks - 0, articles - 0

            //SP-A1.創(chuàng)建或打開數(shù)據(jù)庫卷
            ?CEGUID m_ceguid;?//4個DWORD的數(shù)據(jù)組成的結構體,用來標識數(shù)據(jù)庫文件位置
            //?PCEGUID pguid;
            ?if(!CeMountDBVol(&m_ceguid,??//數(shù)據(jù)庫文件位置
            ?????L"DB",???//數(shù)據(jù)卷的名稱
            ?????OPEN_ALWAYS))?//操作標志
            ?{
            ??MessageBox(_T("Open Or Create DBVol Fail!"));
            ?}
            ?else
            ?{
            ??MessageBox(_T("Open Or Create DBVol Success!"));
            ?}

            /*
            ?//SP-A2.枚舉已裝在的數(shù)據(jù)庫卷
            ?CEGUID guid;
            ?TCHAR szVolume[10];
            ?TCHAR szVolumef[10];
            ?int nCnt = 0;

            ?CREATE_INVALIDGUID(&guid);
            ?while(CeEnumDBVolumes(&guid,szVolume,sizeof(szVolume)))
            ?{
            ??nCnt++;
            ??wsprintf(szVolumef,TEXT("Mounted Vol is %s"),szVolume);?//格式化輸出
            ??MessageBox(szVolumef);?//彈出所有已裝載數(shù)據(jù)庫的名字
            ?}
            ?
            ??//2.彈出已裝載數(shù)據(jù)庫的數(shù)量nCnt
            ?TCHAR temp[20];
            ?TCHAR tempf[20];
            ?
            ?_itow(nCnt,temp,10);?//將i轉換為字符串放入temp中,最后一個數(shù)字表示十進制
            ?wsprintf(tempf,TEXT("The Number of Mounted Vol is %s"),temp);
            ?MessageBox(tempf);


            ?//SP-A3.卸載數(shù)據(jù)庫卷,并重新彈出所有已裝載數(shù)據(jù)庫的名字及數(shù)量
            ?CEGUID guid1;
            ?TCHAR szVolume1[10];
            ?int nCnt1 = 0;

            ?CREATE_INVALIDGUID(&guid1);
            ?CeUnmountDBVol(&m_ceguid);
            ?while(CeEnumDBVolumes(&guid1,szVolume1,sizeof(szVolume1)))
            ?{
            ??nCnt1++;
            ??MessageBox(szVolume1);?//彈出所有已裝載數(shù)據(jù)庫的名字
            ?}
            ?TCHAR temp1[10];
            ?_itow(nCnt1,temp1,10);?//將i轉換為字符串放入temp中,最后一個數(shù)字表示十進制
            ?MessageBox(temp1);
            */


            /**/
            ?//SP-A4.創(chuàng)建數(shù)據(jù)庫

            //?#define PID_PASSWORD?????? MAKELONG (CEVT_LPWSTR, 1)
            ?HANDLE m_hdb=0;????????//返回的已打開數(shù)據(jù)庫的句柄
            ?CEOID m_ceoid=0;???????//typedef DWORD CEOID;

            ?TCHAR DBTABLENAME[20] = _T("myDB");

            ?//1.打開數(shù)據(jù)庫,并檢查返回值
            ?m_hdb = CeOpenDatabaseEx(&m_ceguid,???//數(shù)據(jù)庫卷的位置
            ???????&m_ceoid,???//通過名稱引用數(shù)據(jù)庫,所以將CEOID值設為0
            ???????DBTABLENAME,??//數(shù)據(jù)庫名稱
            ???????NULL,????//
            ???????CEDB_AUTOINCREMENT,?//讀取一個記錄后,數(shù)據(jù)庫指針自增
            ???????NULL);????//控制發(fā)送數(shù)據(jù)庫變化消息的方式

            ??? if (m_hdb == INVALID_HANDLE_VALUE)
            ?{
            ??int rc;
            ??????? rc = GetLastError();

            ??TCHAR temp1[10];
            ??_itow(rc,temp1,10);?
            ??MessageBox(temp1);

            ??//2.如果沒有該數(shù)據(jù)庫,則創(chuàng)建個新的
            ??????? if (rc == ERROR_FILE_NOT_FOUND)??
            ??{
            ???//2.1填寫數(shù)據(jù)庫信息
            ???CEDBASEINFO cedbaseinfo;???//數(shù)據(jù)庫信息的結構體
            ???cedbaseinfo.dwFlags = CEDB_VALIDNAME
            ????????| CEDB_VALIDTYPE
            ????????| CEDB_VALIDSORTSPEC; //修建數(shù)據(jù)庫中要用到的類型
            ???wcscpy(cedbaseinfo.szDbaseName,DBTABLENAME);
            ???cedbaseinfo.dwDbaseType = 0;
            ???cedbaseinfo.wNumSortOrder = 1 ;
            ???cedbaseinfo.rgSortSpecs[0].propid = PID_PASSWORD;
            ???cedbaseinfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE;
            ???//2.2創(chuàng)建數(shù)據(jù)庫
            ???m_ceoid = CeCreateDatabaseEx(&m_ceguid,&cedbaseinfo);
            ???if(m_ceoid==0)
            ???{
            ????MessageBox(TEXT("fail"));
            ???}
            ???else
            ???{
            ????//3創(chuàng)建后打開數(shù)據(jù)庫
            ????m_hdb = CeOpenDatabaseEx(&m_ceguid,
            ??????????&m_ceoid,
            ??????????DBTABLENAME,
            ??????????NULL,
            ??????????CEDB_AUTOINCREMENT,
            ??????????NULL);
            ????MessageBox(TEXT("build Database success"));

            ????//3.1.打開數(shù)據(jù)庫錯誤判斷
            ????if(INVALID_HANDLE_VALUE == m_hdb)
            ????{
            ?????rc = GetLastError();
            ?????switch(rc)
            ?????{
            ??????case ERROR_INVALID_PARAMETER:
            ??????MessageBox(L"ERROR_INVALID_PARAMETER");
            ??????break;

            ??????case ERROR_FILE_NOT_FOUND:
            ??????MessageBox(L"ERROR_FILE_NOT_FOUND");
            ??????break;

            ??????case ERROR_NOT_ENOUGH_MEMORY:
            ??????MessageBox(L"ERROR_NOT_ENOUGH_MEMORY");
            ??????break;

            ??????default :
            ??????MessageBox(L"Database Opened");
            ??????break;
            ?????}
            ????}
            ???}
            ??}
            ??else?//1.1打開數(shù)據(jù)庫錯誤判斷
            ??{
            ???switch(rc)
            ???{
            ????case ERROR_INVALID_PARAMETER:
            ????MessageBox(L"ERROR_INVALID_PARAMETER");
            ????break;

            ????case ERROR_FILE_NOT_FOUND:
            ????MessageBox(L"ERROR_FILE_NOT_FOUND");
            ????break;

            ????case ERROR_NOT_ENOUGH_MEMORY:
            ????MessageBox(L"ERROR_NOT_ENOUGH_MEMORY");
            ????break;

            ????default :
            ????MessageBox(L"Database Opened");
            ????break;
            ???}
            ??}
            ?}

            ?//SP-A5.查找(搜索)記錄
            ?DWORD dwIndex;????????//索引
            ?CEOID oid;?????????//CEOID是DWORD
            ???/*
            ????@type CEOID | Unique identifier for all WINCE objects
            ????@comm Every WINCE object can be efficiently referred to by its OID. OID's are unique
            ???? in the system and are not reused
            ???*/

            ?oid = CeSeekDatabase(m_hdb,?????//已打開數(shù)據(jù)庫的句柄
            ??????CEDB_SEEK_BEGINNING,?//查找數(shù)據(jù)庫的第n個記錄
            ??????0,??????//n值
            ??????&dwIndex);????// receives the index from the start of the database to the beginning of the record that was found. This parameter can be NULL.

            ?if(0 == oid)
            ?{
            ??MessageBox(L"there is no first item in the database!");
            ??///insert record

            ??CEPROPVAL * pRorps;
            ??pRorps = new CEPROPVAL;

            ??//
            ??memset(pRorps,0,LocalSize(pRorps));
            ??pRorps->propid = PID_PASSWORD;
            ??pRorps->val.lpwstr = TEXT("SONGPENG");

            ??oid =0;
            ??oid = CeWriteRecordProps(m_hdb,???//已打開數(shù)據(jù)庫句柄
            ????????0,????//為0,則創(chuàng)建新記錄
            ????????1,????//屬性ID結構數(shù)組中項目的數(shù)量
            ????????pRorps);??//要記錄的東東

            ??if (oid == 0)
            ??{
            ???MessageBox(TEXT("insert failues"));
            ??}
            ??else
            ??{
            ???MessageBox(TEXT("insert success"));
            ???oid = CeSeekDatabase(m_hdb,?????//已打開數(shù)據(jù)庫的句柄
            ??????CEDB_SEEK_BEGINNING,?//查找數(shù)據(jù)庫的第n個記錄
            ??????0,??????//n值
            ??????&dwIndex);?
            ???if(0 != oid)
            ???{
            ????MessageBox(L"first item found!");
            ???}
            ??}
            ?}
            ?else
            ?{
            ??MessageBox(L"first item found!");
            ?}

            ?//SP-A6.讀取記錄
            ?WORD wProps;?????//屬性個數(shù)
            ?PBYTE pBuff;?????//緩沖區(qū)
            ?pBuff=0;
            ?DWORD dwRecSize;????//緩沖區(qū)大小

            ?oid=CeReadRecordProps(m_hdb,?//已打開數(shù)據(jù)庫的句柄
            ?CEDB_ALLOWREALLOC,????//函數(shù)可以擴大緩沖區(qū),以便容納返回數(shù)據(jù)
            ?&wProps,??????//包含了rProgID指向的CEPROPID結構的 數(shù)量
            ?NULL,???????//一次讀取記錄所有必須屬性
            ?&(LPBYTE)pBuff,????//指向緩沖區(qū)指針的指針
            ?&dwRecSize);

            ?if (oid == 0)
            ?{
            ??????? TCHAR szTxt[64];
            ??????? INT rc = GetLastError();
            ??????? wsprintf (szTxt, TEXT ("Db item not read. rc = %d (%x)"),
            ????????????????? rc, rc);
            ??????? MessageBox (szTxt);
            ?}
            ?else
            ?{
            ??PCEPROPVAL pRecord;
            ??pRecord = (PCEPROPVAL)pBuff;?//指向CEPROVAL數(shù)組
            ??TCHAR tmp[20];
            ??for(int i=0;i<wProps;i++)
            ??{
            ???switch(pRecord->propid)
            ???{
            ???case PID_PASSWORD:
            ????lstrcpy(tmp,pRecord->val.lpwstr);
            ????break;
            ???default:
            ????break;
            ???}
            ???pRecord++;
            ??}
            ??MessageBox(tmp);
            ??LocalFree(pBuff);
            ?}

            ?//SP-A7.刪除記錄
            ?oid = CeSeekDatabase(m_hdb,CEDB_SEEK_BEGINNING,0,NULL);
            ?if( CeDeleteRecord(m_hdb,oid))
            ?MessageBox(_T("DELE success"));

            ?if(CloseHandle(m_hdb))
            ?MessageBox(_T("close success"));

            ?if(CeUnmountDBVol(&m_ceguid))
            ?MessageBox(_T("unmount success"));

            }

            /*
            //用到的結構體和聯(lián)合體
            typedef struct _CEPROPVAL {
            CEPROPID propid;?//屬性ID
            WORD wLenData;??//不用
            WORD wFlags;??//標識
            CEVALUNION val;??//屬性值(聯(lián)合體)
            } CEPROPVAL;
            typedef CEPROPVAL *PCEPROPVAL;

            typedef union _CEVALUNION {
            short iVal;
            USHORT uiVal;
            long lVal;
            ULONG ulVal;
            FILETIME filetime;
            LPWSTR lpwstr;??//字符串形式
            CEBLOB blob;
            BOOL boolVal
            double dblVal
            } CEVALUNION;


            typedef struct _CEDBASEINFO {
            ??? DWORD??? dwFlags;?????????? //@field Indicates which fields are valid. Possible values are:
            ??????????????????????????????? //? @flag CEDB_VALIDNAME | The name field is valid and should be used
            ??????????????????????????????? //? @flag CEDB_VALIDTYPE | The type field is valid and should be used
            ??????????????????????????????? //? @flag CEDB_VALIDSORTSPEC | The sortspecs are valid and should be used
            ??? WCHAR??? szDbaseName[CEDB_MAXDBASENAMELEN]; //@field Name of Database. Max CEDB_MAXDBASENAMELEN characters.
            ??? DWORD??? dwDbaseType;?????? //@field A type ID for this database
            ??? WORD???? wNumRecords;?????? //@field Number of records in the database
            ??? WORD???? wNumSortOrder;???? //@field Number of sort orders active in the database
            ??????????????????????????????? // Maximum is CEDB_MAXSORTORDER.
            ??? DWORD??? dwSize;??????????? //@field Size in bytes that this database is using
            ??? FILETIME ftLastModified;??? //@field Last time this database was modified
            ??? SORTORDERSPEC rgSortSpecs[CEDB_MAXSORTORDER];? //@field Actual sort order descriptions.
            ??????????????????????????????? // Only first wNumSortOrder of this array are valid.
            } CEDBASEINFO, *PCEDBASEINFO;
            */

            Feedback

            # re: 7數(shù)據(jù)庫(在EVC 的EMULATOR上調試通過)Version2  回復  更多評論   

            2007-04-13 18:12 by 周健
            這個是POCKET平臺下的吧

            # re: 7數(shù)據(jù)庫(在EVC 的EMULATOR上調試通過)Version2  回復  更多評論   

            2007-04-14 21:22 by 宋鵬
            是的,由于編譯器是EVC,所以編的都是Wince的程序

            # re: 7數(shù)據(jù)庫(在EVC 的EMULATOR上調試通過)Version2  回復  更多評論   

            2007-12-05 15:57 by wince學習
            你好,我用如下代碼創(chuàng)建一個數(shù)據(jù)庫,可是總是不成功,用GetLastError得到的信息是〖87〗-參數(shù)錯誤。能幫我看看是怎么回事嗎?
            是在vs200+wm5.0下編譯的。
            void CreateDatabase(void)
            {
            int ret;
            CEDBASEINFOEX dbinfo;
            CEOID CeOid;
            CEGUID m_ceguidDB;

            CREATE_INVALIDGUID(&m_ceguidDB);

            if (!CeMountDBVolEx(&m_ceguidDB, L"\\Documents and settings\\MyDBVol.Vol",0, OPEN_EXISTING ))
            {
            DWORD dwErr = GetLastError();
            CeUnmountDBVol(&m_ceguidDB);
            }
            else
            {
            ZeroMemory(&dbinfo, sizeof(CEDBASEINFOEX));

            dbinfo.wVersion = 1;
            wcscpy(dbinfo.szDbaseName, L"MyDB");
            dbinfo.dwFlags = CEDB_VALIDCREATE;
            dbinfo.wNumSortOrder = 1;
            dbinfo.rgSortSpecs[0].wVersion = 1;
            dbinfo.rgSortSpecs[0].wNumProps = 1;
            dbinfo.rgSortSpecs[0].wKeyFlags = 0;
            dbinfo.rgSortSpecs[0].rgPropID[0] = MAKELONG(CEVT_I4, 1);
            dbinfo.rgSortSpecs[0].rgdwFlags[0] = CEDB_SORT_NONNULL;
            CeOid=CeCreateDatabaseWithProps(&m_ceguidDB, &dbinfo,0,NULL);
            ret = GetLastError();
            }
            }
            99久久久精品免费观看国产| 婷婷综合久久中文字幕| 亚洲午夜精品久久久久久浪潮 | 免费精品国产日韩热久久| 一本色道久久88综合日韩精品| 久久久久亚洲AV无码专区首JN| 亚洲精品tv久久久久久久久| 久久香蕉国产线看观看乱码| 伊人 久久 精品| 99re这里只有精品热久久| 伊人久久五月天| 久久久久免费精品国产| 97香蕉久久夜色精品国产| 婷婷综合久久中文字幕| 久久久久久人妻无码| 伊人伊成久久人综合网777| 久久综合久久久| 亚洲国产精品无码久久SM| 久久午夜无码鲁丝片午夜精品| 久久久久亚洲av无码专区导航| 无码人妻久久一区二区三区蜜桃| 国产精品99久久久久久人| 综合久久国产九一剧情麻豆| 日日狠狠久久偷偷色综合免费| 国产精品一久久香蕉国产线看| 97久久婷婷五月综合色d啪蜜芽| 久久久久亚洲AV成人网| 国产精品永久久久久久久久久| 日韩av无码久久精品免费| 国内精品久久久久久久久电影网| 亚洲а∨天堂久久精品| 久久人妻少妇嫩草AV无码蜜桃| 久久久久久免费一区二区三区| 精品久久777| 欧美一区二区精品久久| 色综合久久久久| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 青青草原综合久久大伊人| 亚洲午夜无码AV毛片久久| 日韩精品久久久久久久电影| 久久久SS麻豆欧美国产日韩|