Ich kriege es einfach nicht hin mit diesem Insert into Befehl



  • Das ist mein Code zum abspeichern.

    [cpp]std::string CDatabaseAccess::storeClientData( const std::string &messageFromClient )
    {
    	std::vector< std::string > parameters = StringHelper::split( messageFromClient, ';' );
    
    	std::string DataInfo		= parameters[0];
    	std::string userName		= parameters[1];
    	std::string numberPlate		= parameters[2];
    	std::string finish			= parameters[3];
    	std::string actualDate		= parameters[4];
    	std::string likelyReturn	= parameters[5];
    	std::string defects			= "";
    	std::string status			= "";
    	std::string kmStandBefore	= "";
    	std::string kmStandAfter	= "";
    	std::string actualReturn	= "";
    	std::string result;
    
    	CDatabase UserData;
    	CString DB_File = "Fuhrpark";
    //	CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
    	CString SqlString;
    	CString strErgebnis;
    
    	TRY
    	{
    		// Open the database
    		UserData.Open( "Fuhrpark" );
    
    		// Allocate the recordset
    	//	CRecordset recset( &UserData );
    
    		UserData.BeginTrans();	
    
            strErgebnis = 
    			"Insert into tbl_Vermietung "
    			"(Fahrzeug,Benutzer,Fahrtziel,[Km-Stand vorher],[Km-Stand nachher],"
    			"[Datum der Vermietung],[vorraussichtliche Rückkehr],"
    			"[tatsächliche Rückkehr],Mängel,Status) values ";
    
            SqlString.Format( 
    			" ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s') ",
    			numberPlate.c_str(),
    			userName.c_str(),
    			finish.c_str(),
    			kmStandBefore.c_str(),
    			kmStandAfter.c_str(),
    			actualDate.c_str(),
    			likelyReturn.c_str(),
    			actualReturn.c_str(),
    			defects.c_str(),
    			status.c_str());
    
    		strErgebnis += (LPCTSTR)SqlString;
            strErgebnis.Replace("''","NULL");
    		//strErgebnis = CString( "Ergebnis: " ) + strErgebnis;
    
    		TRACE(LPCTSTR(strErgebnis));
    
    		MessageBox( 0, LPCTSTR(strErgebnis), "§", MB_OK );
    
            UserData.ExecuteSQL(strErgebnis); // SQL absenden
            UserData.CommitTrans(); // daten festschreiben
    
    		// Close the database
    		UserData.Close();
    
    		result = "true";
    
    		return result;
    	}
    	CATCH(CDBException, e)
    	{
    			// If a database exception occured, show error msg
    			AfxMessageBox("Database error: "+e->m_strError);
    	}
    
    	END_CATCH;
    
    	result = "false";
    
    	return result; 
    
    }[/cpp]
    

    Ich weiss net ob ich wirklich ein View benutzen kann , wenn man darin doch nichts schreiben kann.



  • Kann das sein das ich mein Primary Key Feld auch noch angeben muss ??



  • Silvercreast schrieb:

    Kann das sein das ich mein Primary Key Feld auch noch angeben muss ??

    Wird es denn automatisch hochgezählt?
    Aber die Fehlermeldung war ja auch was, dass Datentypen unverträglich sind - wenn der PK fehlt, dann sagt der was vonwegen "Feld kann nicht NULL sein" oder so.

    Die Feldreihenfolge sieht korrekt aus.
    Jetzt wäre noch interessant, welche Typen die Spalten in der Datenbank haben.

    Und... müssen Leerzeichen und Umlaute in den Spaltennamen sein? 🙄
    Sowas macht man nicht, das macht nur Ärger.
    Nimm _ statt Leerzeichen und schreib die Umlaute so: ae usw. 🙂



  • estartu schrieb:

    Wird es denn automatisch hochgezählt?

    Wie soll ich das testen wenn ich nichts abspeichern kann??

    Die Feldreihenfolge sieht korrekt aus.
    Jetzt wäre noch interessant, welche Typen die Spalten in der Datenbank haben.

    Das versuche ich dir schon die ganze Zeit zu erzählen 😃
    Die Spalte Benutzer und die Spalte Fahrzeug sind Beziehungen zu anderen Tabellen und haben von daher den Typ Zahl. siehe hier

    Silvercreast schrieb:

    Ich habe 3 Tabellen:

    - tbl_Vermietung ( hat Beziehungen zu Benutzer und Fahrzeug// Spalten: Fahrezug ,
    Benutzer beide müssen zwangsläufig mit Zahl initalisiert werden
    , da ansonsten keine Beziehnung enstehen kann.)
    - tbl_Benutzer
    - tbl_Fahrzeug

    Jetzt muss ich es irgendwie schaffen über den Umweg tbl_Benutzer oder tbl_Fahrzeug meine Beziehungsspalten in tbl_Vermietung mit dem richtigen Datensatz zu füllen.

    Und... müssen Leerzeichen und Umlaute in den Spaltennamen sein? 🙄
    Sowas macht man nicht, das macht nur Ärger.
    Nimm _ statt Leerzeichen und schreib die Umlaute so: ae usw. 🙂

    Erledigt!!



  • Silvercreast schrieb:

    - tbl_Vermietung ( hat Beziehungen zu Benutzer und Fahrzeug// Spalten: Fahrezug, Benutzer beide müssen zwangsläufig mit Zahl initalisiert werden, da ansonsten keine Beziehnung enstehen kann.)
    - tbl_Benutzer
    - tbl_Fahrzeug

    Wieso trägst du dann String-Werte für dieses Spalten ein?

    (ich hab' zwar nur rudimentäre Kenntnisse in SQL, aber Werte in '...' sind afaik Strings)



  • CStoll schrieb:

    Silvercreast schrieb:

    - tbl_Vermietung ( hat Beziehungen zu Benutzer und Fahrzeug// Spalten: Fahrezug, Benutzer beide müssen zwangsläufig mit Zahl initalisiert werden, da ansonsten keine Beziehnung enstehen kann.)
    - tbl_Benutzer
    - tbl_Fahrzeug

    Wieso trägst du dann String-Werte für dieses Spalten ein?

    (ich hab' zwar nur rudimentäre Kenntnisse in SQL, aber Werte in '...' sind afaik Strings)

    Da hat er recht, lass die '' bei Zahlen mal weg.

    Sind die Spalten, wo Datum dran steht auch ein Datum oder Text?



  • Weil ich schlecht eine Zeichenkette in einen integer speichern kann,
    und ich wollte zeigen das ich da einen String abspeichern will.

    Ich glaube aber eine Lösung gefunden zu haben und zwar benötige ich keine Beziheungen , sondern die Join Funktion unter SQL. Sehe ich das richtig, damit müsste das doch gehen oder?

    das Datum steht auch in einem String und die Spalte ist auch Text



  • Silvercreast schrieb:

    Das versuche ich dir schon die ganze Zeit zu erzählen 😃

    Alle anderen versuchen schon die ganze Zeit dir zu erzählen, das du die Anführungsstriche bei Zahlenfeldern in der SQL-Anweisung weg lassen sollst 😃 :

    SqlString.Format( 
                " (%s,%s,'%s','%s','%s','%s','%s','%s','%s','%s') ",...
    

    [edit]
    - streiche Anführungsstriche
    - setze Apostroph(e/s/) ?!?
    [/edit]



  • Silvercreast schrieb:

    Weil ich schlecht eine Zeichenkette in einen integer speichern kann,

    Das mußt du auch gar nicht, SQL parst den übergebenen Befehlsstring selber nochmal und übersetzt eigegebene Zahlen auch als solche.



  • Also muss ich einfach nur die Zeilen Nummer aus der tbl_Benutzer übergeben?? Und SQL sucht sich dann die richtigen Daten raus??



  • Wenn du alles so gemacht hast, wie ich hoffe: Ja! 🙂
    Dafür sind die Beziehungen da.


Anmelden zum Antworten