2Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
794
794
EMPFEHLEN
-
Hallo,
Ich habe gerade angefangen mich mit SQL zu beschäftigen darum die vlt. etwas blöde Frage.
Ich mache einen Menüplan für unser Intranet, in dem sich die Leute ihre Menüs vorbestellen sollen, damit der Koch die Menge abschätzen kann.
Dazu trage ich die Bestelldaten in eine Datenbank ein, damit schon im vorhinein bestellt werden kann.
Dazu meine beiden Befehle:
Code :1
Update Bestellungen set M1 = M1+1 where Datum ='30.10.2009'
Sollte dieser Befehl nicht funktionieren, weil für dieses Datum noch kein Datensatz angelegt ist soll jender Befehl ausgeführt werden:
Code :1
Insert into Bestellungen (Datum, M1, M2, M3) values('30.10.2009', 0, 0, 0)
Im Prinzip funktioniert das auch, aber wenn ich das Datum in der txtDatum.txt ändere wird der erste Befehl zwar fehlerlos ausgeführt, aber ohne Einfluss auf die Datenbank. Kann mir vlt jemand sagen wie ich am besten abfrage ob ein Datensatz mit dem Primärschlüssel (Datum) bereits existiert, falls ja diesen Updaten, falls nein einen erstellen?
Danke
lg
Phil
-
Hallo Phil
Du könntest zB. mit einer SELECT COUNT-Abfrage vorher rausfinden, ob es schon einen Eintrag hat:
Code :1 2
SELECT COUNT(*) FROM Bestellungen WHERE Datum ='30.10.2009';
Das liefert dir die Anzahl Zeilen zurück mit Datum 30.10.09.
Falls das 0 ist -> INSERT
sonst -> Update
Grüsse, Tecla
-
Danke für deine Antwort das hat mir schon geholfen, aber könntest du mir das ein bisschen genuer beschreiben
?
Ich bekomm das irgendwie nicht hin, dass ich die Ausgabe in eine Variable speichere damit ich mit dem gespeicherten Wert die "if" abgrage machen kann.
-
Mit was für einer Programmiersprache arbitest du denn, mit C# oder vb.net?
Hier ein Beispiel in C#, oConnection ist das SqlConnection-Objekt mi der Verbindung zu deiner Datenbank:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
string sCommand = "SELECT COUNT(*) FROM Bestellungen WHERE Datum ='30.10.2009'"; SqlCommand cmd = new SqlCommand(sCommand , oConnection); oConnection.Open(); cmd.ExecuteNonQuery(); Object returnValue = cmd.ExecuteScalar(); oConnection.Close(); if (Convert.ToInt32(returnValue) > 0) { UPDATE } else { INSERT }
-
Ich programmiere mit VB.
Hab mir deinen Code ein bisschen umgeschrieben und funktioniert perfekt, danke!
-
03.11.09 09:18 #6
Das ExecuteNonQuery kannst du in dem Fall weglassen.
Sonst wird die Abfrage zweimal ausgeführt.Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)
-
Danke, das hatte ich bereits raus genommen

jetzt habe ich eine weitere Frage, ist aber ein bisschen offtopic.
Anstelle einer Microsoft sql Compact Datenbank, möchte ich nun eine Mysql Datenbank verwenden. Auf diese verbinde ich mich mit ODBC treiber also System DSN.
Diese Datenbank habe ich bereits auf einem Anderen gerät laufen. Die Compact Datenbank macht mir Probleme, weil ich net 3.5 nicht installieren kann. Dadurch bekomm ich immer die Meldung "Der Provider xxx ist nicht registriert".
Wenn ich auf 3.5 update, zerstöre ich mir eine andere App, für die der Server eigentlich da ist
.
Die SystemDSN ist richtig eingerichtet und funktioniert auch.
Aber ich bekomm den Connectionstring nicht auf die Reihe hat da vlt jemand nen Tipp für mich?
danke
Phil
-
Für MySql?
Code :1
string sConnectionString = "server=myServer; uid=myUser; pwd=myPW; database=myDB;";
oder falls der Port nicht 3306 ist:
Code :1 2 3
string sConnectionString = "server=myServer; Port=3307; uid=myUser; pwd=myPW; database=myDB;"; MySqlConnection oConnection = new MySqlConnection(sConnectionString);
Grüsse, TeclaGeändert von tecla (04.11.09 um 09:20 Uhr) Grund: Tippfehler
-
Perfekt!
Danke, jetzt funktioniert alles wie es soll. Jetzt bau ich nur noch nen kleinen Client für den Koch, damit der die Speisen ändern und die Bestellungen sehen kann.
Danke für die Hilfe





Zitieren
Login





