Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-49841
Fishka
2002-04-18 12:44
2002.05.16
InterBase и Gbak


1-49976
aka Andre
2002-04-29 17:28
2002.05.16
генерация штрих-кода


3-49872
RedKat
2002-04-18 11:36
2002.05.16
Отбор по времени в Access таблице


3-49895
wer
2002-04-19 10:14
2002.05.16
Проблемы с запросом


14-50093
Nikolay
2002-04-05 15:58
2002.05.16
Ставим на ноги принтер...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский