⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbbaseclass.cpp

📁 ADO写的数据库接口,CB 6 编译通过
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
//TMemoryStream *MS = new(TMemoryStream);

/*try
{
  Memo1->Lines->SaveToStream(MS);
  MS->Seek(0, soFromBeginning);
  ADOQuery1->Parameters[4]->LoadFromStream(MS);
}
__finally
{
  delete MS;

}*/
   try{
//        if(type == AS_INT)
//            m_adQuery->Parameters->ParamByName(parm)->AsInteger=(int)value;
//        else if(type == AS_STRING)
//            m_adQuery->Parameters->ParamByName(parm)->AsString=value;
//        else
        {
            TMemoryStream *srm=new TMemoryStream;
            srm->SetSize(size);
            srm->Write(value,size);
            m_adQuery->Parameters->ParamByName(parm)->LoadFromStream(srm,ftBlob);
            delete srm;
        }
    }
        catch (Exception &exception)
        {
            strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
            return false;
        }
    return true;
}

bool   CDBFaceBase::RunSql()
{
try
{
    m_adQuery->ExecSQL();
}
        catch (Exception &exception)
{
    strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
    return false;
}
    return true;
}

bool   CDBFaceBase::Query(char * szSQL)
{
    bool iRet = true;
//    try
//    {
        try
        {
            m_adQuery->Close();
            m_adQuery->SQL->Clear();
//            m_adQuery->SQL->Text = szSQL;
            m_adQuery->SQL->Add(szSQL);
            m_adQuery->Open();

//            iRecordCount = m_adQuery->RecordCount;
    iRecordCount = 0;
    m_adQuery->First();
    while(!m_adQuery->Eof)
    {
        iRecordCount++;
        m_adQuery->Next();
    }
    m_adQuery->First();
        }
        catch (Exception &exception)
        {
            strcpy(m_Err,exception.Message.c_str());
            //ShowError(NULL, exception.HelpContext, "数据库操作出错",
            //    "执行SQL语句异常", exception.Message, false);
            iRet = false;
        }
//    }
    /*__finally
    {
        //m_adQuery->Leave();
    }*/
    return iRet;
}

int   CDBFaceBase::RecordCount()
{
    return iRecordCount;
}

bool  CDBFaceBase::First()
{
    m_adQuery->First();
    return false;
}

bool  CDBFaceBase::Next()
{
    m_adQuery->Next();
    return false;
}

char *CDBFaceBase::GetDataValue(char *szFieldName,int *length)
{
    int len;
    if(length==NULL)
        length=&len;
    TField *field=m_adQuery->FindField(szFieldName);
    *length=0;
    if(!field||field->IsNull)
        return NULL;
    if(m_Data)
        delete m_Data;
    m_Data=NULL;
    if(field->DataType==ftBlob)
    {
        TStream *Stream = NULL;
        try
        {
            *length = ((TBlobField *)field)->BlobSize;
            Stream = m_adQuery->CreateBlobStream(field, bmRead);
            Stream->Seek(0,soFromBeginning);
            *length=Stream->Size;
            m_Data=new char [Stream->Size+1];
            Stream->ReadBuffer(m_Data,*length);
            m_Data[(int)(Stream->Size)] = 0;
        }
        catch(Exception &exception)
        {
            strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
        }
        if(Stream)
            delete Stream;
    }
    else
    {
        *length=field->AsString.Length();
        m_Data=new char [field->AsString.Length()+1];
        strcpy(m_Data,field->AsString.c_str());
    }
    return m_Data;
}

int   CDBFaceBase::GetIntValue(char *szFieldName)
{
    return atoi(m_adQuery->FieldByName(szFieldName)->AsString.c_str());
}

char *CDBFaceBase::GetValueByIdx(int fid,char *szFieldName,int *length)
{
    int len;
    if(length==NULL)
        length=&len;
    if(!(fid>=0 && fid<m_adQuery->FieldList->Count))
    {
        strcpy(m_Err,"超出字段范围!");
        return NULL;
    }
    TField *field=m_adQuery->FieldList->Fields[fid];
    *length=0;
    if(!field||field->IsNull)
    {
        strcpy(m_Err,"空字段!");
        return NULL;
    }
    if(m_Data)
        delete m_Data;
    m_Data=NULL;
    if(field->DataType==ftBlob)
    {
        TStream *Stream = NULL;
        try
        {
            *length = ((TBlobField *)field)->BlobSize;
            Stream = m_adQuery->CreateBlobStream(field, bmRead);
            Stream->Seek(0,soFromBeginning);
            *length=Stream->Size;
            m_Data=new char [Stream->Size+1];
            Stream->ReadBuffer(m_Data,*length);
            m_Data[(int)(Stream->Size)] = 0;
        }
        catch(Exception &exception)
        {
            strncpy(m_Err,exception.Message.c_str(),sizeof(m_Err)-1);
        }
        if(Stream)
            delete Stream;
    }
    else
    {
        *length=field->AsString.Length();
        m_Data=new char [field->AsString.Length()+1];
        strcpy(m_Data,field->AsString.c_str());
    }
    if(szFieldName)
        strcpy(szFieldName,field->FieldName.c_str());
    return m_Data;
}

int   CDBFaceBase::GetIntByIdx(int fid,char *szFieldName)
{
    char *pData = GetValueByIdx(fid,szFieldName,NULL);
    if(pData)
        return atoi(pData);
    return 0;
}

bool  CDBFaceBase::BeginTrans(int *outLevel)
{
    if(*outLevel)
        *outLevel = m_adMain->BeginTrans();
    else
        m_adMain->BeginTrans();
    return m_adMain->InTransaction;
}

bool  CDBFaceBase::Commit()
{
    m_adMain->CommitTrans();
    return !(m_adMain->InTransaction);
}

bool  CDBFaceBase::Rollback()
{
    m_adMain->RollbackTrans();
    return !(m_adMain->InTransaction);
}

bool  CDBFaceBase::LockTables(char *tables)
{
    return false;
}

bool  CDBFaceBase::UnlockTables(char *tables)
{
    return false;
}

bool   CDBFaceBase::Backup(char *db,char *username,char *password,char *pathname,void *callback)
{
    return false;
}

bool   CDBFaceBase::Restore(char *db,char *username,char *password,char *pathname,void *callback)
{
    return false;
}

bool  CDBFaceBase::GetFields(char *Fields,int *memsize,int *count)
{
    int fieldtype;
    char *pos = Fields;
    *count = m_adQuery->FieldList->Count;
    *memsize = 0;
    for(int id =0;id<*count;id++)
    {
        *memsize += m_adQuery->FieldList->Strings[id].Length()+2;
        if(pos)
        {
            fieldtype = m_adQuery->FieldList->Fields[id]->DataType;
            if(fieldtype==ftBlob)
                *pos=1;
            else if(fieldtype==ftInteger)
                *pos=2;
            else
                *pos=0;
            pos++;
            strcpy(pos,m_adQuery->FieldList->Strings[id].c_str());
            pos=Fields+*memsize;
        }
    }
    (*memsize)++;
    return true;
    //    return false;
}


char    *CDBFaceBase::GetField(int idx)
{
    if(!(idx>=0 && idx<m_adQuery->FieldList->Count))
    {
        strcpy(m_Err,"超出字段范围!");
        return NULL;
    }
    TField *field=m_adQuery->FieldList->Fields[idx];
    if(!field||field->IsNull)
    {
        strcpy(m_Err,"空字段!");
        return NULL;
    }
    return m_adQuery->FieldList->Strings[idx].c_str();
}

int     CDBFaceBase::FieldCount()
{
    return m_adQuery->FieldList->Count;
}


/*bool CDBFaceBase::GetDSN(char *pDSN,char *pHost)
{
HKEY hKey;
int re;
//char str[120]={0};
char key[1024];
DWORD type,lpcbData=50 ;
    sprintf(key,"Software\\ODBC\\ODBC.ini\\%s",pDSN);
    re=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            key,0,KEY_ALL_ACCESS,
            &hKey);
    if(re==ERROR_SUCCESS)
    {
        re = RegQueryValueEx(hKey,
                    "Server",
                    NULL,
                    &type,
                    pHost,
                    &lpcbData);
        if(re==ERROR_SUCCESS)
        {
            RegCloseKey(hKey);
            return true;
        }
    }
    RegCloseKey(hKey);
//  return 0;
    //if(str[0]=='1')
    //    return 1;
    return false;
}
*/
/*
bool  CDBFaceBase::CreateDSN (char * szAttributes)
{
char *startpos,*pos;
    startpos=szAttributes;
    while(1)
    {
        pos=strstr(startpos,"\\0");
        if(pos)
        {
            pos[0]=0;
            pos++;
            for(int id=0;id<(int)strlen(pos);id++)
                pos[id]=pos[id+1];
        }
        else
            break;
        startpos=pos;
    }
    if(SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,m_ClassName,szAttributes)!=1)
        return false;
    return true;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -