Il semble que les contraintes de clés étrangères soient prises en charge depuis la version 3.6.x en SQLite. La version de SQLite sur iOS5.0 est 3.7.7 (trouvée dans SQLite3.h).
Mais lorsque j'essaie d'insérer une ligne dans une table qui a une contrainte, ma ligne est correctement insérée même si la clé étrangère correspondante. n'est pas existant. Je n'ai aucune erreur. P>
faire la même instruction insertion à l'aide des applications telles que Navicat me donne une "erreur de violation de contrainte" p>
Savez-vous si les clés étrangères sont prises en charge sur iOS 5? p>
Voici le schéma de base de données: p> vraiment simple, n'est-ce pas? p> Merci
Emmanuel p> p>
4 Réponses :
Les clés étrangères sont désactivées par défaut. Vous devez leur permettre séparément pour chaque connexion. Le réglage n'est pas "collant". Vous devez le faire à chaque fois que vous vous connectez à une base de données SQLITE.
PRAGMA foreign_keys = ON;
C'est génial mais comment puis-je faire ça? Est-ce que je viens d'exécuter ceci au db? Comment utiliser ce pragma étrangère_keys = sur code> ligne de code?
@Daniel: Oui, vous exécutez cela comme s'il s'agissait d'une déclaration SQL. Détails sur l'interface C SQLite
J'ai enfin trouvé la solution ... et Catcall vous aviez raison.
Par défaut, la base de données SQLite est ouverte avec l'option Touches étrangères désactivées, même si les tables ont été construites avec des contraintes de clés étrangères! p>
Faites donc simplement cette demande simple: p> juste après l'ouverture de la base de données, et à l'extérieur d'une transaction (si vous utilisez la fonctionnalité de la FMDatabase et des transactions) P > J'espère que cela aidera quelqu'un d'autre. P> Emmanuel P> P>
Voici comment je le fais en utilisant FMDB code>:
C'est sur le doc: sqlite doc
et lorsque vous ouvrez la connexion: P>
[database executeUpdate:@"PRAGMA foreign_keys=ON"];
Pouvez-vous publier le code où vous insérez dans la table?
Bonjour, j'utilise Fmdatabase, le code est vraiment simple: [DB ExecuteUpdate: @ "Insérez dans la piste (piste de suivi, suivi de la piste (?,?)", @ "Nouvelle piste", [Numéro de Numbringwithint: i]]
Bizarre ... J'ai exactement le même scénario que vous ... (Navicat, iOS, FMDB). Même problème. Dois tellement aimer.