Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Внизтип данных Blob Найти похожие ветки
← →
Вовка (2002-04-18 11:16) [0]В БД хранятся ссылки на массивы значений за определенное число,массив представляет из себя набор цифровых значений по двум параметрам снятым с датчика(ускорение и усилие).В табличке в поле ЗНАЧЕНИЕ записано только BLOB ,так вот подскажите программкой или примером как вытащить значения типа BLOB из БД в человеческом виде ,чобы можно было дальше с ними работать.
← →
Reindeer Moss Eater (2002-04-18 11:26) [1]Нужно знать каким образом это значение записвали в blob.
Есть пример кода ?
← →
Вовка (2002-04-18 11:32) [2]есть ,но на С
← →
Reindeer Moss Eater (2002-04-18 11:33) [3]Так давай
← →
Вовка (2002-04-19 13:28) [4]есть код пересчета массива в нормальный вид,массив пишется непосредственно с датчика (0-20)мА:
m_dAccPoints[i]=(double)m_nMinScaleAccValue+(m_nMaxScaleAccValue-m_nMinScaleAccValue)*((20.0/((1<<12)-1(wAcc[i]&0x0rfff)-4)/16);
wAcc -двух байтовый массив
12- разрядность АЦП
min
max-интервал датчика
← →
Reindeer Moss Eater (2002-04-19 13:30) [5]Неважно что и как считается.
Мне важно как массив записан в блоб.
← →
Вовка (2002-04-22 10:04) [6]держи код ,ели надо я подскажу чё и где (в делфи я пока еще плаваю)
часть1:
// Par.cpp: implementation of the CPar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <stdlib.h>
#include "Oracle.h"
#include "Par.h"
OCI_LDA* CPar::m_pLDA;
OCI_CURSOR CPar::m_cGetVal;
OCI_CURSOR CPar::m_cSetVal;
OCI_CURSOR CPar::m_cSetHis;
OCI_CURSOR CPar::m_cSetHisArray;
OCI_CURSOR CPar::m_cGetAtr;
OCI_CURSOR CPar::m_cSetStr;
OCI_CURSOR CPar::m_cSetNum;
OCI_CURSOR CPar::m_cSetSob;
OCI_CURSOR CPar::m_cGetDate;
OCI_CURSOR CPar::m_cGetType;
OCI_CURSOR CPar::m_cGetCtrlElmID;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPar::CPar()
{
}
CPar::~CPar()
{
}
void CPar::Cleanup()
{
m_cGetVal.close();
m_cSetVal.close();
m_cSetHis.close();
m_cSetHisArray.close();
m_cGetAtr.close();
m_cSetStr.close();
m_cSetNum.close();
m_cSetSob.close();
m_cGetDate.close();
m_cGetType.close();
m_cGetCtrlElmID.close();
}
void CPar::SetLDA(OCI_LDA *pLDA)
{
m_pLDA = pLDA;
}
int CPar::GetVal(int nID
,char* pszVal, int nValSize // возвращаемое значение параметра
,int* pElmID/* = NULL*/ // возвращаемый ид элемента
,double* pDblNum/* = NULL*/ // возвращаемое число
,char* pszStr/* = NULL*/, int nStrSize/* = 0*/ // возвращаемая строка
,int* pSobID/* = NULL*/) // возвращаемый ид события
{
static int nParID;
static int nElmID;
static char szVal[128];
static char szStr[128];
static double dblNum;
static int nSobID;
int rc;
if (pElmID)
*pElmID = 0;
if (pDblNum)
*pDblNum = 0.0;
if (pszStr)
*pszStr = "\0";
if (pSobID)
*pSobID = 0;
if (!pszVal || nValSize < 2)
return -1;
*pszVal = "\0";
if (nID < 1)
return -1;
nParID = nID;
for (int i = 0; i < 2; i++) {
if (!m_cGetVal.IsOpened()) {
m_cGetVal.open(m_pLDA);
m_cGetVal.parse(
"select distinct элм_элм_id, значение, число, строка, т_соб_т_соб_id"
" from параметры"
" where пар_id = :1");
m_cGetVal.defin(&nElmID,sizeof(nElmID), SQLT_INT);
m_cGetVal.defin(szVal, sizeof(szVal), SQLT_STR);
m_cGetVal.defin(&dblNum,sizeof(dblNum), SQLT_FLT);
m_cGetVal.defin(szStr, sizeof(szStr), SQLT_STR);
m_cGetVal.defin(&nSobID,sizeof(nSobID), SQLT_INT);
m_cGetVal.bndrn(1,&nParID,sizeof(nParID),SQLT_INT);
}
szVal[0] = szStr[0] = "\0";
nElmID = nSobID = 0;
dblNum = 0.0;
rc = m_cGetVal.exfet();
if (rc == 4 || rc < 0)
Sleep(100);
if (rc >= 0)
break;
else
m_cGetVal.close();
}
strncpy(pszVal, szVal, nValSize);
*(pszVal + nValSize - 1) = "\0";
// strcpy(pszVal, szVal);
if (pElmID)
*pElmID = nElmID;
if (pDblNum)
*pDblNum = dblNum;
if (pszStr) {
strncpy(pszStr, szStr, nStrSize);
*(pszStr + nStrSize - 1) = "\0";
// strcpy(pszStr, szStr);
}
if (pSobID)
*pSobID = nSobID;
return rc;
}
int CPar::GetAtr(int nID, int* pAtr)
{
static int nParID;
static int nAtr;
int rc;
if (!pAtr)
return -1;
*pAtr = 0;
if (nID < 1)
return -1;
nParID = nID;
for (int i = 0; i < 2; i++) {
if (!m_cGetAtr.IsOpened()) {
m_cGetAtr.open(m_pLDA);
m_cGetAtr.parse(
"select т_пар.атрибут"
" from типы_параметров т_пар, параметры пар"
" where пар.т_пар_т_пар_id = т_пар.т_пар_id"
" and пар.пар_id = :1");
m_cGetAtr.defin(&nAtr, sizeof(nAtr), SQLT_INT);
m_cGetAtr.bndrn(1, &nParID, sizeof(nParID), SQLT_INT);
}
nAtr = 0;
rc = m_cGetAtr.exfet();
if (rc >= 0)
break;
else
m_cGetAtr.close();
}
*pAtr = nAtr;
return rc;
}
>
← →
Вовка (2002-04-22 10:06) [7]часть2:
int CPar::SetVal(int nID, char* pszVal, char* pszDate)
{
static int nParID;
static char szVal[128];
static char szDate[20];
int rc;
if (nID < 1)
return -1;
nParID = nID;
strcpy(szVal, pszVal);
strcpy(szDate,pszDate);
for (int i = 0; i < 2; i++) {
if (!m_cSetVal.IsOpened()) {
m_cSetVal.open(m_pLDA);
m_cSetVal.parse(
"update параметры set"
" значение = :1"
" ,дата = to_date(:2, "dd.mm.yyyy hh24:mi:ss")"
" where пар_id = :3");
m_cSetVal.bndrn(1, szVal, sizeof(szVal), SQLT_STR);
m_cSetVal.bndrn(2, szDate, sizeof(szDate),SQLT_STR);
m_cSetVal.bndrn(3, &nParID,sizeof(nParID),SQLT_INT);
}
rc = m_cSetVal.exec();
if (rc >= 0)
break;
else
m_cSetVal.close();
}
return rc;
}
int CPar::SetStr(int nID, char* pszStr)
{
static int nParID;
static char szStr[128];
int rc;
if (nID < 1)
return -1;
nParID = nID;
strcpy(szStr, pszStr);
for (int i = 0; i < 2; i++) {
if (!m_cSetStr.IsOpened()) {
m_cSetStr.open(m_pLDA);
m_cSetStr.parse(
"update параметры set"
" строка = :1"
" where пар_id = :2");
m_cSetStr.bndrn(1, szStr, sizeof(szStr), SQLT_STR);
m_cSetStr.bndrn(2, &nParID,sizeof(nParID),SQLT_INT);
}
rc = m_cSetStr.exec();
if (rc >= 0)
break;
else
m_cSetStr.close();
}
return rc;
}
int CPar::SetNum(int nID, double dblValue)
{
static int nParID;
static double val;
int rc;
if (nID < 1)
return -1;
nParID = nID;
val = dblValue;
for (int i = 0; i < 2; i++) {
if (!m_cSetNum.IsOpened()) {
m_cSetNum.open(m_pLDA);
m_cSetNum.parse(
"update параметры set"
" число = :1"
" where пар_id = :2");
m_cSetNum.bndrn(1, &val, sizeof(val), SQLT_FLT);
m_cSetNum.bndrn(2, &nParID,sizeof(nParID),SQLT_INT);
}
rc = m_cSetNum.exec();
if (rc >= 0)
break;
else
m_cSetNum.close();
}
return rc;
}
int CPar::SetSob(int nID, int nSobID)
{
static int nParID;
static int nTypeSobID;
int rc;
if (nID < 1)
return -1;
nParID = nID;
nTypeSobID = nSobID;
for (int i = 0; i < 2; i++) {
if (!m_cSetSob.IsOpened()) {
m_cSetSob.open(m_pLDA);
m_cSetSob.parse(
"declare"
" тип_события number;"
" begin"
" тип_события := :1;"
" if тип_события = 0 then"
" тип_события := NULL;"
" end if;"
""
" update параметры set"
" т_соб_т_соб_id = тип_события"
" where пар_id = :2;"
" end;");
m_cSetSob.bndrn(1, &nTypeSobID,sizeof(nTypeSobID),SQLT_INT);
m_cSetSob.bndrn(2, &nParID, sizeof(nParID), SQLT_INT);
}
rc = m_cSetSob.exec();
if (rc >= 0)
break;
else
m_cSetSob.close();
}
return rc;
}
int CPar::GetDate(int nID, char* pszDate)
{
static int nParID;
static char szDate[20];
int rc;
if (!pszDate)
return -1;
*pszDate = "\0";
if (nID < 1)
return -1;
nParID = nID;
for (int i = 0; i < 2; i++) {
if (!m_cGetDate.IsOpened()) {
m_cGetDate.open(m_pLDA);
m_cGetDate.parse(
"select to_char(дата, "dd.mm.yyyy hh24:mi:ss")"
" from параметры"
" where пар_id = :1");
m_cGetDate.defin(szDate, sizeof(szDate), SQLT_STR);
m_cGetDate.bndrn(1, &nParID, sizeof(nParID), SQLT_INT);
}
szDate[0] = "\0";
rc = m_cGetDate.exfet();
if (rc >= 0)
break;
else
m_cGetDate.close();
}
strcpy(pszDate, szDate);
return rc;
}
← →
Вовка (2002-04-22 10:07) [8]часть3:
int CPar::GetType(int nID, char* pszType)
{
static int nParID;
static char szType[128];
int rc;
if (!pszType)
return -1;
*pszType = "\0";
if (nID < 1)
return -1;
nParID = nID;
for (int i = 0; i < 2; i++) {
if (!m_cGetType.IsOpened()) {
m_cGetType.open(m_pLDA);
m_cGetType.parse(
"select distinct т_пар.наименование"
" from параметры пар, типы_параметров т_пар"
" where пар.т_пар_т_пар_id = т_пар.т_пар_id"
" and пар_id = :1");
m_cGetType.defin(szType, sizeof(szType), SQLT_STR);
m_cGetType.bndrn(1, &nParID, sizeof(nParID), SQLT_INT);
}
szType[0] = "\0";
rc = m_cGetType.exfet();
if (rc >= 0)
break;
else
m_cGetType.close();
}
strcpy(pszType, szType);
return rc;
}
int CPar::SetHis(int nID)
{
static int nParID;
int rc;
if (nID < 1)
return -1;
nParID = nID;
for (int i = 0; i < 2; i++) {
if (!m_cSetHis.IsOpened()) {
m_cSetHis.open(m_pLDA);
m_cSetHis.parse(
"insert into история"
"(ист_id"
",пар_пар_id"
",т_соб_т_соб_id"
",значение"
",число"
",строка"
",дата) "
"select"
" ист_seq.nextval"
",пар_id"
",т_соб_т_соб_id"
",значение"
",число"
",строка"
",дата"
" from параметры"
" where пар_id = :1");
m_cSetHis.bndrn(1, &nParID, sizeof(nParID), SQLT_INT);
}
rc = m_cSetHis.exec();
if (rc >= 0)
break;
else
m_cSetHis.close();
}
return rc;
}
int CPar::SetHisArray(int nID, unsigned char* pArray, int len, char* pszDate)
{
static int nParID;
static char szDate[20];
static unsigned char* pBuf;
static int nBufLen;
int rc;
if (nID < 1 || !pArray)
return -1;
nParID = nID;
pBuf = pArray;
nBufLen = len;
strcpy(szDate,pszDate);
for (int i = 0; i < 2; i++) {
if (!m_cSetHisArray.IsOpened()) {
m_cSetHisArray.open(m_pLDA);
//*запись
m_cSetHisArray.parse(
"insert into массивы"
"(мас_id"
",пар_пар_id"
",значение"
",длина"
",дата) "
"values"
"(мас_seq.nextval"
",:1"
",:2"
",:3"
",to_date(:4, "dd.mm.yyyy hh24:mi:ss"))");
m_cSetHisArray.bndrn(1, &nParID, sizeof(nParID), SQLT_INT);
m_cSetHisArray.bndrn(3, &nBufLen,sizeof(nBufLen),SQLT_INT);
m_cSetHisArray.bndrn(4, szDate, sizeof(szDate), SQLT_STR);
}
// т.к. nBufLen может быть различным
m_cSetHisArray.bndrn(2, pBuf, nBufLen, SQLT_LBI);
rc = m_cSetHisArray.exec();
if (rc >= 0)
break;
else
m_cSetHisArray.close();
}
return rc;
}
int CPar::GetCtrlElmID(int nID, int* pElmID)
{
static char szElmID[64];
static int nCtrlElmID;
int rc;
if (!pElmID)
return -1;
*pElmID = 0;
if (nID < 1)
return -1;
itoa(nID, szElmID, 10);
for (int i = 0; i < 2; i++) {
if (!m_cGetCtrlElmID.IsOpened()) {
m_cGetCtrlElmID.open(m_pLDA);
m_cGetCtrlElmID.parse(
"select элм_элм_id"
" from параметры_вт"
" where тип = "Ид параметра контроля""
" and значение = :1");
m_cGetCtrlElmID.defin(&nCtrlElmID, sizeof(nCtrlElmID), SQLT_INT);
m_cGetCtrlElmID.bndrn(1, szElmID, sizeof(szElmID), SQLT_STR);
}
nCtrlElmID = 0;
rc = m_cGetCtrlElmID.exfet();
if (rc >= 0)
break;
else
m_cGetCtrlElmID.close();
}
*pElmID = nCtrlElmID;
return rc;
}
</CODE
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c