2009-05-07 4 views
3

J'ai une application C++ qui utilise ADO pour parler à une base de données Oracle. Je suis en train de mettre à jour l'application pour prendre en charge les documents hors ligne. J'ai décidé d'implémenter SQLite pour le côté local.Comment émuler le mécanisme d'édition/mise à jour d'ADO pour SQLite en C++?

J'ai implémenté un wrapper autour des classes ADO qui appellera le code approprié. Cependant, la façon dont ADO ajoute/édite/supprime des lignes est un peu difficile à implémenter pour SQLite.

Pour ADO j'écrire quelque chose comme:

CADODatabase db; 
CADORecordset rs(&db); 
db.Open("connection string"); 
rs.Open("select * from table1 where table1key=123"); 
if (!rs.IsEOF()) 
{ 
    int value; 
    rs.GetFieldValue("field", value); 
    if (value == 456) 
    { 
     rs.Edit(); 
     rs.SetFieldValue("field", 456); 
     rs.Update(); 
    } 
} 
rs.Close(); 
db.Close(); 

Pour cet exemple simple, je me rends compte que je aurais pu vient de publier une mise à jour, mais le code réel est plus complexe considérable.

Comment puis-je obtenir des appels entre les Edit() et Update() pour réellement mettre à jour les données? Ma première pensée est d'avoir la Edit() construire une requête séparée et le Update() l'exécuter réellement, mais je ne suis pas sûr quels champs seront changés ni quelles clés de la table pour limiter une requête de mise à jour.

+0

Peut-être que je manque quelque chose (je sais ADO.NET, mais pas vraiment ADO), mais pourquoi avez-vous besoin d'écrire vos propres emballages? Vous ne pouvez pas utiliser le pilote SQLite ODBC (http://www.ch-werner.de/sqliteodbc/) et un pont ADO-ODBC (http://msdn.microsoft.com/en-us/library/aa227219 (VS.60) .aspx)? –

+0

Puis-je utiliser le pilote ODBC sans rien installer? Je cherche à pouvoir utiliser une clé USB sans avoir à l'installer. –

+0

Avez-vous étudié les wrappers pour C++? http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers Plusieurs notes d'objectifs ADO. –

Répondre

0

"mais je ne suis pas sûr quels champs seront modifiés ni quelles clés de la table pour limiter une requête de mise à jour."

Que diriez-vous simplement de sélectionner ROWID avec le reste des champs, puis de créer une mise à jour basée sur cela?

+0

Oups, un peu tard pour la fête :) –

Questions connexes