我想用一个imag类型字段保存一串点坐标。
点坐标存在 Vector中。
请哪位大侠帮我写个例子 如何用AppendChunk()将一个Vecotr的数据存入imag类型字段中
,然后将imag类型字段中的数据用GetChunk()取到一个 Vector中。
感激不尽 高分敬上!
点坐标存在 Vector中。
请哪位大侠帮我写个例子 如何用AppendChunk()将一个Vecotr的数据存入imag类型字段中
,然后将imag类型字段中的数据用GetChunk()取到一个 Vector中。
感激不尽 高分敬上!
你如果只是存储容器中的元素,那么不用image字段更方便如果你要存储vector指向的数据缓存。似乎会把问题复杂了。
虽然vector元素是连续存储的,但要考虑从image字段读取这段二进制流,问题是你不能简单的直接转换为vector,因为这个流的元素个数,大小,类型信息都丢失了。
bool COracleConnectDlg::ExeSqlFuction(CString sSql)
{
char contents[300];
int iVal;
float fVal;
double dfVal;
CString sVal;
try
{
m_SqlRs = m_SqlConn->Execute((_bstr_t)sSql, &m_SqlVar, adCmdText);
if(!m_SqlRs->ADOEOF&&!m_SqlRs->BOF)
{
while(!m_SqlRs->ADOEOF&&!m_SqlRs->BOF)
{
/*
m_SqlVar = m_SqlRs->GetCollect(_variant_t("A"));
strcpy(contents,(char*)_bstr_t(m_SqlVar));
iVal = m_SqlVar.intVal;
m_SqlVar = m_SqlRs->GetCollect(_variant_t("B"));
iVal = m_SqlVar.intVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("C"));
iVal = m_SqlVar.intVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("D"));
iVal = m_SqlVar.intVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("E"));
sVal = m_SqlVar.bstrVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("F"));
sVal.Format("%s",m_SqlVar.bstrVal);
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("G"));
iVal = m_SqlVar.lVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("H"));
fVal =m_SqlVar.fltVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar));
m_SqlVar = m_SqlRs->GetCollect(_variant_t("K"));
dfVal = m_SqlVar.dblVal;
strcpy(contents,(char*)_bstr_t(m_SqlVar)); m_SqlVar = m_SqlRs->GetCollect(_variant_t("M"));
strcpy(contents,(char*)_bstr_t(m_SqlVar));
*/
/*二进制流形式*/
//m_SqlVar = m_SqlRs->GetCollect(_variant_t("N"));
//strcpy(contents,(char*)_bstr_t(m_SqlVar));
_variant_t var;
int iLen ;
iLen = m_SqlRs->GetFields()->GetItem("N")->ActualSize;
var = m_SqlRs->GetFields()->GetItem("N")->GetChunk(iLen);
if(var.vt==(VT_ARRAY|VT_UI1))
{
char *pBuf = NULL;
SafeArrayAccessData(var.parray,(void**)&pBuf);
SafeArrayUnaccessData(var.parray);
}
::VariantClear(&var);
m_SqlRs->MoveNext(); }
}
if(m_SqlRs->State)
m_SqlRs->Close();
return true; }
catch(...)
{
return false;
}
return false;
}void COracleConnectDlg::TestSql()
{
m_sSqlExe.Format("select * from AT");
ExeSqlFuction(m_sSqlExe);
Write_Blob();
}
bool COracleConnectDlg::Write_Blob()
{
COleVariant var ;
SAFEARRAY *pSfe ;
SAFEARRAYBOUND pRg;
char *pBuf = new char[10];
memset(&pBuf[0],0x00,10);
oraType pData;
memset(&pData,0x00,sizeof(oraType));
pData.a = 12345678901;
pData.b = true;
pData.c = 0xffff;
pData.d = 1234567890;
CString sData;
sData.Format("可变类型navarchar");
memcpy(&pData.e[0],sData,sData.GetLength());
sData.Format("可变类型varchar");
memcpy(&pData.f[0],sData,sData.GetLength());
pData.g = 1;
pData.h = 0.12345;
pData.k = 123456789.1234;
sData.Format("11-12月-09");
memcpy(&pData.M[0],sData,sData.GetLength()); pRg.lLbound = 0;
pRg.cElements =10;
pSfe=SafeArrayCreate(VT_UI1,1,&pRg);
var.vt = VT_ARRAY|VT_UI1;
var.parray = pSfe;
for(long i=0;i<10;i++)
{
pBuf[i] = i+0x30;
SafeArrayPutElement(pSfe,&i,&pBuf[i]);
}
try
{
CString sSql;
sSql.Format("select * from AT");
//m_SqlRs = m_SqlConn->Execute((_bstr_t)sSql, &m_SqlVar, adCmdText);
m_SqlRs->Open((_variant_t)sSql,_variant_t((IDispatch *)m_SqlConn),adOpenDynamic,adLockOptimistic,adCmdUnknown);
m_SqlConn->BeginTrans();
if(m_SqlRs->ADOEOF||m_SqlRs->BOF)
{
m_SqlRs->AddNew();
m_SqlRs->PutCollect("A",_variant_t(pData.a));
m_SqlRs->PutCollect("B",_variant_t(pData.b));
m_SqlRs->PutCollect("C",_variant_t((long)pData.c));
m_SqlRs->PutCollect("D",_variant_t((long)pData.d));
m_SqlRs->PutCollect("E",_bstr_t(pData.e));
m_SqlRs->PutCollect("F",_bstr_t(pData.f));
m_SqlRs->PutCollect("G",_variant_t(pData.g));
m_SqlRs->PutCollect("H",_variant_t(pData.h));
m_SqlRs->PutCollect("K",_variant_t(pData.k));
sData.Format("11-12月-09");
m_SqlRs->PutCollect("M",LPCTSTR(sData));
m_SqlRs->GetFields()->GetItem("N")->AppendChunk(var);
m_SqlRs->Update();
m_SqlRs->Close();
}
else
{
m_SqlRs->Delete(adAffectCurrent);
m_SqlRs->AddNew();
m_SqlRs->PutCollect("A",_variant_t(pData.a));
m_SqlRs->PutCollect("B",_variant_t(pData.b));
m_SqlRs->PutCollect("C",_variant_t((long)pData.c));
m_SqlRs->PutCollect("D",_variant_t((long)pData.d));
m_SqlRs->PutCollect("E",_bstr_t(pData.e));
m_SqlRs->PutCollect("F",_bstr_t(pData.f));
m_SqlRs->PutCollect("G",_variant_t(pData.g));
m_SqlRs->PutCollect("H",_variant_t(pData.h));
m_SqlRs->PutCollect("K",_variant_t(pData.k));
sData.Format("11-12月-09");
m_SqlRs->PutCollect("M",LPCTSTR(sData));
m_SqlRs->GetFields()->GetItem("N")->AppendChunk(var);
m_SqlRs->Update();
m_SqlRs->Close();
}
m_SqlConn->CommitTrans();
}
catch(...)
{
m_SqlConn->RollbackTrans();
return false;
}
return true;
}