2016-06-24 9 views
1
nicht aktualisieren

Hier ist meine Funktion, in der ich versuche, ein Feld count in meiner Tabelle zu aktualisieren. Aber es aktualisiert den Wert nicht. Abfrage ist 100% gut, wie ich es bereits in der externen Datenbank-Software versucht habe. Kann ich falsche Funktion verwenden, um meine Aussage auszuführen?Kann ein Feld in der Datenbank FMDB mit SWIFT

func updateLocalCount(var localCounter: Int) 
    { 
     let contactDB = FMDatabase(path: databasePath as String) 
     if contactDB.open() 
     { 
      let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'" 
      let results:FMResultSet? = contactDB.executeQuery(querySQL, 
       withArgumentsInArray: nil) 
      print(querySQL) 
      contactDB.close() 
      print("local count \(localCounter)") 
     } 
     else 
     { 
      print("Error: \(contactDB.lastErrorMessage())") 
     } 
    } 
+0

den Aktualisierungsabfragecode ausführen? – iMHitesh

+0

Wie lautet Ihre letzte Abfrage? – iMHitesh

+0

In Ihrem Code wo ist 'myTitle'? –

Antwort

2

sollten Sie executeUpdate, nicht executeQuery für Update-Abfragen verwenden. Wenn Sie executeQuery aufrufen (und nie next aufrufen), haben Sie einfach eine Abfrage vorbereitet, aber nie ausgeführt.

So könnte es wie folgt aussehen:

func updateLocalCount(counter: Int, title: String) { 
    let contactDB = FMDatabase(path: databasePath as String) 
    if contactDB.open() { 
     defer { contactDB.close() } 
     do { 
      try contactDB.executeUpdate("UPDATE Darood SET count=? WHERE title=?", values: [counter, title]) 
     } catch { 
      print(error) 
     } 
    } else { 
     print("Error: \(contactDB.lastErrorMessage())") 
    } 
} 

In einem nicht verwandten Beobachtung, Sie feststellen, dass werde, oben, ich verwendet, um die ? Platzhalter in der SQL, nicht SQL Aufbau Zeichenfolge mit Interpolation. Sie öffnen sich für eine ganze Reihe möglicher Probleme, wenn Sie keine Platzhalter verwenden.

+0

Vielen Dank @Rob! Ich wünschte, ich könnte Ihnen 1000 Stimmen geben :) –

+0

Wie kann ich ersetzen Funktion für Update-Abfrage verwenden ......... versuchen, contactDB.executeUpdate ("UPDATE Erinnerung SET group_id = ersetzen (group_id, '?' ,?) ", withArgumentsInArray: [" 6 "," '' "]) – kalpesh

+0

Entfernen Sie einfach die Anführungszeichen um die'? '- Platzhalter:' replace (group_id,?,?) ' – Rob

0

Ich bin sicher, dass Sie myTitle als Optionswert verwenden, wenn es optional ist versuchen, diese

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle!)'" 

OR myTitle Pflichtfeld machen und leer ("") als Standardwert zuweisen. und dann

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'" 
+0

Ich habe bereits MyTitle als Pflichtfeld und zuweisen ("") zu initialisieren, weil MyTitle später gesetzt wird, bevor diese Funktion ausgeführt wird. Und deshalb benutzte ich lassen Sie querySQL = "UPDATE Darood SET count = '\ (localCounter)" WHERE title =' \ (myTitle) '" –

+0

Können Sie bitte aktualisieren Sie die Ausgabe, die Sie erhalten, indem Sie die Abfrage –

+1

Rob die richtige Lösung, Problem war in der Methode. Wie auch immer, danke, dass du dir Zeit genommen hast und in mein Problem geschaut hast :) –

Verwandte Themen