void KexiDBAutoField::setDataSource(const QString &ds) { KexiFormDataItemInterface::setDataSource(ds); if (ds.isEmpty()) { setColumnInfo(0); } }
bool FileMgr::memToFile(const char *sFileName, const int iTableType, bool bShow){ if ( !sFileName ) { return false; } setFileName(sFileName); setTableType(iTableType); char sFullFileName[500]={0}; if ('/' != m_sFileName[0] ) { strcat(sFullFileName, m_sFilePath); strcat(sFullFileName, m_sFileName); }else { for(int j=(strlen(sFileName)-1);j>0;j--) { if(m_sFileName[j]=='/') { strncpy(m_sFilePath,m_sFileName,j); break; } } strcat(sFullFileName, m_sFileName); } if(!openPath(m_sFilePath)) { return false; } Log::log(0, "导出文件的路径是:%s", m_sFilePath); if ( !access(sFullFileName , R_OK|W_OK) ) { Log::log(0, "文件[%s]已存在,请重新指定文件名后再试!", sFullFileName); return false; } if ( !setColumnInfo(iTableType) ) { return false; } if ( !openDbFile(sFullFileName) ) { return false; } int iTotalCnt = 0; //待处理数据量 Log::log(0, "开始导出数据..."); switch (m_iTableType) { case TABLE_HCODE_INFO: { HCodeInfoStruct *pData = NULL; setDataStructSize(sizeof(HCodeInfoStruct)); iTotalCnt = SHMInfoCtl::getCount(TABLE_HCODE_INFO); SHMInfoCtl::getHeadData(&pData, 1); addData((char*)pData, iTotalCnt); if (bShow) { for (int i=0;i<iTotalCnt;++i) { SHMInfoCtl::showHCodeInfo(*(pData+i)); } } } break; case TABLE_MIN_INFO: { MinInfoStruct *pData = NULL; setDataStructSize(sizeof(MinInfoStruct)); iTotalCnt = SHMInfoCtl::getCount(TABLE_MIN_INFO); SHMInfoCtl::getMinData(&pData, 1); addData((char*)pData, iTotalCnt); if (bShow) { for (int i=0;i<iTotalCnt;++i) { SHMInfoCtl::showMinInfo(*(pData+i)); } } } break; case TABLE_LOCAL_INFO: { } break; case TABLE_IMSI_INFO: { IMSIInfoStruct *pData = NULL; setDataStructSize(sizeof(IMSIInfoStruct)); iTotalCnt = SHMInfoCtl::getCount(TABLE_IMSI_INFO); SHMInfoCtl::getImsiData(&pData, 1); addData((char*)pData, iTotalCnt); if (bShow) { for (int i=0;i<iTotalCnt;++i) { SHMInfoCtl::showImsiInfo(*(pData+i)); } } } break; default: { Log::log(0, "未知表类型:%d", iTableType); return false; } break; } closeFile(); Log::log(0, "共导出 %d 条数据!", iTotalCnt); return true; }
bool FileMgr::fileToMem(const char *sFileName, const int iTableType,bool bShow ,bool bReplace){ if (0 == sFileName) return false; setFileName(sFileName); setTableType(iTableType); char sFullFileName[500]={0}; char sLineTmp[DATA_LEN]={0}; if ('/' != m_sFileName[0] ) { strcat(sFullFileName, m_sFilePath); strcat(sFullFileName, m_sFileName); }else { for(int j=(strlen(sFileName)-1);j>0;j--) { if(m_sFileName[j]=='/') { strncpy(m_sFilePath,m_sFileName,j); break; } } strcat(sFullFileName, m_sFileName); } if(!openPath(m_sFilePath)) { return false; } Log::log(0, "导入文件的路径是:%s", m_sFilePath); if ( access(sFullFileName , R_OK|W_OK) ) { m_poLogGroup->log(MBC_FILE_NOT_EXIST,LOG_LEVEL_ERROR,LOG_CLASS_ERROR,LOG_TYPE_PROC,-1,NULL,"指定文件不存在[%s]",sFullFileName); Log::log(0, "文件[%s]不存在,请重新指定文件名后再试!", sFullFileName); return false; } if ( !setColumnInfo(iTableType) ) { return false; } if (!openFile(sFullFileName, "r")) { return false; } //读取文件内字段名 if ( getLine(sLineTmp, DATA_LEN-1, '\n') ) { if ( !checkColumn(sLineTmp) ) return false; } else { Log::log(0, "读取文件内字段名信息出错,请检查文件!"); return false; } //处理每一行 int iTotalCnt = 0; int iUpdCnt = 0; Log::log(0, "开始导入数据..."); while ( getLine(sLineTmp, DATA_LEN-1, '\n') ) { if ( 0 == sLineTmp[0] ) { continue; } if ( !flushToMem(sLineTmp, bShow, iUpdCnt,bReplace) ) { //每行数据写入内存 Log::log(0, "无法加载数据,此行为:\n%s", sLineTmp); return false; } ++iTotalCnt; } closeFile(); Log::log(0, "共导入 %d 条数据:更新 %d 条,新增 %d 条!", iTotalCnt, iUpdCnt, iTotalCnt - iUpdCnt); return true; }