这里有人了解EDB数据库吗?会的进来帮下我

kaiyi1986 2008-05-29 07:56:44
我刚弄这EDB数据库不久,一些好的方法什么的都不会,希望有人帮我一下,或交流下想法.
第一个问题,EDB里,有些特殊的数据类型,如CEVT_BLOB,像这样的类型应该怎么读写?

第二个问题,我看了一本书<EVC环境编程>书名有点长没特意去记,就是那本绿色封面的.那里面有介绍CEDB,里面说CeSeekDatabaseEx时,好象有说按条件查询.介绍的时候其中一个是这么说的:
CEDB_SEEK_VALUEGREATER
Seek until finding a value greater than or equal to the given value. If all records are smaller, the seek pointer is left at the end of the database and the function returns zero. The dwValue parameter is a pointer to a CEPROPVAL structure. 但照着他例子这样做的时候总过不了,我想确认一下,真的能这样做吗?

第三个问题,这个问题是由上面那个演变而来的.由于不能像上面那样找一个匹配的记录,那么在比对两条记录的时候就要每个字段每个字段的比,这样的话记录多了那计算量也太大了.感觉可能是我操作方法有问题,因为听别人说操作EDB数据库都是用标识(CEOID)去做的,能说一下应该怎么样操作吗?记录的那个CEOID标识是不是固定值啊?还是我下次打开后又会变成另外一个,是固定值的话,那用复制的方式出来的数据库,同一条记录的这个标识会是一样吗?那这样的话区分的话又是问题.


谢谢!
...全文
2232 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdsafdsafsdfa 2010-01-22
  • 打赏
  • 举报
回复
示例都有了 你还问什么 自己看看就懂了
landerson 2009-03-17
  • 打赏
  • 举报
回复
那些示例都是一大抄,唉.
studio_guan 2009-03-04
  • 打赏
  • 举报
回复
那位大虾给各示例程序,能够提取PDA上的联系人,短信等等具体内容的,俺的邮箱:jin_wandu@qq.com

谢谢谢谢,!!!!
candyrong 2009-01-08
  • 打赏
  • 举报
回复
第一个问题,EDB里,有些特殊的数据类型,如CEVT_BLOB,像这样的类型应该怎么读写?
A:

WORD wNumRecProps = 0;
LPBYTE lpRecProps = NULL;
PCEPROPVAL pCePropVal = NULL;

IImagingFactory *pImageFactory=NULL;//他的初始化就不写了,
IImage *pImage=NULL;//存在图片的,这里举例取BLOB字段存的是图片
CeReadRecordPropsEx(h, CEDB_ALLOWREALLOC, &wNumRecProps , NULL, &lpRecProps, &dwSizeOfBuffer, NULL);
pCePropVal = (PCEPROPVAL)lpRecProps;
for(int i=0;i<wNumRecProps ;i++)
{
if(LOWORD(pCePropVal[i].propid) == CEVT_BLOB)
{
//pCePropVal.val.blob.pBlobData;//其实他就是一Buffer
pImageFactory->CreateImageFromBuff (pCePropVal.val.blob.pBlobData,pCePropVal.val.blob.cbSize,BufferDisposalFlagGlobalFree,&pImage);
//之后你就可以直接用pImage画图了,
}
}
  • 打赏
  • 举报
回复
不知道来得有没晚了点,或许你自己早就已经解决了,先贴个示例再,如果你已经解决了,就当是我帮你顶下,如果没有希望对你有点提示作用:
以下是EDB代码示例
CEOID oid = NULL;
CEGUID guidVol = {0,};
BOOL fOK = true;
HANDLE h = INVALID_HANDLE_VALUE;
LPWSTR lpwszDBVol = L"volume.db";

SORTORDERSPECEX s =
{
2, // wVersion should be 2 for EDB
1, // wNumProps
0, // wKeyFlags
0, // wReserved
0, //rgPropID,
{ 0 } //rgdwFlags
};

CEDBASEINFOEX info =
{
2, // wVersion must be 2 for EDB
0, // wNumSortOrder
(CEDB_VALIDNAME | CEDB_VALIDTYPE | CEDB_VALIDSORTSPEC), // dwFlags
L"Table1", // szDbaseName
0x777, // dwDbaseType
4,/*NULL, // dwNumRecords*/
NULL, // dwSize (Not used by EDB)
{0,}, //ftLastModified (Not used by EDB)
};

CEPROPVAL val =
{
0, // propid
NULL, // wLenData - can be garbage on entry
NULL, // wFlags
0
};

s.rgPropID[0] = CEVT_LPWSTR;
val.propid = CEVT_LPWSTR;


CEPROPSPEC CEPropSpec[4];
CEPropSpec[0].wVersion = 1;
CEPropSpec[0].propid = CEVT_LPWSTR;
CEPropSpec[0].dwFlags = 0;
CEPropSpec[0].pwszPropName = TEXT("Name");
CEPropSpec[0].cchPropName = CEDB_MAXDBASENAMELEN;


// The Following .
CEPropSpec[1].wVersion = 1;
CEPropSpec[1].propid = CEVT_LPWSTR;
CEPropSpec[1].dwFlags = 0;
CEPropSpec[1].pwszPropName = TEXT("Phone");
CEPropSpec[1].cchPropName = CEDB_MAXDBASENAMELEN;

// The Following .
CEPropSpec[2].wVersion = 1;
CEPropSpec[2].propid = CEVT_LPWSTR;
CEPropSpec[2].dwFlags = 0;//0;
CEPropSpec[2].pwszPropName = TEXT("Content");
CEPropSpec[2].cchPropName = CEDB_MAXDBASENAMELEN;

// The Following .
CEPropSpec[3].wVersion = 1;
CEPropSpec[3].propid = CEVT_LPWSTR;
CEPropSpec[3].dwFlags = 0;//0;
CEPropSpec[3].pwszPropName = TEXT("Isread");
CEPropSpec[3].cchPropName = CEDB_MAXDBASENAMELEN;

if (!CeMountDBVolEx(&guidVol, lpwszDBVol, NULL, CREATE_ALWAYS))
{
fOK = false;
goto exit;
}

if ((oid = CeCreateDatabaseWithProps(&guidVol, &info, 0, CEPropSpec)) == NULL)
{
fOK = false;
goto exit;
}


if ((h = CeOpenDatabaseInSession(NULL, &guidVol, &oid, NULL, NULL,
0, NULL)) == INVALID_HANDLE_VALUE)
{
fOK = false;
goto exit;
}

CEPROPVAL pProp[4];
pProp[0].propid = PID_NAME;
pProp[0].wFlags = 0;
pProp[0].wLenData = 0;
pProp[0].val.lpwstr = L"777rewr";

pProp[1].propid = PID_PHONE;
pProp[1].wFlags = 0;
pProp[1].wLenData = 0;
pProp[1].val.lpwstr = L"888rer";

pProp[2].propid = PID_CONTENT;
pProp[2].wFlags = 0;
pProp[2].wLenData = 0;
pProp[2].val.lpwstr = L"123rewr";

pProp[3].propid = PID_ISREADED;
pProp[3].wFlags = 0;
pProp[3].wLenData = 0;
pProp[3].val.lpwstr = L"234rewr";

//Write records.
for(int i = 0; i < 100; ++i)
oid = CeWriteRecordProps(h, 0, 4, pProp);

//Add records.
CeWriteRecordProps(h, 0, 4, pProp);



CeFlushDBVol(&guidVol); // Just being paranoid!
CloseHandle(h);


exit:

CeUnmountDBVol(&guidVol);

查找及删除操作示例:
bool fOK = true;
CEOID oid = NULL;
CEOID oidRow = NULL;
CEGUID guidVol;
HANDLE h = INVALID_HANDLE_VALUE;
HANDLE hDBOpened = NULL;

CREATE_INVALIDGUID(&guidVol);

if (!CeMountDBVolEx(&guidVol, L"volume.db", NULL, OPEN_EXISTING))
{
fOK = false;
MessageBox(L"Err!!!");
}


// Open Database by Name to get its oid.
if ((h = CeOpenDatabaseInSession(NULL, &guidVol, &oid, L"Table1", NULL,
CEDB_AUTOINCREMENT, NULL)) == INVALID_HANDLE_VALUE)
{
fOK = false;
MessageBox(L"Err!!!");
}

CEOIDINFOEX ceoidInfoEx;
memset(&ceoidInfoEx,0,sizeof(CEOIDINFOEX));
ceoidInfoEx.wVersion = 2;

// if (!CeOidGetInfoEx2(&guidVol, oid, &ceoidInfoEx))
// {
// DWORD err = GetLastError();
// MessageBox(_T("CeOidGetInfoEx2 error!!!"));
// }
//
// int Leng = ceoidInfoEx.infDatabase.dwNumRecords;
// CString cs;
// cs.Format(L"%d",Leng);
// MessageBox(cs);

CeSeekDatabaseEx(h, CEDB_SEEK_BEGINNING, 0, 0, NULL);

WORD dwPropId = 0;
DWORD dwSizeOfBuffer = 0;
CEOID ceoidFindRecord = 0;
WORD wNumRecProps = 0;
LPBYTE lpRecProps = NULL;
PCEPROPVAL pCePropVal = NULL;
DWORD dwBufLen = 256;
BOOL m_bFlag = FALSE;

int m_iCount = 0;
while(ceoidFindRecord = CeReadRecordPropsEx(h, CEDB_ALLOWREALLOC, &dwPropId, NULL, &lpRecProps, &dwSizeOfBuffer, NULL))
{
if(GetLastError() != ERROR_NO_MORE_ITEMS)
{
pCePropVal = (PCEPROPVAL)lpRecProps;
LPWSTR lpnum;
if (m_iCount%2)
lpnum = pCePropVal[3].val.lpwstr;
else
lpnum = pCePropVal[1].val.lpwstr;


TRACE(L"%d=%s\n",m_iCount,lpnum);

++m_iCount;
if(!lpnum )
{
CeDeleteRecord(h, ceoidFindRecord);
m_bFlag = FALSE;
}
else
m_bFlag = TRUE;
}
}
CString str;
str.Format(L"%d",m_iCount);
MessageBox(str);

if (h)
CloseHandle(h);

if(&guidVol)
{
CeFlushDBVol(&guidVol);
CeUnmountDBVol(&guidVol);
}

头文件:extern "C"
{
#include <windbase_edb.h>
}

#define EDB
kaiyi1986 2008-06-02
  • 打赏
  • 举报
回复
晕倒,这是什么啊!
现在我比对一条记录是这样比对的。
用CeReadRecordPropsEx读出来后不是直接写在lpBuffer参数里吗?
然后我就不进行转换了,直接拿这个PBYTE型的两个变量进行比较。
看起来是可以,但比较出来的还是都不相等。

记得以前有人和我说过用ceoid来操作EDB数据库,但是看了一下还是不知道怎么使用,有知道用的吗?
legend_0110 2008-05-30
  • 打赏
  • 举报
回复
微软体系BI产品选型
现在市面上的BI产品很多。各种各样的产品让人看得眼花缭乱。如何选择自己适合的产品对公司的IT的负责人是个挑战。
我所说的BI是指包含多维分析OLAP功能的产品,不包括国内比较常见的做静态报表的报表工具类产品。
前一段时间在网上看到先特计郑总说:以后的BI就只有微软阵营和非微软阵营。对此我深以为然。微软的价格和易用性会在广大的中小企业通吃。

微软平台产品,主要是以微软的AS为后台OLAP引擎。这里面又可以分两类基于owc和不基于owc。owc的一大优势是它是Excel的一个组成部分,用户普及度无人能及。但也正因为它内置在Excel,限制了其发展空间,由于只读,不支持二次计算,选择成员采用打勾的方式等不足之处,owc在多维数据展现、易用性及功能上还有提升空间。这里我主要讨论非owc模式的产品,owc模式的产品以后再慢慢写。

1.ProClarity号称微软在商业智能领域的首席搭档,后来被微软收购。Proclarity从微软的SQL Server 6.5开始,伴随着微软的多维数据库部分一起成长,到目前已过10年,其产品无论在易用性,使用习惯,功能及性能上在微软平台的前端工具展现上都是数一数二的,对微软SQL Server 2005的多维数据库提供的新功能目前也是支持的最透彻的厂家。国外用户数巨大,国内用户一般。产品在中国由北京迈思奇科技有限公司(http://www.minesage.com)代理,价格比较高,基本包就要20万,国内一般中小企业很难承担。而国内的大企业一般会选择BO,COGNOS等非微软阵营,独立的BI供应商。

2.panorama(http://www.panorama.com/)微软的OLAP产品就从这家公司买的,他的前端产品支持微软OLAP可想而知是不错的。国内的润百就是代理他的产品,打电话过去要个试用版,半天也没消息了,感觉在国内推的力度不大。国内用户不多。价格也是偏高。

3.先特计(http://www.strategycompanion.com.cn/),台湾公司,产品不错,展现手段比较丰富。产品价格也是每套20万左右,做直销,直接给客户做项目,项目总价在50万-100万左右。

4.数恒软件BizVision(http://www.dpsoft.com.cn/),网站有试用版直接下载, 下了一个装上,试用了一番,第一感觉产品和ProClarity很相似(是不是ProClarity里面人出来做的,猜测),功能比较全,一般前端产品该有的功能都有了。一般企业用足够了。价格比较便宜,3万块钱一套。感觉不好的是,展现的美观不够,我可能是看多了国外的展现产品,对美观方面比较挑剔。

5.博科,2004号称要做中国BI第一名,现在市场上声音已经不大,沈国康已经放弃BI?价格在10万以内。因为他在中国BI市场曾有的名声所以还提他一下。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧