Index: trunk/tmdmcreator/src/main.cpp
===================================================================
--- trunk/tmdmcreator/src/main.cpp	(revision 17)
+++ trunk/tmdmcreator/src/main.cpp	(revision 18)
@@ -83,5 +83,5 @@
     bool bVerbose = parser.Found("verbose");
     bool bToolMap = parser.Found("toolmap");
-    if (parser.Found("overwrite")) {
+    if (parser.Found("overwrite") && wxFileExists(parser.GetParam(3))) {
         wxRemoveFile(parser.GetParam(3));
     }
Index: trunk/tmdmcreator/src/tmdmcopier.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmcopier.cpp	(revision 17)
+++ trunk/tmdmcreator/src/tmdmcopier.cpp	(revision 18)
@@ -26,4 +26,5 @@
 
 TmDmCopier::~TmDmCopier() {
+    m_File->Flush();
     wxDELETE(m_File);
 }
@@ -49,4 +50,5 @@
 
 bool TmDmCopier::CopyFrom(const wxString & text) {
+    m_File->SeekEnd();
     if (m_File->Write(text) == false) {
         m_Errors.Add(wxString::Format(_("Writing to: %s failed!"), m_File->GetName()));
Index: trunk/tmdmcreator/src/tmdmcreator.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 17)
+++ trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 18)
@@ -94,15 +94,17 @@
     errorsmsg.Clear();
     // Copy structure
-    TmDmCopier myCopier(m_FileNameOutSQL);
-    if (myCopier.CopyFrom(m_FileNameBaseSQL) == false) {
-        errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameBaseSQL.GetFullPath()));
-        return false;
+    { // needed to destroy the copier before processing layers
+        TmDmCopier myCopier(m_FileNameOutSQL);
+        if (myCopier.CopyFrom(m_FileNameBaseSQL) == false) {
+            errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameBaseSQL.GetFullPath()));
+            return false;
+        }
+        
+        if (myCopier.CopyFrom(m_FileNameUserSQL) == false) {
+            errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameUserSQL.GetFullPath()));
+            return false;
+        }
     }
-    
-    if (myCopier.CopyFrom(m_FileNameUserSQL) == false) {
-        errorsmsg.Add(wxString::Format(_("Copying: %s failed!"), m_FileNameUserSQL.GetFullPath()));
-        return false;
-    }
-    
+
     // Process layers
     TmDmProcessorSimple myLayerProc(m_FileNameUserContent, m_FileNameOutSQL);
@@ -112,5 +114,5 @@
         return false;
     }
-    if (myLayerProc.ProcessBlock(myThematicLayersStart)==false) {
+    if (myLayerProc.ProcessBlock(myThematicLayersStart, _T("thematic_layers"))==false) {
         errorsmsg.Add(wxString::Format(_("Processing 'thematic_layers' failed in %s"), m_FileNameUserContent.GetFullPath()));
         return false;
Index: trunk/tmdmcreator/src/tmdmprocessor.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 17)
+++ trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 18)
@@ -61,7 +61,7 @@
 
 
-bool TmDmProcessorSimple::ProcessBlock(int blockstart) {
-    wxString mySQLCols = wxEmptyString;
-    wxString mySQLTxt = wxEmptyString;
+bool TmDmProcessorSimple::ProcessBlock(int blockstart, const wxString & tablename) {
+    wxArrayString mySQLCols;
+    TmDmCopier myCopier(m_FileDst);
     
     wxFileInputStream input(m_FileSrc.GetFullPath());
@@ -69,4 +69,5 @@
     long myLineIndex = 0;
     while(input.IsOk() && !input.Eof() ){
+        wxString myRow = text.ReadLine();
         if (myLineIndex <= blockstart) {
             myLineIndex++;
@@ -74,17 +75,38 @@
         }
         
-        wxString myRow = text.ReadLine();
+        if (myLineIndex == blockstart+1) {
+            mySQLCols = wxStringTokenize(myRow, _T("\t"), wxTOKEN_RET_EMPTY);
+            myLineIndex++;
+            continue;
+        }
         
-        // HERE !!! 
+        wxArrayString myValues = wxStringTokenize(myRow, _T("\t"), wxTOKEN_RET_EMPTY_ALL);
+        bool bEmpty = true;
+        for (unsigned int i = 0; i< myValues.GetCount(); i++) {
+            if (myValues[i] != wxEmptyString) {
+                bEmpty = false;
+                break;
+            }
+        }
+        if (bEmpty == true) {
+            // ok empty line found
+            return true;
+        }
         
-        
-        
+        // write insert sentence
+        wxString myInsert = wxString::Format(_T("INSERT INTO `%s` ("), tablename);
+        for (unsigned int i = 0; i< mySQLCols.GetCount(); i++) {
+            myInsert.Append(wxString::Format(_T("%s,"), mySQLCols.Item(i)));
+        }
+        myInsert.RemoveLast();
+        myInsert.Append(_T(") VALUES ("));
+        for (unsigned int i = 0; i< mySQLCols.GetCount(); i++) {
+            myInsert.Append(wxString::Format(_T("\"%s\","), myValues.Item(i)));
+        }
+        myInsert.RemoveLast();
+        myInsert.Append(_T(");\n"));
+        myCopier.CopyFrom(myInsert);
         myLineIndex++;
     }
-    return wxNOT_FOUND;
-
-    
-    
-    
     return false;
 }
@@ -104,5 +126,5 @@
 }
 
-bool TmDmProcessorAttributs::ProcessBlock(int blockstart) {
+bool TmDmProcessorAttributs::ProcessBlock(int blockstart, const wxString & tablename) {
     return false;
 }
Index: trunk/tmdmcreator/src/tmdmprocessor.h
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.h	(revision 17)
+++ trunk/tmdmcreator/src/tmdmprocessor.h	(revision 18)
@@ -24,4 +24,5 @@
 #include <wx/wfstream.h>
 #include <wx/txtstrm.h>
+#include <wx/tokenzr.h>
 
 
@@ -37,5 +38,5 @@
     
     int FindBlock(const wxString & blockname);
-    virtual bool ProcessBlock(int blockstart) = 0;
+    virtual bool ProcessBlock(int blockstart, const wxString & tablename) = 0;
 };
 
@@ -51,5 +52,5 @@
     virtual ~TmDmProcessorSimple();
     
-    virtual bool ProcessBlock(int blockstart);
+    virtual bool ProcessBlock(int blockstart, const wxString & tablename);
 };
 
@@ -65,5 +66,5 @@
     virtual ~TmDmProcessorAttributs();
     
-    virtual bool ProcessBlock(int blockstart);
+    virtual bool ProcessBlock(int blockstart, const wxString & tablename);
 };
 #endif
