Database

Diskussionen zu Tutorials, Änderungs- und Erweiterungswünsche
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Database

Beitrag von Bebu » Mo Dez 28, 2009 2:19 pm

Also meine Klasse ist in den letzten Tagen dann doch wieder etwas zusammengeschrumpft, teilweise waren die Funktionen unnötig oft überladen und damit zu kompliziert zu handhaben. Aber es ist trotzdem noch eine ganze Menge Code übrig geblieben ;)
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Database

Beitrag von Bebu » Do Jan 14, 2010 2:13 pm

Ich habe mal eine Frage speziell an Kerli: Ich bin grade noch dabei, die Referenzseite für deine Klasse fertig zu machen und bin dabei auf etwas gestoßen, was mir seltsam vorkommt. In dieser Funktion:

Code: Alles auswählen

  void deleteFrom( const std::string& table,
                     const Row& checks,
                     const std::string& id_col )
    {
      Result values = select(table, checks);
 
      for( Result::const_iterator row = values.begin();
          row != values.end();
          ++row )
      {
        query(   "DELETE FROM " + table
               + " WHERE `" + id_col + "`='" + row->at(id_col) + "'" );
      }
    }
Wozu dient der Aufruf der Select Funktion? Ich habe gerade etwas herumprobiert und in SQLite werden mit einem einzigen Aufruf der Delete Funktion alle Werte aus der Tabelle gelöscht, die die where Bedingung erfüllen. Warum rufst du die Funktion in einer Schleife auf? Ist das ein Fehler, oder habe ich was falsch verstanden?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Database

Beitrag von Kerli » Do Jan 14, 2010 3:09 pm

Bebu hat geschrieben:und bin dabei auf etwas gestoßen, was mir seltsam vorkommt.
Stimmt eigentlich. Jetzt wo du mir das sagst erscheint es mir auch etwas seltsam. Frag mich jetzt aber bitte nicht warum ich das damals so gemacht habe :) Vielleicht wollte ich mir einfach ersparen die Query noch einmal so wie in select zusammen zu bauen. Ein delete direkt mit der richtigen where-clause wäre natürlich besser und würde vor allem auch das mit der id-Spalte überflüssig machen. Am Besten wäre es wahrscheinlich überhaupt eine private Memberfunktion buildWhereClause oder so zu machen da das ja doch an mehreren Stellen gebraucht wird.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Database

Beitrag von Bebu » Do Jan 14, 2010 6:30 pm

Kerli hat geschrieben: Am Besten wäre es wahrscheinlich überhaupt eine private Memberfunktion buildWhereClause oder so zu machen da das ja doch an mehreren Stellen gebraucht wird.
Da gibt es natürlich wieder ein anderes Problem, schließlich sind in der where_Bedingung sechs verschiedene Operatoren erlaubt. Da ist man mit einem einfachen String dann doch wieder flexibler. Ich hatte das schon mal in meiner Wrapperklasse eingebaut, dann aber wieder gelöscht, weil es mir zu umständlich war.

Aber wenn du willst, korrigiere ich die Funktion im Wiki, obwohl es ja eigentlich dein Baby ist ;)
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Antworten