Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SQLite3] problème à l'insertion

4 réponses
Avatar
unbewusst.sein
j'ai une base, qui vient d'un téléphone mobile, qui a la structure
suivante :
BEGIN TRANSACTION;
CREATE TABLE devicephonebook( UID INTEGER PRIMARY KEY AUTOINCREMENT
,lastName TEXT NOT NULL DEFAULT(''),firstName TEXT NOT NULL
DEFAULT(''), lastChar INTEGER , fullLastName TEXT , ZYFLName TEXT ,
PYFLName TEXT , hasPhoto INTEGER DEFAULT(0) , timeStamp TEXT);
CREATE INDEX nameIndex ON devicephonebook (PYFLName, lastName,
firstName, lastChar, hasPhoto);
CREATE TRIGGER DELETE_EXT_TRIGGER AFTER DELETE ON devicephonebook
BEGIN DELETE FROM extraphonebook WHERE extraphonebook.UID = OLD.UID;
SELECT delete_from_cache(OLD.UID); END;
CREATE TRIGGER INSERT_PBK_TRIGGER AFTER INSERT ON devicephonebook BEGIN
UPDATE devicephonebook SET fullLastName=NEW.lastName||NEW.firstName
,ZYFLName=get_zy_string(NEW.lastName||NEW.firstName)
,PYFLName=get_py_string(NEW.lastName|| NEW.firstName)
,lastChar=get_first_char(NEW.lastName|| NEW.firstName) WHERE
UID=NEW.UID; END;
COMMIT;

quand j'essaie d'insérer une ligne :

INSERT INTO devicephonebook ( lastName, firstName ) VALUES(
'Dupont','Jean' );

SQLite3 me retourne une erreur que je ne pige pas :
SQL logic error or missing database
comme je suis sûr que la base existe (j'en ai fait un dump) ça signifie
qu'il y a dans la base une erreur logique, hors, dans mon téléphone
mobile, elle marche bien (là j'ai récupéré la base sur Mac OS X).

bien sûr, j'ai implémenté les fonctions spécifiques get_zy_string,
get_py_string et get_first_char, elles respectent bien le type.

donc je ne comprends pas ce qui se passe ???

une lumière ?
--
Une Bévue

4 réponses

Avatar
denebet
Une Bévue wrote:


SELECT delete_from_cache(OLD.UID); END;



[...]
UPDATE devicephonebook SET fullLastName=NEW.lastName||NEW.firstName

quand j'essaie d'insérer une ligne :

INSERT INTO devicephonebook ( lastName, firstName ) VALUES(
'Dupont','Jean' );

SQLite3 me retourne une erreur que je ne pige pas :
SQL logic error or missing database



Je ne sais pas si c'est ça, mais avec le driver de qt, après un select,
insert ne marche pas (problème de vérouillage) avec le même message
d'erreur.
A voir...peut-être.
Avatar
unbewusst.sein
denebet wrote:


Je ne sais pas si c'est ça, mais avec le driver de qt, après un select,
insert ne marche pas (problème de vérouillage) avec le même message
d'erreur.



OK, merci beaucoup, c'est curieux par ce que cette base est le dump
d'une base qui marche sur mon phone mobile (e2831) la seule chose que
j'ai faite est de la "downloader" sur Mac OS X...
--
Une Bévue
Avatar
Miko
à tout hasard, essayez de créer la table sans trigger, puis de tenter un
insert.
si ça fonctionne, l'erreur est dans le trigger, et je suppose, dans la/les
fonctions...

Miko
Avatar
unbewusst.sein
Miko wrote:

à tout hasard, essayez de créer la table sans trigger, puis de tenter un
insert.



oui, merci, ça j'ai fait c'est OK !

si ça fonctionne, l'erreur est dans le trigger, et je suppose, dans la/les
fonctions...



je ne connais pas bien ce que sont censées retourner les fonctions,
excepté le type.
mon implémentation des fonctions retourne le bon type mais je dois faire
du reverse engeenering pour savoir ce qu'elles retournent excatement.

je suis à peu près sûr que les triggers sont bons car cette base vient
du dump de la base de mon gsm (e2831 puce Texas Instrument Processor:
OMAP1510 ARM Core: ARM925) qui elle, donc sur le gsm, marche très bien.

mais sur MacOS X avec SQLite 3 ça marche pô, sans doute mes fonctions à
vérifier...

j'ai trouvé un "workaround" je traîte le dump de la base comme un
fichier texte et j'ajoute/modifie/retranche ce qu'il faut, je mets ça
sur le gsm et ça roule...

perso, plutôt, qu'un problème dû à mes fonctions, je pense que c'est le
bridge SQLite <=> Ruby qui a un problème, ce que récuse le dev du dit
bridge...

--
Une Bévue