tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von tecla
  • 1 Beitrag von tecla
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
794
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Meronax
    Meronax Meronax ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    27
    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
     

  2. #2
    Avatar von tecla
    tecla tecla ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    163
    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
    Meronax bedankt sich. 

  3. #3
    Avatar von Meronax
    Meronax Meronax ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    27
    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.
     

  4. #4
    Avatar von tecla
    tecla tecla ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    163
    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
    }
     

  5. #5
    Avatar von Meronax
    Meronax Meronax ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    27
    Ich programmiere mit VB.

    Hab mir deinen Code ein bisschen umgeschrieben und funktioniert perfekt, danke!
     

  6. #6
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    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)

  7. #7
    Avatar von Meronax
    Meronax Meronax ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    27
    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
     

  8. #8
    Avatar von tecla
    tecla tecla ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    163
    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, Tecla
    Geändert von tecla (04.11.09 um 09:20 Uhr) Grund: Tippfehler
    Meronax bedankt sich. 

  9. #9
    Avatar von Meronax
    Meronax Meronax ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    27
    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