#include "stdafx.h"
#include "MySQLConnector.h" 
#include <string>

#include <sstream> 
#include <iostream>
#include <fstream>

/*
 #define DBHOST "localhost" 
 #define USER "root"
 #define PASSWORD ""
 #define DATABASE "ecopay" 
 */

//#define DBHOST "tcp://160.45.41.29:3306"
//#define USER "sokobio"
//#define PASSWORD "wee6Jees"
//#define DATABASE "sokobio_leipzig" 
/*
 #define DBHOST "casper-db.imp.fu-berlin.de"
 #define USER "casper_user"
 #define PASSWORD "J3VesZXaMvRxT76U"
 #define DATABASE "casper_sokobio" 
 #define NUMOFFSET 100
 #define COLNAME 200
 */
using namespace std;
using namespace sql;

/**
 Stellt eine Verbindung mit der Datenbank her.
 */
MySQLConnector::MySQLConnector()
{ //string uri, string user, string passwort,string database,CDC* pDC

    HOCHLAND_FILTER = 1;
    WALD_FILTER = 2;
    //ENTWAESSERT_FILTER = 3;
    SIELDUNG_FILTER = 4;
    GRUENLANDZAHL_FILTER = 5;
    KOSTEN_FILTER = 6;
    QUALITAET_FILTER = 7;
    ART_FILTER = 8;
    GEWINN_FILTER = 9;
    BEARBEITUNG_FILTER = 10;
    GRUENLAND_FILTER = 11;

    // Position der Legende:
    XLegende = 1000;
    YLegende = 450;
    XLegende2 = 750;
    YLegende2 = 450;
    try
    {
        Driver *driver;
        //Connection *connect;
        driver = get_driver_instance();

        ifstream dbConfigFile( "db_config.txt");
        bool success = true;
        if( dbConfigFile.is_open())
        {
            if( !dbConfigFile.eof())
                getline( dbConfigFile, DBHOST);
            else
                success = false;
            if( !dbConfigFile.eof())
                getline( dbConfigFile, USER);
            else
                success = false;
            if( !dbConfigFile.eof())
                getline( dbConfigFile, PASSWORD);
            else
                success = false;
            if( !dbConfigFile.eof())
                getline( dbConfigFile, DATABASE);
            else
                success = false;
            dbConfigFile.close();
        } else
            success = false;

        if( !success)
        {
            AfxMessageBox(
                    "Das Programm wird beendet.\n"
                            "Stellen Sie sicher, dass die Datei db_config.txt vorhanden ist \n"
                            "und die korrekten Informationen enthält.\n"
                            "Starten Sie das Programm anschließend neu.", MB_OK,
                    0);
            exit( 1);
        }

        /* create a database connection using the Driver */
        con = driver->connect( DBHOST, USER, PASSWORD);
        con->setSchema( DATABASE);

    } catch( sql::SQLException &e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox(
                "Das Programm wird beendet.\n"
                        "Stellen Sie sicher, dass die Datei db_config.txt vorhanden ist \n"
                        "und die korrekten Informationen enthält.\n"
                        "Starten Sie das Programm anschließend neu.", MB_OK, 0);

        exit( 1);
    }
}

MySQLConnector::~MySQLConnector()
{
    con->close();
    delete con;
}

// ###### FILTER: ######

COLORREF MySQLConnector::filterHochland( int hoehenlage)
{
    if( hoehenlage == 0)
    {
        return RGB( 175, 130, 10);
    } else
    {
        return RGB( 255, 185, 15);
    }
}

COLORREF MySQLConnector::filterGruenland( int gruenlandzahl)
{
    if( (gruenlandzahl > 0) && (gruenlandzahl < 20))
    {
        return RGB( 0, 255, 0);
    } else if( (gruenlandzahl > 19) && (gruenlandzahl < 40))
    {
        return RGB( 0, 220, 0);
    } else if( (gruenlandzahl > 39) && (gruenlandzahl < 60))
    {
        return RGB( 0, 180, 0);
    } else
    {
        return RGB( 0, 130, 0);
    }
}

COLORREF MySQLConnector::filterTrocken( double trocken)
{
    if( trocken == 0)
    {
        return RGB( 255, 165, 79);
    } else if( trocken == 0.5)
    {
        return RGB( 238, 154, 73);
    } else
    {
        return RGB( 205, 133, 63);
    }
}

COLORREF MySQLConnector::filterFeucht( double feucht)
{
    if( feucht == 0)
    {
        return RGB( 84, 255, 159);
    } else if( feucht == 0.5)
    {
        return RGB( 67, 205, 128);
    } else
    {
        return RGB( 46, 139, 87);
    }
}

COLORREF MySQLConnector::filterMittel( int mittel)
{
    if( mittel == 0)
    {
        return RGB( 174, 238, 238);
    } else
    {
        return RGB( 150, 205, 205);
    }
}
/*
 COLORREF MySQLConnector::filterEntwaessert(int entwaessert){
 if(entwaessert==0){
 return RGB(0,245,255);
 }else{
 return RGB(0,200,238);
 }
 }
 */
COLORREF MySQLConnector::filterPraedatorendruck( int praedatorendruck)
{
    if( praedatorendruck == 0)
    {
        return RGB( 255, 211, 155);
    } else
    {
        return RGB( 205, 170, 125);
    }
}

COLORREF MySQLConnector::filterWald( int wald)
{
    if( wald == 1)
    {
        return RGB( 69, 139, 0);
    } else
    {
        return RGB( 102, 205, 0);
    }
}

COLORREF MySQLConnector::filterSiedlung( int sieldung)
{
    if( sieldung == 1)
    {
        return RGB( 188, 108, 197);
    } else
    {
        return RGB( 255, 181, 125);
    }
}

COLORREF MySQLConnector::filterWassermarin( int wassermarin)
{
    if( wassermarin == 1)
    {
        return RGB( 23, 54, 93);
    } else
    {
        return RGB( 198, 217, 241);
    }
}

COLORREF MySQLConnector::filterWasserbinnen( int wassernbinnen)
{
    if( wassernbinnen == 1)
    {
        return RGB( 82, 62, 122);
    } else
    {
        return RGB( 171, 130, 255);
    }
}
/*COLORREF MySQLConnector::filterArten(int art){
 ArtenFarben[artenAnzahl];
 int teile = (250/artenAnzahl);
 for(int i=0;i<artenAnzahl;i++){
 if(arten[i]==art){
 int tmp = i*teile;
 ArtenFarben[i] = RGB(tmp,tmp,tmp);
 
 return RGB(tmp,tmp,tmp);
 }
 }
 return RGB(255,255,0);
 }*/

COLORREF MySQLConnector::filterKosten( int kosten)
{
    if( kosten < -250)
    {
        return RGB( 255, 220, 255);
    } else if( kosten >= -250 && kosten < 0)
    {
        return RGB( 255, 170, 255);
    } else if( kosten >= -150 && kosten < 50)
    {
        return RGB( 255, 100, 255);
    } else if( kosten >= -50 && kosten < 100)
    {
        return RGB( 255, 0, 255);
    } else if( kosten >= 50 && kosten < 150)
    {
        return RGB( 190, 0, 190);
    } else if( kosten >= 150 && kosten < 250)
    {
        return RGB( 120, 0, 120);
    } else
    {
        return RGB( 50, 0, 50);
    }
}

COLORREF MySQLConnector::filterBearbeitung( int bearbeitung)
{
    if( bearbeitung == 0)
    {
        return RGB( 000, 100, 0);
    } else if( bearbeitung == 1)
    {
        return RGB( 143, 188, 143);
    } else if( bearbeitung == 2)
    {
        return RGB( 173, 255, 047);
    }

}

COLORREF MySQLConnector::filterQualitaet( double qualitaet)
{
    /* ALTER FILTER :
     if(qualitaet > 0 && qualitaet < 0.2){
     return RGB(100,0,0);
     }else if(qualitaet >= 0.2 && qualitaet < 0.4){
     return RGB(180,0,0);
     }else if(qualitaet >= 0.4 && qualitaet < 0.6){
     return RGB(255,0,0);
     }else if(qualitaet >= 0.6 && qualitaet < 0.8){
     return RGB(255,100,100);
     }else{
     return RGB(255,200,200);
     }*/
    // NEUER Filter: Wieder einbauen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	  if( qualitaet > 0 && qualitaet < 0.2)
    {
        return RGB( 255, 200, 0);
    } else if( qualitaet >= 0.2 && qualitaet < 0.4)
    {
        return RGB( 255, 102, 0);
    } else if( qualitaet >= 0.4 && qualitaet < 0.6)
    {
        return RGB( 255, 0, 50);
    } else if( qualitaet >= 0.6 && qualitaet < 0.8)
    {
        return RGB( 205, 0, 0);
    } else if( qualitaet >= 0.8 && qualitaet <= 1)
    {
        return RGB( 160, 5, 90);
    } else
    {
        return RGB( 255, 255, 255);
    }
/*,0
	//nur für Karin!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     if( qualitaet >= 0.8 && qualitaet < 0.9)
    {
    
        return RGB( 107, 107, 107);
    } else if( qualitaet >= 0.90 && qualitaet <= 1)
    {
        return RGB( 0, 0, 0);
    } else
    {
        return RGB( 255, 255, 255);
    }*/
}

COLORREF MySQLConnector::filterGewinn( int gewinn)
{
    if( gewinn < 0)
    {
        return RGB( 255, 220, 255);
    } else if( gewinn >= 0 && gewinn < 50)
    {
        return RGB( 255, 170, 255);
    } else if( gewinn >= 50 && gewinn < 100)
    {
        return RGB( 255, 100, 255);
    } else if( gewinn >= 100 && gewinn < 150)
    {
        return RGB( 255, 0, 255);
    } else if( gewinn >= 150 && gewinn < 200)
    {
        return RGB( 190, 0, 190);
    } else if( gewinn >= 200 && gewinn < 250)
    {
        return RGB( 120, 0, 120);
    } else if( gewinn >= 250)
    {
        return RGB( 148, 0, 211);
    } else
    {
        return RGB( 50, 0, 50);
    }
}

void MySQLConnector::holeBlandZwi( int& bland)
{
    try
    {
        // zeichnen Legende für KOSTEN
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;

        querystring << "SELECT DISTINCT bundeslandID FROM zwischen_speicher";
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {

            bland = rs->getInt( "bundeslandID");
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
}

COLORREF MySQLConnector::filterGruenlandID( int gruenlandID)
{

    if( gruenlandID == 3 || gruenlandID == 4)
    {
        return RGB( 100, 149, 149);
    } else if( gruenlandID == 5 || gruenlandID == 6)
    {
        return RGB( 000, 000, 255);
    } else if( gruenlandID == 7 || gruenlandID == 8)
    {
        return RGB( 025, 025, 112);
    } else if( gruenlandID == 9 || gruenlandID == 10)
    {
        return RGB( 255, 215, 000);
    } else if( gruenlandID == 11 || gruenlandID == 12)
    {
        return RGB( 238, 221, 130);
    } else if( gruenlandID == 13 || gruenlandID == 14)
    {
        return RGB( 154, 205, 050);
    } else if( gruenlandID == 15 || gruenlandID == 16)
    {
        return RGB( 255, 000, 000);
    } else if( gruenlandID == 17 || gruenlandID == 21)
    {
        return RGB( 255, 165, 000);
    } else if( gruenlandID == 18 || gruenlandID == 22)
    {
        return RGB( 107, 142, 035);
    } else if( gruenlandID == 19 || gruenlandID == 23)
    {
        return RGB( 189, 183, 107);
    } else
    {
        return RGB( 255, 255, 255);
    }
}

/**
 * Holt die Pixel in der Datenbank und gibt diese aus.
 * @param CDC* pDC
 * @param int filterIndex - Gibt den Filter an der Verwendet wird.
 */
void MySQLConnector::holePixel( CDC* pDC, int filterIndex, int bundesland)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;
        //we need to build the right SQL expression as a string:
        //"SELECT  column_name FROM table_name WHERE some_column = 'value'"
        //querystring<<"SELECT "<<column1<<" FROM "<<table<<" WHERE "<<column<<" = "<<"'"<<value<<"'";
        querystring << "SELECT *  FROM `pixel`WHERE bundeslandID = "
                << bundesland;

        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);
        //rs = stmt->executeQuery("SELECT * FROM `pixel` AS pix WHERE 1");
        //rs = stmt->executeQuery("SELECT * FROM `pixel`WHERE bundeslandID");

        // zeichnen die Legende:
        if( filterIndex == HOCHLAND_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende, YLegende, _T( "Höhenlage:"));
            pDC->SetTextColor( RGB( 255, 185, 15));
            pDC->TextOut( XLegende, YLegende + 40, _T( ">500 m üNN"));
            pDC->SetTextColor( RGB( 175, 130, 10));
            pDC->TextOut( XLegende, YLegende + 20, _T( "<500 m üNN"));
        }
        if( filterIndex == WALD_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende, YLegende,
                    _T( "Grünlandpixel an Wald angrenzend:"));
            pDC->SetTextColor( RGB( 102, 205, 0));
            pDC->TextOut( XLegende, YLegende + 20,
                    _T( "nicht an Wald angrenzend"));
            pDC->SetTextColor( RGB( 69, 139, 0));
            pDC->TextOut( XLegende, YLegende + 40, _T( "an Wald angrenzend"));
        }
        if( filterIndex == SIELDUNG_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende, YLegende,
                    _T( "Grünlandpixel an Siedlung angrenzend:"));
            pDC->SetTextColor( RGB( 255, 181, 125));
            pDC->TextOut( XLegende, YLegende + 20,
                    _T( "nicht an Siedlung angrenzend"));
            pDC->SetTextColor( RGB( 188, 108, 197));
            pDC->TextOut( XLegende, YLegende + 40,
                    _T( "an Siedlung angrenzend"));
        }
        /*
         if(filterIndex == ENTWAESSERT_FILTER){
         pDC->SetTextColor(RGB(0, 0, 0));
         pDC->TextOut(XLegende, YLegende, _T("Entwässert:"));
         pDC->SetTextColor(RGB(0,245,255));
         pDC->TextOut(XLegende, YLegende+20, _T("nein"));
         pDC->SetTextColor(RGB(0,200,238));
         pDC->TextOut(XLegende, YLegende+40, _T("ja"));
         }*/
        if( filterIndex == GRUENLANDZAHL_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende, YLegende, _T( "Grünlandzahl:"));
            pDC->SetTextColor( RGB( 0, 255, 0));
            pDC->TextOut( XLegende, YLegende + 20, _T( "9-19"));
            pDC->SetTextColor( RGB( 0, 220, 0));
            pDC->TextOut( XLegende, YLegende + 40, _T( "20-39"));
            pDC->SetTextColor( RGB( 0, 180, 0));
            pDC->TextOut( XLegende, YLegende + 60, _T( "40-59"));
            pDC->SetTextColor( RGB( 0, 130, 10));
            pDC->TextOut( XLegende, YLegende + 80, _T( ">=60"));
        }
        if( filterIndex == BEARBEITUNG_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende, YLegende, _T( "Grünlandnutzung:"));
            pDC->SetTextColor( RGB( 000, 100, 0));
            pDC->TextOut( XLegende, YLegende + 20, _T( "Wiese"));
            pDC->SetTextColor( RGB( 143, 188, 143));
            pDC->TextOut( XLegende, YLegende + 40, _T( "Weide"));
            pDC->SetTextColor( RGB( 173, 255, 047));
            pDC->TextOut( XLegende, YLegende + 60, _T( "Mähweide"));

        }
        while( rs->next())
        {
            // wenden Filter an
            if( filterIndex == HOCHLAND_FILTER)
            {
                pixelColor = MySQLConnector::filterHochland(
                        rs->getInt( "hoehenlage"));
            }
            if( filterIndex == WALD_FILTER)
            {
                pixelColor = MySQLConnector::filterWald( rs->getInt( "wald"));
            }
            if( filterIndex == SIELDUNG_FILTER)
            {
                pixelColor = MySQLConnector::filterSiedlung(
                        rs->getInt( "siedlung"));
            }
            /*
             if(filterIndex == ENTWAESSERT_FILTER){
             pixelColor = MySQLConnector::filterEntwaessert(rs->getInt("entwaessert"));
             }*/
            if( filterIndex == GRUENLANDZAHL_FILTER)
            {
                pixelColor = MySQLConnector::filterGruenland(
                        rs->getInt( "gruenlandzahl"));
            }
            if( filterIndex == BEARBEITUNG_FILTER)
            {
                pixelColor = MySQLConnector::filterBearbeitung(
                        rs->getInt( "wiese_weide"));
            }

            int x = rs->getInt( "matrix_i");
            int y = rs->getInt( "matrix_j");
            pDC->SetPixel( rs->getInt( "matrix_j"), rs->getInt( "matrix_i"),
                    pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
}

/**
 *	Holt die Ergebnisse aus der Datenbank und zeichnet sie als Layer über das Bisherige.
 *	@param CDC* pCD
 */
void MySQLConnector::holeErgebnisLayer(
        CDC* pDC,
        int filterIndex,
        int konfigurationsString)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für KOSTEN
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        if( filterIndex == GEWINN_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2,
                    _T( "Differenz Zahlung-Kosten:"));
            pDC->SetTextColor( RGB( 255, 220, 255));
            //pDC->TextOut(XLegende2, YLegende2+20, _T("< 0"));
            //pDC->SetTextColor(RGB(255,170,255));
            pDC->TextOut( XLegende2, YLegende2 + 40,
                    _T( "0 - 50  Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 100, 255));
            pDC->TextOut( XLegende2, YLegende2 + 60,
                    _T( "50 - 100 Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 0, 255));
            pDC->TextOut( XLegende2, YLegende2 + 80,
                    _T( "100 - 150 Euro pro ha"));
            pDC->SetTextColor( RGB( 190, 0, 190));
            pDC->TextOut( XLegende2, YLegende2 + 100,
                    _T( "150 - 200 Euro  pro ha"));
            pDC->SetTextColor( RGB( 120, 0, 120));
            pDC->TextOut( XLegende2, YLegende2 + 120,
                    _T( "200 - 250 Euro pro ha"));
        }

        char buffer[ 33];
        itoa( konfigurationsString, buffer, 10);
        string query =
                "SELECT DISTINCT erg.konfigurationID, pix.*, quali.*,erg.* FROM `pixel` AS pix, `ergebnis` AS erg, `qualitaet` AS quali WHERE pix.pixelID = erg.pixelID AND quali.pixelID = erg.pixelID AND quali.pixelID = pix.pixelID AND erg.konfigurationID =";
        query.append( buffer);
        rs = stmt->executeQuery( query);

        while( rs->next())
        {

            if( filterIndex == GEWINN_FILTER)
            {
                pixelColor = MySQLConnector::filterGewinn(
                        rs->getInt( "gewinn"));
            }
            int x = rs->getInt( "matrix_i");
            int y = rs->getInt( "matrix_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
}
/**
 *Hole den Gewinn aus der zwischen Ablage in der Datenbank
 *
 */
void MySQLConnector::holeGewinnLayer(
        CDC* pDC,
        int filterIndex,
        CString konfigurationsString,
        int massnahmenID)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für KOSTEN
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;
        if( filterIndex == GEWINN_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2,
                    _T( "Differenz Zahlung-Kosten:"));
            pDC->SetTextColor( RGB( 255, 220, 255));
            //pDC->TextOut(XLegende2, YLegende2+20, _T("< 0"));
            //pDC->SetTextColor(RGB(255,170,255));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "0 - 50 Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 100, 255));
            pDC->TextOut( XLegende2, YLegende2 + 60,
                    _T( "50 - 100  Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 0, 255));
            pDC->TextOut( XLegende2, YLegende2 + 80,
                    _T( "100 - 150  Euro pro ha"));
            pDC->SetTextColor( RGB( 190, 0, 190));
            pDC->TextOut( XLegende2, YLegende2 + 100,
                    _T( "150 - 200 Euro pro ha"));
            pDC->SetTextColor( RGB( 120, 0, 120));
            pDC->TextOut( XLegende2, YLegende2 + 120,
                    _T( "200 - 250 Euro pro ha"));
        }

        querystring << "SELECT * FROM zwischen_speicher WHERE art_name = "
                << "'" << konfigurationsString << "'" << "AND massnahmenID = "
                << massnahmenID;
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {

            if( filterIndex == GEWINN_FILTER)
            {
                pixelColor = MySQLConnector::filterKosten(
                        rs->getInt( "gewinn"));
            }
            int x = rs->getInt( "pixel_i");
            int y = rs->getInt( "pixel_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
}

void MySQLConnector::holeGewinnLayer(
        CDC* pDC,
        int filterIndex,
        CString konfigurationsString)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für KOSTEN
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;
        if( filterIndex == GEWINN_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2,
                    _T( "Differenz Zahlung-Kosten:"));
            pDC->SetTextColor( RGB( 255, 220, 255));
            //pDC->TextOut(XLegende2, YLegende2+20, _T("< 0"));
            //pDC->SetTextColor(RGB(255,170,255));
            pDC->TextOut( XLegende2, YLegende2 + 40,
                    _T( "0 - 50  Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 100, 255));
            pDC->TextOut( XLegende2, YLegende2 + 60,
                    _T( "50 - 100  Euro pro ha"));
            pDC->SetTextColor( RGB( 255, 0, 255));
            pDC->TextOut( XLegende2, YLegende2 + 80,
                    _T( "100 - 150  Euro pro ha"));
            pDC->SetTextColor( RGB( 190, 0, 190));
            pDC->TextOut( XLegende2, YLegende2 + 100,
                    _T( "150 - 200  Euro pro ha"));
            pDC->SetTextColor( RGB( 120, 0, 120));
            pDC->TextOut( XLegende2, YLegende2 + 120,
                    _T( "200 - 250  Euro pro ha"));
        }

        querystring << "SELECT * FROM zwischen_speicher WHERE art_name = "
                << "'" << konfigurationsString << "'";
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {

            if( filterIndex == GEWINN_FILTER)
            {
                pixelColor = MySQLConnector::filterKosten(
                        rs->getInt( "gewinn"));
            }
            int x = rs->getInt( "pixel_i");
            int y = rs->getInt( "pixel_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
}

/**
 *	Holt die die Arten aus der Datenbank und zeichnet sie über die restlichen Layer.
 *	@param CDC* pCD
 */
void MySQLConnector::holeArtenLayer(
        CDC* pDC,
        int filterIndex,
        int konfigurationsInt,
        int konfIndex,
        int artenIndexX)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für Qualität
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        if( filterIndex == QUALITAET_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Qualität:"));
            pDC->SetTextColor( RGB( 255, 200, 0));
            pDC->TextOut( XLegende2, YLegende2 + 20, _T( "0% - 20%"));
            pDC->SetTextColor( RGB( 255, 102, 0));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "20% - 40%"));
            pDC->SetTextColor( RGB( 255, 0, 50));
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "40% - 60%"));
            pDC->SetTextColor( RGB( 205, 0, 0));
            pDC->TextOut( XLegende2, YLegende2 + 80, _T( "60% - 80%"));
            pDC->SetTextColor( RGB( 160, 5, 90));
            pDC->TextOut( XLegende2, YLegende2 + 100, _T( "80% - 100%"));

        }
		

        // setzen query zusammen:
        string query =
                "SELECT DISTINCT erg.konfigurationID, pix.*, quali.*,erg.* FROM `pixel` AS pix, `ergebnis` AS erg, `qualitaet` AS quali WHERE pix.pixelID = erg.pixelID AND quali.pixelID = erg.pixelID AND quali.pixelID = pix.pixelID AND erg.konfigurationID =";
        char bufferKonfID[ 33];
        itoa( konfigurationsInt, bufferKonfID, 10);
        char bufferArtenID[ 33];
        itoa( arten[ konfIndex][ artenIndexX], bufferArtenID, 10);
        query.append( bufferKonfID);
        query.append( " AND quali.artID=");
        query.append( bufferArtenID);

        rs = stmt->executeQuery( query);
        while( rs->next())
        {

            if( filterIndex == QUALITAET_FILTER)
            {
                pixelColor = MySQLConnector::filterQualitaet(
                        rs->getDouble( "qualitaet"));
            }

            if( filterIndex == ART_FILTER)
            {
                pixelColor = RGB( 0, 0, 0);
            }
            int x = rs->getInt( "matrix_i");
            int y = rs->getInt( "matrix_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
    pDC->SetTextColor( RGB( 0, 0, 0));
    pDC->TextOut( 10, 10, (LPCTSTR) ArtenNamen[ konfIndex][ artenIndexX]);
}
//holt die Qualitaet fuer die Art aus dem Zwischenspeicher

void MySQLConnector::holeArtenQualitaetLayer(
        CDC* pDC,
        int filterIndex,
        CString konfigurationsstring,
        int massnahmenID)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für Qualität
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;

        if( filterIndex == QUALITAET_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Qualität:"));
            pDC->SetTextColor( RGB( 255, 200, 0));
            pDC->TextOut( XLegende2, YLegende2 + 20, _T( "0% - 20%"));
            pDC->SetTextColor( RGB( 255, 102, 0));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "20% - 40%"));
            pDC->SetTextColor( RGB( 255, 0, 50));
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "40% - 60%"));
            pDC->SetTextColor( RGB( 205, 0, 0));
            pDC->TextOut( XLegende2, YLegende2 + 80, _T( "60% - 80%"));
            pDC->SetTextColor( RGB( 160, 5, 90));
            pDC->TextOut( XLegende2, YLegende2 + 100, _T( "80% - 100%"));

        }
		/*if( filterIndex == QUALITAET_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Qualität:"));
            pDC->SetTextColor( RGB( 107, 107, 107));
            
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "90% - 95%"));
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2 + 80, _T( "90% - 100%"));
           

        }*/

        if( filterIndex == GRUENLAND_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Grünlandtypauswahl:"));
            pDC->SetTextColor( RGB( 100, 149, 149));
            pDC->TextOut( XLegende2, YLegende2 + 20,
                    _T( "Brenndolden-Auenwiesen"));
            pDC->SetTextColor( RGB( 000, 000, 255));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "Pfeifengraswiesen"));
            pDC->SetTextColor( RGB( 025, 025, 112));
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "Feuchtwiesen"));
            pDC->SetTextColor( RGB( 255, 215, 000));
            pDC->TextOut( XLegende2, YLegende2 + 80,
                    _T( "Flachland-Maehwiesen"));
            pDC->SetTextColor( RGB( 238, 221, 130));
            pDC->TextOut( XLegende2, YLegende2 + 100, _T( "Berg-Maehwiesen"));
            pDC->SetTextColor( RGB( 154, 205, 050));
            pDC->TextOut( XLegende2, YLegende2 + 120,
                    _T( "Artenreiche-Borstgrasrasen"));
            pDC->SetTextColor( RGB( 255, 000, 000));
            pDC->TextOut( XLegende2, YLegende2 + 140, _T( "Kalk-Trockenrasen"));
            pDC->SetTextColor( RGB( 255, 165, 000));
            pDC->TextOut( XLegende2, YLegende2 + 160,
                    _T( "Vielschnittwiesen/Maehweiden"));
            pDC->SetTextColor( RGB( 107, 142, 035));
            pDC->TextOut( XLegende2, YLegende2 + 180,
                    _T( "Weidelgras-Weissklee-Weiden"));
            pDC->SetTextColor( RGB( 189, 183, 107));
            pDC->TextOut( XLegende2, YLegende2 + 200,
                    _T( "Bergweiden-Rotschwingel-Weissklee-Weiden"));
        }

        // setzen query zusammen:
        querystring << "SELECT * FROM zwischen_speicher WHERE art_name = "
                << "'" << konfigurationsstring << "'" << "AND massnahmenID = "
                << massnahmenID;
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {

            if( filterIndex == QUALITAET_FILTER)
            {
                pixelColor = MySQLConnector::filterQualitaet(
                        rs->getDouble( "qualitaet"));
            }
            if( filterIndex == GRUENLAND_FILTER)
            {
                pixelColor = MySQLConnector::filterGruenlandID(
                        rs->getDouble( "gruenlandID"));
            }
            //if(filterIndex == ART_FILTER){
            //	pixelColor = RGB(0, 0, 0);
            //}
            int x = rs->getInt( "pixel_i");
            int y = rs->getInt( "pixel_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
    pDC->SetTextColor( RGB( 0, 0, 0));
    pDC->TextOut( 10, 10, konfigurationsstring);
}

void MySQLConnector::holeArtenQualitaetLayer(
        CDC* pDC,
        int filterIndex,
        CString konfigurationsstring)
{
    COLORREF pixelColor = RGB( 255, 0, 0);

    try
    {
        // zeichnen Legende für Qualität
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring;
        string insertstring;

        if( filterIndex == QUALITAET_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Qualität:"));
            pDC->SetTextColor( RGB( 255, 200, 0));
            pDC->TextOut( XLegende2, YLegende2 + 20, _T( "0% - 20%"));
            pDC->SetTextColor( RGB( 255, 102, 0));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "20% - 40%"));
            pDC->SetTextColor( RGB( 255, 0, 50));
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "40% - 60%"));
            pDC->SetTextColor( RGB( 205, 0, 0));
            pDC->TextOut( XLegende2, YLegende2 + 80, _T( "60% - 80%"));
            pDC->SetTextColor( RGB( 160, 5, 90));
            pDC->TextOut( XLegende2, YLegende2 + 100, _T( "80% - 100%"));

        }
        if( filterIndex == GRUENLAND_FILTER)
        {
            pDC->SetTextColor( RGB( 0, 0, 0));
            pDC->TextOut( XLegende2, YLegende2, _T( "Grünlandtypauswahl:"));
            pDC->SetTextColor( RGB( 100, 149, 149));
            pDC->TextOut( XLegende2, YLegende2 + 20,
                    _T( "Brenndolden-Auenwiesen"));
            pDC->SetTextColor( RGB( 000, 000, 255));
            pDC->TextOut( XLegende2, YLegende2 + 40, _T( "Pfeifengraswiesen"));
            pDC->SetTextColor( RGB( 025, 025, 112));
            pDC->TextOut( XLegende2, YLegende2 + 60, _T( "Feuchtwiesen"));
            pDC->SetTextColor( RGB( 255, 215, 000));
            pDC->TextOut( XLegende2, YLegende2 + 80,
                    _T( "Flachland-Maehwiesen"));
            pDC->SetTextColor( RGB( 238, 221, 130));
            pDC->TextOut( XLegende2, YLegende2 + 100, _T( "Berg-Maehwiesen"));
            pDC->SetTextColor( RGB( 154, 205, 050));
            pDC->TextOut( XLegende2, YLegende2 + 120,
                    _T( "Artenreiche-Borstgrasrasen"));
            pDC->SetTextColor( RGB( 255, 000, 000));
            pDC->TextOut( XLegende2, YLegende2 + 140, _T( "Kalk-Trockenrasen"));
            pDC->SetTextColor( RGB( 255, 165, 000));
            pDC->TextOut( XLegende2, YLegende2 + 160,
                    _T( "Vielschnittwiesen/Maehweiden"));
            pDC->SetTextColor( RGB( 107, 142, 035));
            pDC->TextOut( XLegende2, YLegende2 + 180,
                    _T( "Weidelgras-Weissklee-Weiden"));
            pDC->SetTextColor( RGB( 189, 183, 107));
            pDC->TextOut( XLegende2, YLegende2 + 200,
                    _T( "Bergweiden-Rotschwingel-Weissklee-Weiden"));
        }

        // setzen query zusammen:
        querystring << "SELECT * FROM zwischen_speicher WHERE art_name = "
                << "'" << konfigurationsstring << "'";
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {

            if( filterIndex == QUALITAET_FILTER)
            {
                pixelColor = MySQLConnector::filterQualitaet(
                        rs->getDouble( "qualitaet"));
            }
            if( filterIndex == GRUENLAND_FILTER)
            {
                pixelColor = MySQLConnector::filterGruenlandID(
                        rs->getDouble( "gruenlandID"));
            }
            //if(filterIndex == ART_FILTER){
            //	pixelColor = RGB(0, 0, 0);
            //}
            int x = rs->getInt( "pixel_i");
            int y = rs->getInt( "pixel_j");
            pDC->SetPixel( y, x, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
    pDC->SetTextColor( RGB( 0, 0, 0));
    pDC->TextOut( 10, 10, konfigurationsstring);
}
/**
 * Holt die Arten aus der Datenbank. Dies hilft uns beim füllen der Comboboxen.
 *
 */
void MySQLConnector::holeArten( CDC* pDC, int filterIndex)
{
    COLORREF pixelColor = RGB( 255, 0, 0);
    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        for( int h = 0; h < this->konfigurationenAnzahl; h++)
        {
            string query =
                    "SELECT DISTINCT art.artID,art.name FROM qualitaet as quali, art WHERE art.artID = quali.artID AND konfigurationID =";
            char bufferKonfID[ 33];
            itoa( this->konfigurationen[ h].ID, bufferKonfID, 10);
            query.append( bufferKonfID);
            rs = stmt->executeQuery( query);

            int i = 0;
            artenAnzahl[ h] = 0;
            while( rs->next())
            {
                arten[ h][ i] = rs->getInt( "artID");
                string sqlstring = rs->getString( "name");
                ArtenNamen[ h][ i] = sqlstring.c_str();
                artenAnzahl[ h]++;
                i++;
            }
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}
//holt die Arten aus der Zwischenablage

void MySQLConnector::holeArtenZwi( CDC* pDC)
{
    COLORREF pixelColor = RGB( 255, 0, 0);
    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();

        string query = "SELECT DISTINCT art_name FROM zwischen_speicher WHERE 1";

        rs = stmt->executeQuery( query);

        int i = 0;
        artenanzahl = 0;
        while( rs->next())
        {
            //arten[h][i] = rs->getInt("artID");
            string sqlstring = rs->getString( "art_name");
            artennamen[ i] = sqlstring.c_str();
            artenanzahl++;
            i++;
        }

    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}
void MySQLConnector::holeMassnahmenZwi()
{
    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        rs =
                stmt->executeQuery(
                        "SELECT DISTINCT `massnahmenID` FROM `zwischen_speicher` WHERE 1");
        int i = 0;
        massnahmenanzahl = 0;
        while( rs->next())
        {
            massnahmenfilter[ i] = rs->getInt( "massnahmenID");
            massnahmenanzahl++;
            i++;
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}

/**
 * Holt die Massnahmen die  zu der Konfiguration gehören aus der Datenbank, damit die Massnahme ins Fenster geschrieben werden.
 *
 */
vector< CString> MySQLConnector::holeMassnahmen( int konfigurationsString)
{
    vector < CString > massnahmenString;
    try
    {
        Statement *stmt;
        ResultSet *rs, *rs2;
        stmt = con->createStatement();
        stringstream querystring, returnstring;
        string insertstring;
        querystring << "SELECT  * FROM `konfiguration` WHERE konfigurationID = "
                << konfigurationsString;
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);

        while( rs->next())
        {
            int mID = rs->getInt( "massnahmenID");
            querystring.str( "");
            querystring.clear();
            querystring << "SELECT * FROM massnahmen WHERE massnahmenID = "
                    << mID;
            insertstring = querystring.str();
            rs2 = stmt->executeQuery( insertstring);

            while( rs2->next())
            {
                char ma[ 1000];
                returnstring.str( "");
                returnstring.clear();
                returnstring << rs2->getString( "name") << ", Startpunkt: "
                        << rs2->getInt( "mv1massnahme") << "MV, ";
                if( int a = rs2->getInt( "abstand2massnahme") != 0)
                    returnstring << "Abstand: "
                            << rs2->getInt( "abstand2massnahme") << "MV, ";
                returnstring << "D(" << rs2->getBoolean( "duengung") << "), ";
                double GV = rs2->getDouble( "grossvieheinheit");
                if( (GV != 0) && (GV != 99))
                {
                    returnstring << "GV " << GV << ",  ";
                }
                returnstring << "Zahlung: " << rs->getDouble( "zahlung")
                        << "Euro, Maximale Fläche: "
                        << (rs->getDouble( "flaeche")) * 6.25 << "  ha";

                string result = returnstring.str();
                lstrcpy( ma, result.c_str());
                massnahmenString.push_back( ma);
            }

        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
    return massnahmenString;

}

/**
 * Holt die Massnahm die  aus dem Zwischenspeicher aus der Datenbank, damit die Massnahme ins Fenster geschrieben werden.
 *
 */
CString MySQLConnector::holeMassnahme( int massnahmenID)
{
    CString massnahmenString;
    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring, returnstring;
        string insertstring;
        querystring << "SELECT * FROM massnahmen WHERE massnahmenID = "
                << massnahmenID;
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);
        while( rs->next())
        {
            char ma[ 1000];
            returnstring << rs->getString( "name") << ", Startpunkt: "
                    << rs->getInt( "mv1massnahme") << "MV, ";
            if( int a = rs->getInt( "abstand2massnahme") != 0)
                returnstring << "Abstand: " << rs->getInt( "abstand2massnahme")
                        << "MV, ";
            returnstring << "D(" << rs->getBoolean( "duengung") << "), ";
            double GV = rs->getDouble( "grossvieheinheit");
            if( GV != 0 && GV != 99)
                returnstring << "GV " << GV;

            string result = returnstring.str();
            lstrcpy( ma, result.c_str());
            massnahmenString = ma;
        }

    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }
    return massnahmenString;

}

void MySQLConnector::holeMassnahmenzw(
        vector< CString>& massnahmenString,
        int massID,
        bool einzeln)
{
    try
    {
        Statement *stmt;
        ResultSet *rs, *rs2;
        int mID;
        stmt = con->createStatement();
        stringstream querystring, returnstring;
        string insertstring;
        if( einzeln)
        {
            querystring << "SELECT * FROM massnahmen WHERE massnahmenID = "
                    << massID;
            insertstring = querystring.str();
            rs = stmt->executeQuery( insertstring);
            while( rs->next())
            {
                char ma[ 1000];
                returnstring << rs->getInt( "massnahmenID") << ", "
                        << rs->getString( "name") << ", Startpunkt: "
                        << rs->getInt( "mv1massnahme") << "MV, ";
                if( int a = rs->getInt( "abstand2massnahme") != 0)
                    returnstring << "Abstand: "
                            << rs->getInt( "abstand2massnahme") << "MV, ";
                returnstring << "D(" << rs->getBoolean( "duengung") << "), ";
                double GV = rs->getDouble( "grossvieheinheit");
                if( GV != 0 && GV != 99)
                    returnstring << "GV " << GV;

                string result = returnstring.str();
                lstrcpy( ma, result.c_str());
                massnahmenString.push_back( ma);
            }
        } else
        {

            querystring
                    << "SELECT DISTINCT massnahmenID FROM zwischen_speicher";
            insertstring = querystring.str();
            rs2 = stmt->executeQuery( insertstring);
            while( rs2->next())
            {
                mID = rs2->getInt( "massnahmenID");
                querystring.str( "");
                querystring.clear();
                querystring << "SELECT * FROM massnahmen WHERE massnahmenID = "
                        << mID;
                insertstring = querystring.str();
                rs = stmt->executeQuery( insertstring);
                while( rs->next())
                {
                    char ma[ 1000];
                    returnstring.str( "");
                    returnstring.clear();
                    returnstring << rs->getInt( "massnahmenID") << ", "
                            << rs->getString( "name") << ", Startpunkt: "
                            << rs->getInt( "mv1massnahme") << "MV, ";
                    if( int a = rs->getInt( "abstand2massnahme") != 0)
                        returnstring << "Abstand: "
                                << rs->getInt( "abstand2massnahme") << "MV, ";
                    returnstring << "D(" << rs->getBoolean( "duengung")
                            << "), ";
                    double GV = rs->getDouble( "grossvieheinheit");
                    if( GV != 0 && GV != 99)
                        returnstring << "GV " << GV;

                    string result = returnstring.str();
                    lstrcpy( ma, result.c_str());
                    massnahmenString.push_back( ma);
                }
            }
        }

    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}
/**
 * Holt die Konfigurationen aus der Datenbank, damit wir die Combobox damit füllen und nach Konfigurationen SQL Abfragen gestalten, können.
 *
 */
void MySQLConnector::holeKonfigurationen()
{
    try
    {
        Statement *stmt;
        ResultSet *rs;
        char eintrag[ 1000];
        stmt = con->createStatement();
        rs =
                stmt->executeQuery(
                        "SELECT DISTINCT `konfigurationID` , `konfigname` , `bundeslandID` FROM `konfiguration` WHERE 1");
        int i = 0;
        konfigurationenAnzahl = 0;
        while( rs->next())
        {
            konfig k;
            k.ID = rs->getInt( "konfigurationID");
            string data = rs->getString( "konfigname");
            lstrcpy( eintrag, data.c_str());
            k.name = eintrag;
            k.bundeslandID = rs->getInt( "bundeslandID");
            konfigurationen.push_back( k);
            konfigurationenAnzahl++;
            i++;
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}

/**
 * Holt die Pixel des Umrisses aus der Datenbank und zieht damit eine Linie.
 */
void MySQLConnector::holeUmriss( CDC* pDC, int bundesland)
{
    CPen pen( PS_SOLID, 0, RGB( 0, 0, 0));
    CPen* pOldPen = pDC->SelectObject( &pen);

    COLORREF pixelColor = RGB( 0, 0, 0);

    try
    {
        Statement *stmt;
        ResultSet *rs;
        stmt = con->createStatement();
        stringstream querystring, returnstring;
        string insertstring;
        querystring << "SELECT * FROM `umriss` WHERE bundeslandID = "
                << bundesland << " ORDER BY `umriss`.`id` ASC";
        insertstring = querystring.str();
        rs = stmt->executeQuery( insertstring);
        int x, y;
        while( rs->next())
        {

            x = rs->getInt( "x");
            y = rs->getInt( "y");
            /*
             if(x<900 && y < 900){  
             if(rs->getInt("y")>338){
             y = 338-(rs->getInt("y")-338);
             pDC->LineTo(rs->getInt("x"), 338-(rs->getInt("y")-338));
             }else{
             y = (abs(rs->getInt("y")-338)*2)+rs->getInt("y");
             pDC->LineTo(rs->getInt("x"), (abs(rs->getInt("y")-338)*2)+rs->getInt("y"));
             }
             }*/
            if( x < 900 && y < 900)
            {
                if( y > 338)
                {
                    y = 338 - (y - 338);
                    pDC->LineTo( x, y);
                    //pDC->PtVisible(x, y);
                } else
                {
                    y = (abs( y - 338) * 2) + y;
                    pDC->LineTo( x, y);
                    //pDC->PtVisible(x, y);
                }
            }
            //pDC->SetPixel(x, y, pixelColor);
        }
    } catch( sql::SQLException e)
    {
        int code = e.getErrorCode();
        string error = e.what();
        char er[ 1000];
        lstrcpy( er, error.c_str());
        AfxMessageBox( er, MB_YESNO, 0);
    }

}

/**
 * Schließt die Datenbank Verbindung
 *
 */
void MySQLConnector::closeConnection()
{
    Statement *stmt;

    delete stmt;

}

