//wzdFileOptsPage\r
#define chkFileSkipEmptyRow CTRL_CHECKBOX("chkFileSkipEmptyRow")\r
#define txtFileOptImpRegEx CTRL_TEXT("txtFileOptImpRegEx")\r
+#define txtFileOptStartWith CTRL_TEXT("txtFileOptStartWith")\r
#define spinFileSkipFirstRows CTRL_SPIN("spinFileSkipFirstRows")\r
#define rdbFileImpAllRows CTRL_RADIOBUTTON("rdbFileImpAllRows")\r
#define rdbFileImpOnlyRows CTRL_RADIOBUTTON("rdbFileImpOnlyRows")\r
#define chcImpDest CTRL_CHOICE("chcImpDest")\r
#define txtDestFilePath CTRL_TEXT("txtDestFilePath")\r
#define btnDestFileBrowse CTRL_BUTTON("btnDestFileBrowse")\r
+#define chkDestFileAppend CTRL_CHECKBOX("chkDestFileAppend")\r
#define spinCommitEvery CTRL_SPIN("spinCommitEvery")\r
#define spinStopOnError CTRL_SPIN("spinStopOnError")\r
#define rdbLogToScreen CTRL_RADIOBUTTON("rdbLogToScreen")\r
#define rdbLogToScrFile CTRL_RADIOBUTTON("rdbLogToScrFile")\r
#define txtLogFilePath CTRL_TEXT("txtLogFilePath")\r
#define btnLogFileBrowse CTRL_BUTTON("btnLogFileBrowse")\r
+#define chkLogFileAppend CTRL_CHECKBOX("chkLogFileAppend")\r
#define rdbLogVerbose CTRL_RADIOBUTTON("rdbLogVerbose")\r
#define rdbLogSummary CTRL_RADIOBUTTON("rdbLogSummary")\r
#define rdbLogSilent CTRL_RADIOBUTTON("rdbLogSilent")\r
// wizard event\r
EVT_WIZARD_PAGE_CHANGING(XRCID("frmImport"), frmImport::OnPageChanging)\r
EVT_WIZARD_CANCEL(XRCID("frmImport"), frmImport::OnWizardCancel)\r
+ // TODO: check whether finish button has bug that can't be disabled?\r
+ // if or not add a new method to catch finish wizard event.\r
// Source Type page\r
EVT_RADIOBUTTON(XRCID("rdbSrcTextFile"), frmImport::OnSourceType)\r
EVT_RADIOBUTTON(XRCID("rdbSrcArchFile"), frmImport::OnSourceType)\r
EVT_RADIOBUTTON(XRCID("rdbSrcODBC"), frmImport::OnSourceType)\r
EVT_RADIOBUTTON(XRCID("rdbSrcPgSQL"), frmImport::OnSourceType)\r
// Text file page\r
- EVT_BUTTON(XRCID("btnTextFileBrowse"), frmImport::OnTextFileBrowse)\r
- EVT_CHOICE(XRCID("chcTextFileEncoding"), frmImport::OnTextFileEncoding)\r
- EVT_BUTTON(XRCID("btnTextFilePreviewMore"), frmImport::OnTextFilePreviewMore)\r
+ EVT_BUTTON(XRCID("btnTextFileBrowse"), frmImport::OnTextFileBrowse)\r
+ EVT_CHOICE(XRCID("chcTextFileEncoding"), frmImport::OnTextFileEncoding)\r
+ EVT_BUTTON(XRCID("btnTextFilePreviewMore"), frmImport::OnTextFilePreviewMore)\r
// Archive file page\r
EVT_BUTTON(XRCID("btnArchFileBrowse"), frmImport::OnArchFileBrowse)\r
EVT_CHOICE(XRCID("chcArchFileEncoding"), frmImport::OnArchFileEncoding)\r
\r
if (m_fileoptimpregex)\r
delete m_fileoptimpregex;\r
+ if (m_fileoptstartwith)\r
+ delete m_fileoptstartwith;\r
\r
if (m_booltruevals)\r
delete m_booltruevals;\r
m_srcfile = NULL;\r
\r
m_fileoptimpregex = NULL;\r
+ m_fileoptstartwith = NULL;\r
m_booltruevals = NULL;\r
m_boolfalsevals = NULL;\r
\r
delete m_fileoptimpregex;\r
m_fileoptimpregex = NULL;\r
}\r
+ if (m_fileoptstartwith)\r
+ {\r
+ delete m_fileoptstartwith;\r
+ m_fileoptstartwith = NULL;\r
+ }\r
}\r
\r
if ((m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE))\r
{\r
txtDestFilePath->Enable();\r
btnDestFileBrowse->Enable();\r
+ chkDestFileAppend->Enable();\r
}\r
else\r
{\r
txtDestFilePath->Disable();\r
btnDestFileBrowse->Disable();\r
+ chkDestFileAppend->Disable();\r
}\r
}\r
\r
\r
bool frmImport::OnDestFilePathChange(const wxString& filepath)\r
{\r
- if (wxFileExists(filepath))\r
+ if (!chkDestFileAppend->GetValue() && wxFileExists(filepath))\r
{\r
wxString msg;\r
msg.Printf(_("The output file: \n\n%s\n\nalready exists. Do you want to overwrite it?"), filepath.c_str());\r
{\r
txtLogFilePath->Disable();\r
btnLogFileBrowse->Disable();\r
+ chkLogFileAppend->Disable();\r
}\r
else\r
{\r
txtLogFilePath->Enable();\r
btnLogFileBrowse->Enable();\r
+ chkLogFileAppend->Enable();\r
}\r
}\r
\r
\r
bool frmImport::OnLogFilePathChange(const wxString& filepath)\r
{\r
- if (wxFileExists(filepath))\r
+ if (!chkLogFileAppend->GetValue() && wxFileExists(filepath))\r
{\r
wxString msg;\r
msg.Printf(_("The log file: \n\n%s\n\nalready exists. Do you want to overwrite it?"), filepath.c_str());\r
int impmode = (int)chcImportMode->GetClientData(chcImportMode->GetSelection());\r
int impdest = (int)chcImpDest->GetClientData(chcImpDest->GetSelection());\r
\r
+ bool fileopened;\r
if (m_procstatus==IMPPREPARED)\r
{\r
txtLogMessages->Clear();\r
\r
- if ((!m_destfile && impdest==IMPDESTFCOPY) || impdest==IMPDESTFINS || impdest==IMPDESTFTEST || impdest==IMPDESTFILE)\r
+ if (!m_destfile && (impdest==IMPDESTFCOPY || impdest==IMPDESTFINS || impdest==IMPDESTFTEST || impdest==IMPDESTFILE))\r
{\r
wxString destfilename = txtDestFilePath->GetValue();\r
if (wxFile::Exists(destfilename) && !wxFile::Access(destfilename, wxFile::write))\r
return;\r
}\r
m_destfile = new wxFile;\r
- if (!m_destfile->Open(destfilename, wxFile::write))\r
+ if (chkDestFileAppend->GetValue())\r
+ fileopened = m_destfile->Open(destfilename, wxFile::write_append);\r
+ else\r
+ fileopened = m_destfile->Open(destfilename, wxFile::write);\r
+ if (!fileopened)\r
{\r
delete m_destfile;\r
m_destfile = NULL;\r
return;\r
}\r
m_logfile = new wxFile;\r
- if (!m_logfile->Open(logfilename, wxFile::write))\r
+ if (chkLogFileAppend->GetValue())\r
+ fileopened = m_logfile->Open(logfilename, wxFile::write_append);\r
+ else\r
+ fileopened = m_logfile->Open(logfilename, wxFile::write);\r
+ if (!fileopened)\r
{\r
delete m_logfile;\r
m_logfile = NULL;\r
\r
m_imperrnum = 0;\r
m_improwsnum = 0;\r
+ m_skiprowsnum = 0;\r
m_transrowsnum = 0;\r
RandomSavepointName(m_imptransname);\r
\r
{\r
m_imppausedts += wxDateTime::UNow() - m_imppausedt;\r
\r
- //m_procstatus = IMPRUNNING;\r
+ m_procstatus = IMPRUNNING;\r
btnImpStart->SetLabel(_("&Pause"));\r
wzdctrlbtn = (wxButton*)FindWindowById(wxID_BACKWARD);\r
wzdctrlbtn->Disable();\r
skipfirstrows = false;\r
}\r
\r
- int commitevery = spinCommitEvery->GetValue();\r
- int stoponerror = spinStopOnError->GetValue();\r
+ unsigned int commitevery = spinCommitEvery->GetValue();\r
+ unsigned int stoponerror = spinStopOnError->GetValue();\r
\r
#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
SQLSMALLINT stmtcolsnum;\r
wxString **linevals;\r
int valsnum;\r
wxDateTime clienttime;\r
- wxTimeSpan elapsedspan;\r
- int avgrowtime;\r
wxString impdatalist, insstmt, rowlog;\r
wxChar imptranssn[32];\r
- bool copybolcking = false;\r
- bool rowdataisok;\r
+ bool needflush = false;\r
+ bool rowdataisok, lineisskipped = false;\r
int commres;\r
\r
while (true)\r
{\r
if (m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE)\r
{\r
+ lineisskipped = false;\r
linedata.Empty();\r
linevals = NULL;\r
if (!m_srcfile->NextLine(linedata, linevals, valsnum))\r
}\r
}\r
\r
- continue;\r
+ lineisskipped = true;\r
}\r
\r
if (skipemptyline && linedata.IsEmpty())\r
}\r
}\r
\r
- continue;\r
+ lineisskipped = true;\r
}\r
\r
if (m_fileoptimpregex && !m_fileoptimpregex->Matches(linedata))\r
}\r
}\r
\r
- continue;\r
+ lineisskipped = true;\r
+ }\r
+\r
+ if (m_fileoptstartwith && !linedata.StartsWith(*m_fileoptstartwith))\r
+ {\r
+ if (loginfo)\r
+ {\r
+ if (logtoscr)\r
+ {\r
+ txtLogMessages->AppendText(_("Skip not match start with row."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ }\r
+ if (m_logfile)\r
+ {\r
+ m_logfile->Write(_("Skip not match start with row."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+\r
+ lineisskipped = true;\r
}\r
}\r
#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
else\r
break;\r
\r
- impdatalist.Empty();\r
- clienttime = wxDateTime::UNow();\r
- rowlog.Empty();\r
+ if (!lineisskipped)\r
+ {\r
+ impdatalist.Empty();\r
+ clienttime = wxDateTime::UNow();\r
+ rowlog.Empty();\r
+ }\r
\r
- if (m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE)\r
+ if (lineisskipped);\r
+ else if (m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE)\r
rowdataisok = GenCSVSQLData(impdatalist, rowlog, linevals, valsnum, clienttime, impmode, fmtstyle);\r
#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
else if (m_datasrctype==SRCODBCPAGE)\r
else\r
rowdataisok = false;\r
\r
- if (rowdataisok)\r
+ if (needflush)\r
{\r
if (impmode==IMPORTMODECOPY)\r
{\r
- if (copybolcking)\r
+ if (m_impconn->FlushData())\r
{\r
- if (m_impconn->FlushData())\r
+ if (loginfo)\r
{\r
- if (loginfo)\r
+ if (logtoscr)\r
+ {\r
+ txtLogMessages->AppendText(_("Data flushed."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ }\r
+ if (m_logfile)\r
+ {\r
+ m_logfile->Write(_("Data flushed."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (logerror)\r
+ {\r
+ if (logtoscr)\r
+ txtLogMessages->AppendText(_("Failed to flush data: ") + m_impconn->GetLastError());\r
+ if (m_logfile)\r
+ m_logfile->Write(_("Failed to flush data: ") + m_impconn->GetLastError());\r
+ }\r
+ m_procstatus = IMPERRORSTOP;\r
+ m_imperrnum++;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ insstmt.Empty();\r
+ swprintf(imptranssn, 32, wxT("%d"), m_improwsnum-1);\r
+\r
+ if (m_impconn->GetAsyncResult())\r
+ {\r
+ if (loginfo)\r
+ {\r
+ if (logtoscr)\r
+ {\r
+ txtLogMessages->AppendText(_("Succeeded."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ }\r
+ if (m_logfile)\r
+ {\r
+ m_logfile->Write(_("Succeeded."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ m_transrowsnum++;\r
+ }\r
+ else\r
+ {\r
+ if (logerror)\r
+ {\r
+ if (logtoscr)\r
+ txtLogMessages->AppendText(m_impconn->GetLastError());\r
+ if (m_logfile)\r
+ m_logfile->Write(m_impconn->GetLastError());\r
+ }\r
+\r
+ insstmt.Append(wxT("ROLLBACK TO ")).Append(m_imptransname).Append(imptranssn).Append(wxT(';'));\r
+ m_imperrnum++;\r
+ }\r
+\r
+ insstmt.Append(wxT("RELEASE SAVEPOINT ")).Append(m_imptransname).Append(imptranssn).Append(wxT(';'));\r
+ if (commitevery && m_transrowsnum>=commitevery)\r
+ {\r
+ if (impdest==IMPDESTTEST || impdest==IMPDESTFTEST)\r
+ {\r
+ insstmt.Append(wxT("ROLLBACK;"));\r
+ txtLogMessages->AppendText(_("Rollback and begin new transaction."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ if (loginfo && m_logfile)\r
+ {\r
+ m_logfile->Write(_("Rollback and begin new transaction."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ insstmt.Append(wxT("COMMIT;"));\r
+ txtLogMessages->AppendText(_("Commit and begin new transaction."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ if (loginfo && m_logfile)\r
+ {\r
+ m_logfile->Write(_("Commit and begin new transaction."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ insstmt.Append(wxT("BEGIN TRANSACTION;"));\r
+ m_transrowsnum = 0;\r
+ }\r
+ if (logstmt)\r
+ {\r
+ if (logtoscr)\r
+ {\r
+ txtLogMessages->AppendText(insstmt);\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ }\r
+ if (m_logfile)\r
+ {\r
+ m_logfile->Write(insstmt);\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ if (m_impconn->ExecuteVoid(insstmt, false))\r
+ {\r
+ if (loginfo)\r
+ {\r
+ if (logtoscr)\r
+ {\r
+ txtLogMessages->AppendText(_("Succeeded."));\r
+ txtLogMessages->AppendText(END_OF_LINE);\r
+ }\r
+ if (m_logfile)\r
+ {\r
+ m_logfile->Write(_("Succeeded."));\r
+ m_logfile->Write(END_OF_LINE);\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (logerror)\r
+ {\r
+ if (!logstmt)\r
{\r
if (logtoscr)\r
{\r
- txtLogMessages->AppendText(_("Data flushed."));\r
+ txtLogMessages->AppendText(insstmt);\r
txtLogMessages->AppendText(END_OF_LINE);\r
}\r
if (m_logfile)\r
{\r
- m_logfile->Write(_("Data flushed."));\r
+ m_logfile->Write(insstmt);\r
m_logfile->Write(END_OF_LINE);\r
}\r
}\r
- }\r
- else\r
- {\r
- if (logerror)\r
- {\r
- if (logtoscr)\r
- txtLogMessages->AppendText(_("Failed to flush data: ") + m_impconn->GetLastError());\r
- if (m_logfile)\r
- m_logfile->Write(_("Failed to flush data: ") + m_impconn->GetLastError());\r
- }\r
- m_procstatus = IMPERRORSTOP;\r
- m_imperrnum++;\r
- break;\r
+ if (logtoscr)\r
+ txtLogMessages->AppendText(m_impconn->GetLastError());\r
+ if (m_logfile)\r
+ m_logfile->Write(m_impconn->GetLastError());\r
}\r
\r
- copybolcking = false;\r
+ m_procstatus = IMPERRORSTOP;\r
+ m_imperrnum++;\r
+ break;\r
}\r
+ }\r
\r
+ needflush = false;\r
+ }\r
+\r
+ if (lineisskipped);\r
+ else if (rowdataisok)\r
+ {\r
+ if (impmode==IMPORTMODECOPY)\r
+ {\r
if (loginfo && impdest!=IMPDESTFILE)\r
{\r
if (logtoscr)\r
m_logfile->Write(END_OF_LINE);\r
}\r
}\r
- copybolcking = true;\r
+ needflush = true;\r
}\r
\r
}\r
else\r
{\r
- if (m_procstatus==IMPPAUSED)\r
- m_procstatus = IMPRUNNING;\r
- else if (impdest!=IMPDESTFILE && m_improwsnum)\r
- {\r
- insstmt.Empty();\r
- //_itow(m_improwsnum-1, imptranssn, 10);\r
- swprintf(imptranssn, 32, wxT("%d"), m_improwsnum-1);\r
-\r
- if (m_impconn->GetAsyncResult())\r
- {\r
- if (loginfo)\r
- {\r
- if (logtoscr)\r
- {\r
- txtLogMessages->AppendText(_("Succeeded."));\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- }\r
- if (m_logfile)\r
- {\r
- m_logfile->Write(_("Succeeded."));\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- m_transrowsnum++;\r
- }\r
- else\r
- {\r
- if (logerror)\r
- {\r
- if (logtoscr)\r
- txtLogMessages->AppendText(m_impconn->GetLastError());\r
- if (m_logfile)\r
- m_logfile->Write(m_impconn->GetLastError());\r
- }\r
-\r
- insstmt.Append(wxT("ROLLBACK TO ")).Append(m_imptransname).Append(imptranssn).Append(wxT(';'));\r
- m_imperrnum++;\r
- }\r
-\r
- insstmt.Append(wxT("RELEASE SAVEPOINT ")).Append(m_imptransname).Append(imptranssn).Append(wxT(';'));\r
- if (commitevery && m_transrowsnum>=commitevery)\r
- {\r
- if (impdest==IMPDESTTEST || impdest==IMPDESTFTEST)\r
- {\r
- insstmt.Append(wxT("ROLLBACK;"));\r
- txtLogMessages->AppendText(_("Rollback and begin new transaction."));\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- if (loginfo && m_logfile)\r
- {\r
- m_logfile->Write(_("Rollback and begin new transaction."));\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- else\r
- {\r
- insstmt.Append(wxT("COMMIT;"));\r
- txtLogMessages->AppendText(_("Commit and begin new transaction."));\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- if (loginfo && m_logfile)\r
- {\r
- m_logfile->Write(_("Commit and begin new transaction."));\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- insstmt.Append(wxT("BEGIN TRANSACTION;"));\r
- m_transrowsnum = 0;\r
- }\r
- if (logstmt)\r
- {\r
- if (logtoscr)\r
- {\r
- txtLogMessages->AppendText(insstmt);\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- }\r
- if (m_logfile)\r
- {\r
- m_logfile->Write(insstmt);\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- if (m_impconn->ExecuteVoid(insstmt, false))\r
- {\r
- if (loginfo)\r
- {\r
- if (logtoscr)\r
- {\r
- txtLogMessages->AppendText(_("Succeeded."));\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- }\r
- if (m_logfile)\r
- {\r
- m_logfile->Write(_("Succeeded."));\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- }\r
- else\r
- {\r
- if (logerror)\r
- {\r
- if (!logstmt)\r
- {\r
- if (logtoscr)\r
- {\r
- txtLogMessages->AppendText(insstmt);\r
- txtLogMessages->AppendText(END_OF_LINE);\r
- }\r
- if (m_logfile)\r
- {\r
- m_logfile->Write(insstmt);\r
- m_logfile->Write(END_OF_LINE);\r
- }\r
- }\r
- if (logtoscr)\r
- txtLogMessages->AppendText(m_impconn->GetLastError());\r
- if (m_logfile)\r
- m_logfile->Write(m_impconn->GetLastError());\r
- }\r
-\r
- m_procstatus = IMPERRORSTOP;\r
- m_imperrnum++;\r
- break;\r
- }\r
- }\r
-\r
if (impdest==IMPDESTFILE)\r
{\r
insstmt.Empty();\r
}\r
else\r
{\r
- //_itow(m_improwsnum, imptranssn, 10);\r
swprintf(imptranssn, 32, wxT("%d"), m_improwsnum);\r
\r
insstmt.Empty();\r
m_logfile->Write(END_OF_LINE);\r
}\r
}\r
+ needflush = true;\r
}\r
else\r
{\r
m_imperrnum++;\r
}\r
\r
- m_improwsnum++;\r
+ if (lineisskipped)\r
+ m_skiprowsnum++;\r
+ else\r
+ m_improwsnum++;\r
\r
if (logproc)\r
- {\r
- stxtInsertedRows->SetLabel(wxString::Format(_("%d row(s) inserted, %d error(s)."), m_improwsnum-m_imperrnum, m_imperrnum));\r
- elapsedspan = wxDateTime::UNow().Subtract(m_impstartdt).Subtract(m_imppausedts);\r
- avgrowtime = elapsedspan.GetMilliseconds().ToLong()/m_improwsnum;\r
- stxtElapsedTime->SetLabel(elapsedspan.Format(wxT("%H:%M:%S.%l")));\r
- stxtAvgRowTime->SetLabel(wxString::Format(_("%d ms"), avgrowtime));\r
-\r
- if (m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE)\r
- {\r
- if (m_srcsize==wxInvalidOffset)\r
- gaugeImp->SetValue(m_improwsnum%100);\r
- else\r
- {\r
- gaugeImp->SetValue(m_srcfile->Tell()*1000/m_srcsize);\r
- stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(elapsedspan.GetMilliseconds().ToLong()*((m_srcsize-m_srcfile->Tell())/m_srcfile->Tell())).Format(wxT("%H:%M:%S.%l")));\r
- }\r
- }\r
-#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
- else if (m_datasrctype==SRCODBCPAGE)\r
- {\r
- if (m_srcsize==-1)\r
- gaugeImp->SetValue(m_improwsnum%100);\r
- else\r
- {\r
- gaugeImp->SetValue(m_improwsnum*1000/m_srcsize);\r
- stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(avgrowtime*(m_srcsize-m_improwsnum)).Format(wxT("%H:%M:%S.%l")));\r
- }\r
- }\r
-#endif\r
- }\r
+ RefreshProc();\r
\r
if (logtoscr)\r
if (txtLogMessages->GetLastPosition()>MAXLOGCOUNT)\r
{\r
txtLogMessages->Freeze();\r
- txtLogMessages->Remove(0, 1024);\r
+ txtLogMessages->Remove(0, 2048);\r
txtLogMessages->Thaw();\r
}\r
\r
\r
if (impdest!=IMPDESTFILE && (m_procstatus==IMPPAUSING || m_procstatus==IMPSTOPING))\r
{\r
- if (impmode==IMPORTMODECOPY && copybolcking)\r
+ if (impmode==IMPORTMODECOPY && needflush)\r
{\r
if (m_impconn->FlushData())\r
{\r
}\r
}\r
}\r
- else if (impmode==IMPORTMODEINSERT)\r
+ else if (impmode==IMPORTMODEINSERT && needflush)\r
{\r
insstmt.Empty();\r
- //_itow(m_improwsnum-1, imptranssn, 10);\r
swprintf(imptranssn, 32, wxT("%d"), m_improwsnum-1);\r
\r
if (m_impconn->GetAsyncResult())\r
m_logfile->Write(END_OF_LINE);\r
}\r
}\r
+ m_transrowsnum++;\r
}\r
else\r
{\r
{\r
m_imppausedt = wxDateTime::UNow();\r
wxLog::GetActiveTarget()->SetLogLevel(settings->GetLogLevel());\r
- btnImpStart->Enable();\r
- btnImpStop->Enable();\r
btnImpStart->SetLabel(_("&Resume"));\r
\r
#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
#endif\r
\r
if (!logproc)\r
- {\r
- if (m_srcsize==-1)\r
- gaugeImp->SetValue(m_improwsnum%100);\r
- else\r
- gaugeImp->SetValue(m_improwsnum*1000/m_srcsize);\r
-\r
- stxtInsertedRows->SetLabel(wxString::Format(_("%d row(s) inserted, %d error(s)."), m_improwsnum-m_imperrnum, m_imperrnum));\r
- elapsedspan = wxDateTime::UNow().Subtract(m_impstartdt).Subtract(m_imppausedts);\r
- avgrowtime = elapsedspan.GetMilliseconds().ToLong()/m_improwsnum;\r
- stxtElapsedTime->SetLabel(elapsedspan.Format(wxT("%H:%M:%S.%l")));\r
- if (m_srcsize!=-1)\r
- stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(avgrowtime*(m_srcsize-m_improwsnum)).Format(wxT("%H:%M:%S.%l")));\r
- stxtAvgRowTime->SetLabel(wxString::Format(_("%d ms"), avgrowtime));\r
- }\r
+ RefreshProc();\r
\r
wzdctrlbtn = (wxButton*)FindWindowById(wxID_BACKWARD);\r
wzdctrlbtn->Enable();\r
m_procstatus = IMPPAUSED;\r
+ btnImpStart->Enable();\r
+ btnImpStop->Enable();\r
\r
return;\r
}\r
{\r
if (impdest!=IMPDESTFILE)\r
{\r
- if (copybolcking)\r
+ if (needflush)\r
{\r
if (m_impconn->FlushData())\r
{\r
}\r
else\r
{\r
- if (impdest!=IMPDESTFILE)\r
+ if (needflush && impdest!=IMPDESTFILE)\r
{\r
insstmt.Empty();\r
- //_itow(m_improwsnum-1, imptranssn, 10);\r
swprintf(imptranssn, 32, wxT("%d"), m_improwsnum-1);\r
\r
if (m_impconn->GetAsyncResult())\r
gaugeImp->SetValue(gaugeImp->GetRange());\r
\r
if (!logproc && m_procstatus!=IMPERRORSTOP && m_procstatus!=IMPSTOPED)\r
- {\r
- stxtInsertedRows->SetLabel(wxString::Format(_("%d row(s) inserted, %d error(s)."), m_improwsnum-m_imperrnum, m_imperrnum));\r
- elapsedspan = wxDateTime::UNow().Subtract(m_impstartdt).Subtract(m_imppausedts);\r
- avgrowtime = elapsedspan.GetMilliseconds().ToLong()/m_improwsnum;\r
- stxtElapsedTime->SetLabel(elapsedspan.Format(wxT("%H:%M:%S.%l")));\r
- if (m_srcsize!=-1)\r
- stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(avgrowtime*(m_srcsize-m_improwsnum)).Format(wxT("%H:%M:%S.%l")));\r
- stxtAvgRowTime->SetLabel(wxString::Format(_("%d ms"), avgrowtime));\r
- }\r
+ RefreshProc(false);\r
\r
btnImpStart->Disable();\r
btnImpStop->Disable();\r
\r
}\r
\r
+void frmImport::RefreshProc(bool incgauge)\r
+{\r
+ wxTimeSpan elapsedspan;\r
+ int avgrowtime;\r
+\r
+ stxtInsertedRows->SetLabel(wxString::Format(_("%d row(s) inserted, %d error(s), %d skipped."),\r
+ m_improwsnum-m_imperrnum, m_imperrnum, m_skiprowsnum));\r
+ elapsedspan = wxDateTime::UNow().Subtract(m_impstartdt).Subtract(m_imppausedts);\r
+ avgrowtime = elapsedspan.GetMilliseconds().ToLong()/(m_improwsnum + m_skiprowsnum);\r
+ stxtElapsedTime->SetLabel(elapsedspan.Format(wxT("%H:%M:%S.%l")));\r
+ stxtAvgRowTime->SetLabel(wxString::Format(_("%d ms"), avgrowtime));\r
+\r
+ if (m_srcsize==-1)\r
+ {\r
+ if (incgauge)\r
+ gaugeImp->SetValue((m_improwsnum + m_skiprowsnum)%100);\r
+ }\r
+ else\r
+ {\r
+ if (m_datasrctype==TEXTFILEPAGE || m_datasrctype==ARCHFILEPAGE)\r
+ {\r
+ if (incgauge)\r
+ gaugeImp->SetValue(m_srcfile->Tell()*1000/m_srcsize);\r
+ stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(elapsedspan.GetMilliseconds().ToLong()*((m_srcsize-m_srcfile->Tell())/m_srcfile->Tell())).Format(wxT("%H:%M:%S.%l")));\r
+ }\r
+#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
+ else if (m_datasrctype==SRCODBCPAGE)\r
+ {\r
+ if (incgauge)\r
+ gaugeImp->SetValue(m_improwsnum*1000/m_srcsize);\r
+ stxtRemainingTime->SetLabel(wxTimeSpan::Milliseconds(avgrowtime*(m_srcsize-m_improwsnum)).Format(wxT("%H:%M:%S.%l")));\r
+ }\r
+#endif\r
+ }\r
+}\r
+\r
bool frmImport::CheckWizardPage()\r
{\r
if (m_procstatus!=IMPPREPARED)\r
}\r
}\r
\r
+ if (txtFileOptStartWith->GetValue().IsEmpty())\r
+ {\r
+ if (m_fileoptstartwith)\r
+ {\r
+ delete m_fileoptstartwith;\r
+ m_fileoptstartwith = NULL;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (m_fileoptstartwith)\r
+ m_fileoptstartwith->Empty();\r
+ else\r
+ m_fileoptstartwith = new wxString;\r
+ m_fileoptstartwith->Append(txtFileOptStartWith->GetValue());\r
+ }\r
+\r
if (chkFileCheckTrueFirst->GetValue())\r
{\r
wxString truevals = txtFileOptTrueVals->GetValue().Trim().Trim(false);\r
chcImpDest->SetSelection(0);\r
txtDestFilePath->Disable();\r
btnDestFileBrowse->Disable();\r
+ chkDestFileAppend->Disable();\r
}\r
else if (impdest==IMPDESTFCOPY || impdest==IMPDESTFINS)\r
{\r
chcImpDest->SetSelection(1);\r
txtDestFilePath->Enable();\r
btnDestFileBrowse->Enable();\r
+ chkDestFileAppend->Enable();\r
}\r
else if (impdest==IMPDESTTEST)\r
{\r
chcImpDest->SetSelection(2);\r
txtDestFilePath->Disable();\r
btnDestFileBrowse->Disable();\r
+ chkDestFileAppend->Disable();\r
}\r
else if (impdest==IMPDESTFTEST)\r
{\r
chcImpDest->SetSelection(3);\r
txtDestFilePath->Enable();\r
btnDestFileBrowse->Enable();\r
+ chkDestFileAppend->Enable();\r
}\r
else\r
{\r
chcImpDest->SetSelection(4);\r
txtDestFilePath->Enable();\r
btnDestFileBrowse->Enable();\r
+ chkDestFileAppend->Enable();\r
}\r
\r
if (rdbLogToScreen->GetValue())\r
{\r
txtLogFilePath->Disable();\r
btnLogFileBrowse->Disable();\r
+ chkLogFileAppend->Disable();\r
}\r
else if (rdbLogToFile->GetValue())\r
{\r
txtLogFilePath->Enable();\r
btnLogFileBrowse->Enable();\r
+ chkLogFileAppend->Enable();\r
}\r
else\r
{\r
txtLogFilePath->Disable();\r
btnLogFileBrowse->Disable();\r
+ chkLogFileAppend->Disable();\r
rdbLogToScreen->SetValue(true);\r
}\r
\r
gce_onempty->Append(IMPERRORDISP);\r
if ((!hassrccol || impmode==IMPORTMODEINSERT) && (!m_tgtcolsisnotnull[rowidx] || (m_tgtcolsisnotnull[rowidx] && m_tgtcolshasdef[rowidx])))\r
gce_onempty->Append(IMPDEFAULTDISP);\r
- if (hassrccol && !m_tgtcolsisnotnull[rowidx])\r
+ if (!m_tgtcolsisnotnull[rowidx])\r
gce_onempty->Append(IMPNULLDISP);\r
gce_onempty->Append(IMPBOOLFALSEDISP);\r
gce_onempty->Append(IMPBOOLTRUEDISP);\r
- if (impmode==IMPORTMODEINSERT && (m_origsrctype==TEXTFILEPAGE || m_origsrctype==ARCHFILEPAGE))\r
+ if (impmode==IMPORTMODEINSERT)\r
gce_onempty->Append(IMPEXPRDISP);\r
\r
if (onemptyact.IsEmpty() || !gce_onempty->Contains(onemptyact))\r
int expcolnr, onemptycolnr, fmtcolnr;\r
for (dbcolidx=loopstartnr; dbcolidx<loopuntilnr; dbcolidx++)\r
{\r
- if (m_datasrctype==SRCPGSQLPAGE)\r
- {\r
- continue;\r
- }\r
+ m_colsettingiserr[dbcolidx] = false;\r
\r
#if defined(__WXMSW__) || defined(__WITHIODBC__) || defined(__WITHUNIXODBC__)\r
if (m_datasrctype==SRCODBCPAGE)\r
txtColsSettingLog->AppendText(_(" -- Please specify a constant for NOT NULL column: ") + *m_tgtcolsnames[dbcolidx]);\r
gridColSetting->SetCellBackgroundColour(dbcolidx, expcolnr, *wxRED);\r
\r
+ m_colsettingiserr[dbcolidx] = true;\r
if (dbcolnr==wxNOT_FOUND || !origcolerr)\r
- //m_colsettingerrnum++;\r
- //else if (!origcolerr)\r
- {\r
- m_colsettingiserr[dbcolidx] = true;\r
m_colsettingerrnum++;\r
- }\r
}\r
else\r
{\r
txtColsSettingLog->AppendText(_(" -- Please specify a expression for NOT NULL column: ") + *m_tgtcolsnames[dbcolidx]);\r
gridColSetting->SetCellBackgroundColour(dbcolidx, expcolnr, *wxRED);\r
\r
+ m_colsettingiserr[dbcolidx] = true;\r
if (dbcolnr==wxNOT_FOUND || !origcolerr)\r
- //m_colsettingerrnum++;\r
- //else if (!origcolerr)\r
- {\r
- m_colsettingiserr[dbcolidx] = true;\r
m_colsettingerrnum++;\r
- }\r
}\r
else\r
{\r
txtColsSettingLog->AppendText(_("Error"));\r
txtColsSettingLog->AppendText(_(" -- Can't import any rows since setting error: ") + *m_tgtcolsnames[dbcolidx]);\r
gridColSetting->SetCellBackgroundColour(dbcolidx, onemptycolnr, *wxRED);\r
- \r
+\r
+ m_colsettingiserr[dbcolidx] = true;\r
if (dbcolnr==wxNOT_FOUND || !origcolerr)\r
- //m_colsettingerrnum++;\r
- //else if (!origcolerr)\r
- {\r
- m_colsettingiserr[dbcolidx] = true;\r
m_colsettingerrnum++;\r
- }\r
}\r
- else\r
+ if (!m_colsettingiserr[dbcolidx])\r
{\r
gridColSetting->SetCellBackgroundColour(dbcolidx, onemptycolnr, *wxWHITE);\r
if (origcolerr)\r
- {\r
- m_colsettingiserr[dbcolidx] = false;\r
m_colsettingerrnum--;\r
- }\r
}\r
\r
if (impmode==IMPORTMODEINSERT && dbcolnr==wxNOT_FOUND)\r