📄 dbbaseclass.cpp
字号:
{
//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 + -