Ich kriege es einfach nicht hin mit diesem Insert into Befehl
-
Silvercreast schrieb:
Ich habe jetzt noch die Kommatas zwischen Km-Stand nachher und Datum der Vermietung und zwischen vorraussichtliche Rückkehr und tatsächliche Rückkehr gesetzt und nun bekomme ich die Fehlermeldung:
Database Error: Datentypen in Kriterienausdruck unverträglich.
Werde jetzt ,mal die anderen Lösungswege ausprobieren
hab ich schon gemacht
-
Silvercreast schrieb:
- alle Datenbankfelder sind wirklich vom Typ TEXT (auch die Datumsfelder usw.)
Nein ich habe Beziehungen zwischen tbl_Vermietung Fahrzeug[Zahl]und der tbl_Fahrzeug und zwischen tbl_Vermietung Benutzer[Zahl] und tbl_Benutzer
Machst du da nen Insert in einen View oder was willst du uns damit sagen?
Database Error: Datentypen in Kriterienausdruck unverträglich.
Sicher, dass der das Datum so versteht?
Ich hätte das jetzt im Verdacht, dass es der Fehler ist.Welches DBMS nutzt du gleich noch?
-
Sorry das ich mich jetzt erst melde aber es ging nicht früher.
Ich arbeite mit einer Access Datenbank und ich habe in dieser Datenbank Beziehungen gemacht. Diese Beziehnungen laufen über den Wert Zahl in der tbl_Vermietung. Jetzt müsste ich es also irgendwie hinbekommen trotz Beziehungen mir in der tbl_Vermietung einen Text Inhalt anzeigen lassen zu können. Aber wie mach ich das???????????? Versteht Ihr das Problem
-
Achso was noch hinzugefügt werden muss die Beziehungen haben den Index Zahl .
-
Willst du jetzt nen Insert machen oder nen View?
Weil ein Insert in zwei Tabellen gleichzeitig geht nicht.
-
Also ich weiss jetzt ehrlich gesagt nicht was du mit dem View meinst?
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_FahrzeugJetzt 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. Ich bin ganz ehrlich und sage das ich nicht weiss ob ich dazu einen Insert Into Befehl benutzen kann, ich kenne mich nicht gut mit SQL aus. Und wie oben erwähnt kann ich dir auch nicht sagen ob ich ein View machen will , ich verstehe nämlich nicht den zusammenhang zwischen View und Datenbank???
-
Oje, da fehlen dir Grundlagen...
Lies mal da ein wenig, das sieht ganz nett aus: http://www.sql-und-xml.de/sql-tutorial/Ein View ist eine Zusammenfassung von mehreren Tabellen, man kann darin aber nicht schreiben.
Insert geht immer nur in eine Tabelle.Ich habe nochmal den Befehl, den du gezeigt hast angeschaut. Kann es sein, dass du dich bei der Reihenfolge vertan hast?
Ansonsten zeig nochmal, wie es gerade aussieht.
-
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 hierSilvercreast 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_FahrzeugJetzt 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_FahrzeugWieso 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_FahrzeugWieso 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.