📄 eitab.cpp
字号:
#include "stdafx.h"
#include "sql.h"
#include "sqlext.h"
#include "FTDB.h"
#include "eiTab.h"
#include "outputCon.h"
CExpTab::CExpTab(CFTDB* pDB)
{
m_pDB=pDB;
m_fMonitorConsole=TRUE;
m_pFileData2=m_pFileData=m_pFile=NULL;
m_fWithTxtFile=FALSE;
m_fWithHeader=TRUE;
}
CExpTab::~CExpTab()
{
}
BOOL CExpTab::ExportTab(LPCSTR pszExpSQL,LPCSTR pszFileName,LPCSTR pszImpSQL)
{
HSTMT hstmt;
RETCODE rt=SQLAllocStmt(m_pDB->m_hdbc,&hstmt);
if(!SQL_SUCC(rt))
return FALSE;
SQLSetStmtOption(hstmt,SQL_CONCURRENCY,SQL_CONCUR_READ_ONLY);
SQLSetStmtOption(hstmt,SQL_CURSOR_TYPE,SQL_CURSOR_FORWARD_ONLY);
BOOL fOK=FALSE;
if(m_fMonitorConsole)
startConsoleWin();
if(OpenFile(pszFileName,m_fWithTxtFile))
{
WriteFileHead(pszExpSQL,pszImpSQL);
fOK=ExportTab_2(hstmt,pszExpSQL);
CloseFile();
}
if(m_fMonitorConsole)
endConsoleWin();
SQLFreeStmt(hstmt,SQL_DROP);
return fOK;
}
BOOL CExpTab::ExportTab_2(HSTMT hstmt,LPCSTR pszSQL)
{//第二步
RETCODE rt=SQLExecDirect(hstmt,(UCHAR*)pszSQL, SQL_NTS);
if(!SQL_SUCCEEDED(rt))
{
m_pDB->DisplayError(hstmt);
return FALSE;
}
SWORD swNum;
rt=SQLNumResultCols(hstmt,&swNum);
if(!SQL_SUCCEEDED(rt))
return FALSE;
SDWORD cbLen=1024*50;
char *pszBuf=new char[cbLen];
sprintf(pszBuf,"%d",(int)swNum);
WriteFile("<Col>");
WriteFile(pszBuf);
WriteFile("</Col>");
int iRecordNum=0;
while(1)
{
rt= SQLFetch(hstmt);
if(!SQL_SUCCEEDED(rt))
{
delete pszBuf;
if(SQL_NO_DATA_FOUND==rt)
{
if(m_fMonitorConsole)
debugCon_wprintf("完成\n");
char szOut[100];
sprintf(szOut,"%d",iRecordNum);
WriteFile("<Record>");
WriteFile(szOut);
WriteFile("</Record>");
if(m_fMonitorConsole)
debugCon_wprintf("成功导出数据 %d 条",iRecordNum);
//AfxMessageBox(szOut);
break;
}
else
{
if(m_fMonitorConsole)
debugCon_wprintf("出现错误\n",iRecordNum);
m_pDB->DisplayError(hstmt);
return FALSE;
}
}
iRecordNum++;
if(m_fMonitorConsole)
debugCon_wprintf("导出第 %d 条记录\n",iRecordNum);
for(int i=0;i<(int)swNum;i++)
{
SDWORD cbRetLen;
rt=SQLGetData(hstmt,i+1, SQL_C_CHAR, pszBuf, cbLen,&cbRetLen);
if(!SQL_SUCCEEDED(rt))
{
if(m_fMonitorConsole)
debugCon_wprintf("出现错误\n");
m_pDB->DisplayError(hstmt);
delete pszBuf;
return FALSE;
}
WriteFile(pszBuf,(DWORD)cbRetLen);
}
}
return TRUE;
}
BOOL CExpTab::WriteFileHead(LPCSTR pszExpSQL,LPCSTR pszImpSQL)
{
if(m_pFile)
{
WriteFile("<<HG DB FrontTool 0.1>>");
WriteFile("<Exp>");
WriteFile(pszExpSQL);
WriteFile("</Exp>");
WriteFile("<Imp>");
WriteFile(pszImpSQL);
WriteFile("</Imp>");
WriteFile("<<Head End>>");
}
return TRUE;
}
BOOL CExpTab::WriteFile(LPCSTR pszTxt)
{
if(m_pFile)
fprintf(m_pFile,"%s\n",pszTxt);
return TRUE;
}
BOOL CExpTab::WriteFile(LPVOID pData,DWORD dwLen)
{
DWORD dwW=fwrite(&dwLen,sizeof(DWORD),1,m_pFileData);
if(dwLen!=(DWORD)-1)
dwW+=fwrite(pData,dwLen,1,m_pFileData);
if(NULL==m_pFileData2)
return dwW==dwLen;
char szTxt[20];
sprintf(szTxt,"%d",dwLen);
fprintf(m_pFileData2,"%s->",szTxt);
for(int i=0;i<(int)dwLen;i++)
{
fprintf(m_pFileData2,"%c",((char*)pData)[i]);
}
fprintf(m_pFileData2,"\n");
return dwW==dwLen;
}
BOOL CExpTab::OpenFile(LPCSTR pszFN,BOOL fWithTxt)
{
char szFN[300];
sprintf(szFN,"%s.hdr",pszFN);
ASSERT(m_fWithHeader);
if(m_fWithHeader)
m_pFile=fopen(szFN,"wt");
else
m_pFile=NULL;
sprintf(szFN,"%s.exp",pszFN);
m_pFileData=fopen(szFN,"wb");
sprintf(szFN,"%s.txt",pszFN);
if(fWithTxt)
m_pFileData2=fopen(szFN,"wb");
else
m_pFileData2=NULL;
if(!m_pFile || !m_pFileData)
{
CloseFile();
return FALSE;
}
return TRUE;
}
BOOL CExpTab::CloseFile(void)
{
if(m_pFile)
fclose(m_pFile);
if(m_pFileData)
fclose(m_pFileData);
if(m_pFileData2)
fclose(m_pFileData2);
return TRUE;
}
CImpTab::CImpTab(CFTDB* pDB)
{
m_pDB=pDB;
m_fMonitorConsole=TRUE;
m_pFileData=m_pFile=NULL;
}
CImpTab::~CImpTab()
{
}
BOOL GetMiddleString(FILE* pF,LPCSTR pszH,LPCSTR pszT,CString &szBuf)
{
char szRead[400];
szBuf="";
CString szTemp;
int iPhase=0;
while(NULL!=fgets(szRead,399,pF))
{
szTemp=szRead;
switch(iPhase)
{
case(0):
if(0==szTemp.Find(pszH))
iPhase=1;
break;
case(1):
if(0==szTemp.Find(pszT))
{
return TRUE;
}
szBuf+=szRead;
szBuf+="\n";
break;
default:
ASSERT(0);
break;
}
}
return FALSE;
}
BOOL CImpTab::AnalyHeader(LPCSTR pszFileName,int &iCol,int &iRow,CString& szImpSQL)
{
FILE* pFile=fopen(pszFileName,"r");
if(NULL==pFile)
return FALSE;
BOOL fOK1,fOK2,fOK3;
CString szContent;
fOK1=GetMiddleString(pFile,"<Imp>","</Imp>",szContent);
szImpSQL=szContent;
fOK2=GetMiddleString(pFile,"<Col>","</Col>",szContent);
iCol=atoi(szContent);
fOK3=GetMiddleString(pFile,"<Record>","</Record>",szContent);
iRow=atoi(szContent);
return fOK1&&fOK2&&fOK3;
}
BOOL CImpTab::ImportTab(LPCSTR pszSQL,LPCSTR pszFileName,int iCol,int iTotal)
{
m_iCol=iCol;
m_iTotalRecord=iTotal;
// if(m_iCol==-1 || m_iTotal==-1)
// ReadFileHead();
HSTMT hstmt;
RETCODE rt=SQLAllocStmt(m_pDB->m_hdbc,&hstmt);
if(!SQL_SUCC(rt))
return FALSE;
BOOL fOK=FALSE;
NewBuf();
if(m_fMonitorConsole)
startConsoleWin();
if(OpenFile(pszFileName))
{
fOK=ImportTab_2(hstmt,pszSQL);
CloseFile();
}
if(m_fMonitorConsole)
endConsoleWin();
SQLFreeStmt(hstmt,SQL_DROP);
DelBuf();
return fOK;
}
BOOL CImpTab::ImportTab_2(HSTMT hstmt,LPCSTR pszSQL)
{
RETCODE rt = SQLPrepare(hstmt, (UCHAR*)pszSQL,SQL_NTS);
if (rt != SQL_SUCCESS)
{
m_pDB->DisplayError(hstmt);
return FALSE;
}
SDWORD cbLen=SQL_NTS;
for(int i=0;i<m_iCol;i++)
{//添加参数
char* pszBuf=(char*)m_arrPtrBuf.GetAt(i);
rt=SQLBindParameter(hstmt,
i+1,
SQL_PARAM_INPUT,
SQL_C_CHAR,
SQL_CHAR,
1024*4,
0,
pszBuf,
0,
&cbLen);
if(!SQL_SUCC(rt))
{
if(m_fMonitorConsole)
debugCon_wprintf("出现错误\n");
m_pDB->DisplayError(hstmt);
return FALSE;
}
}
for(i=0;i<m_iTotalRecord;i++)
{
if(m_fMonitorConsole)
debugCon_wprintf("导入数据第%d条\n",i+1);
ReadRecord();
rt= SQLExecute(hstmt);
if(!SQL_SUCC(rt))
{
if(m_fMonitorConsole)
debugCon_wprintf("出现错误\n");
m_pDB->DisplayError(hstmt);
return FALSE;
}
}
if(m_fMonitorConsole)
debugCon_wprintf("完成\n");
return TRUE;
}
BOOL CImpTab::ReadFileHead(void)
{
return FALSE;
}
BOOL CImpTab::ReadRecord(void)
{
DWORD dwLen,dwRead;
for(int i=0;i<m_iCol;i++)
{
char* pszBuf=(char*)m_arrPtrBuf.GetAt(i);
dwRead=fread(&dwLen,sizeof(DWORD),1,m_pFileData);
if(dwLen!=(DWORD)-1)
dwRead+=fread(pszBuf,dwLen,1,m_pFileData);
else
dwLen=0;
pszBuf[dwLen]='\0';
}
return (dwRead==dwLen+sizeof(DWORD));
}
BOOL CImpTab::NewBuf(void)
{
for(int i=0;i<m_iCol;i++)
{//bug
char* pBuf=new char[1024*4];
m_arrPtrBuf.Add(pBuf);
}
return TRUE;
}
BOOL CImpTab::DelBuf(void)
{
for(int i=0;i<m_iCol;i++)
{
void* pBuf=m_arrPtrBuf.GetAt(0);
m_arrPtrBuf.RemoveAt(0);
delete pBuf;
}
return TRUE;
}
BOOL CImpTab::OpenFile(LPCSTR pszFileName)
{
char szFN[300];
sprintf(szFN,"%s.hdr",pszFileName);
m_pFile=fopen(szFN,"rt");
sprintf(szFN,"%s.exp",pszFileName);
m_pFileData=fopen(szFN,"rb");
if(!m_pFile || !m_pFileData)
{
CloseFile();
return FALSE;
}
return TRUE;
}
BOOL CImpTab::CloseFile(void)
{
if(m_pFile)
fclose(m_pFile);
if(m_pFileData)
fclose(m_pFileData);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -