Bonjour,

J'ai un soucis avec un script Perl pour activer les clefs étrangères.
Le script s'exécute sans erreur. Normalement il doit s'arreter car erreur de contrainte clef etrangère.

Mais, lorsque je lance les deux tests (voir le fichier perl) sur une console sqlite, j'obtient bien les deux erreurs
Je suis sous windows XP
activePerl : 5.8.0
SQlite : 3.7.3

Je ne sais pas comment débugguer ce problème

Merci d'avance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#!perl -w
use strict;
use DBI;
 
my $dbfile="test.db";
my $dsn = "dbi:SQLite:dbname=$dbfile";
my $username = "";
my $password = "";
my %attr = ( RaiseError => 1, AutoCommit => 0 );
my $dbh = DBI->connect($dsn, $username, $password,\%attr ) ;
# FK
$dbh->do("pragma foreign_keys=ON;");
#artist
$dbh->do("DROP TABLE IF EXISTS artist");
$dbh->do("DROP TABLE IF EXISTS track");
$dbh->do("CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
)");
$dbh->do("INSERT INTO artist VALUES(1, 'Dean Martin')");
$dbh->do("INSERT INTO artist VALUES(2, 'Frank Sinatra')");
#track
$dbh->do("CREATE TABLE track(
  trackid     INTEGER PRIMARY KEY, 
  trackname   TEXT, 
  artist INTEGER NOT NULL,
  FOREIGN KEY(artist) REFERENCES artist(artistid)
)");
$dbh->do("INSERT INTO track VALUES(1, 'That''s Amore', 1 )");
$dbh->do("INSERT INTO track VALUES(2, 'Christmas Blues', 1 )");
$dbh->do("INSERT INTO track VALUES(3, 'My Way', 2 )");
 
# TEST 1 
$dbh->do("INSERT INTO track VALUES(14, 'Mr. Bojangles', 3)");
$dbh->do("DELETE FROM artist WHERE artistid=2");
 
$dbh->commit;
$dbh->disconnect;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
sqlite> pragma foreign_keys=ON;
sqlite> INSERT INTO track VALUES(14, 'Mr. Bojangles', 3);
Error: foreign key constraint failed
sqlite> DELETE FROM artist WHERE artistid=2;
Error: foreign key constraint failed