|
|
|
|
|
- Présentation
- Remarques générales
- Versions nécessaires
- Type et contenu des rubriques
- Type déclaré
- Type NUMERIC ou DECIMAL
- Identifiant automatique
- Unicode
- Sensibilité à la casse
- Sensibilité à l'accentuation et aux caractères spéciaux
- Remarques et spécificités du Connecteur Natif SQLite
- Optimisation des opérations d'écriture multiples
- Batchs de requêtes
- Fonction HCréation
- Blocage des enregistrements
- Blocage "Database is locked"
- Ordres SQL non gérés
Connecteur Natif SQLite : Spécificités et remarques
Disponible uniquement avec ce type de connexion
Les paragraphes suivants présentent les remarques générales et les spécificités du Connecteur Natif SQLite. Versions nécessaires Attention : Cette version du Connecteur Natif SQLite ne fonctionne qu'avec WINDEV et/ou WEBDEV SaaS. Type et contenu des rubriques Type déclaré Dans les bases de données SQLite, les rubriques possèdent un type "déclaré". Cependant, le type de chaque valeur peut être différent de ce type "déclaré". Il est donc possible de stocker n'importe quelle valeur, de n'importe quelle longueur, dans n'importe quel type de rubrique, théoriquement sans perte (exemple : 'toto' peut être stocké dans une rubrique de type entier). Ce fonctionnement n'est pas disponible en HFSQL. Le Connecteur Natif va donc essayer de convertir la valeur lue sur la base dans le type "déclaré" de la rubrique. Contournement : Il est conseillé de forcer le type de la rubrique dans l'analyse à "Texte". Dans ce cas, l'Accès Natif convertira toutes les valeurs dans le type texte, ce qui permettra de lire et d'afficher n'importe quel type de valeur. SQLite stocke les valeurs dans l'un des types suivants : - NULL.
- INTEGER.
- REAL.
- TEXT.
- BLOB.
Pour plus de détails, consultez la documentation de SQLite. Type NUMERIC ou DECIMAL Le fonctionnement interne de SQLite limite la précision des rubriques de type NUMERIC à 15 chiffres car en interne la valeur est généralement stockée sous forme de réel. Identifiant automatique Sur SQLite, chaque enregistrement possède un identifiant unique de type entier 64 bits : le ROWID. Bien que cette rubrique soit "cachée" par défaut par le moteur SQLite, il est toujours possible d'y accéder en utilisant un des noms spéciaux suivants : Les recherches sur l'identifiant "ROWID" sont généralement deux fois plus rapides que les recherches sur n'importe quelle autre clé primaire. Le Connecteur Natif SQLite importe donc systématiquement la colonne "ROWID" afin de privilégier son utilisation pour optimiser les performances. Remarques : - Si un fichier possède une rubrique de type "INTEGER PRIMARY KEY", cette rubrique est un alias de la rubrique "ROWID". Dans ce cas, la rubrique ROWID sera importée sous ce nom.
- Si le nom "ROWID" est déjà utilisé par une autre rubrique du fichier, le Connecteur Natif utilise l'un des autres noms de l'identifiant unique : "_ROWID_" ou "OID".
Unicode Toutes les chaînes de caractères sont UNICODE. Tous les échanges avec le moteur SQLite sont faits en UTF8. Si dans l'analyse, une chaîne de caractères est de type ANSI, le Connecteur Natif effectue automatiquement toutes les conversions nécessaires. Sensibilité à la casse Le Connecteur Natif gère la sensibilité à la casse (option "collate binary" ou "collate nocase") lors de la création ou de l'importation d'un fichier existant. L'insensibilité à la casse est gérée uniquement pour les caractères Latin 1. Sensibilité à l'accentuation et aux caractères spéciaux Toutes les rubriques sont toujours sensibles à l'accentuation et aux caractères spéciaux sur une base de données SQLite. Remarques et spécificités du Connecteur Natif SQLite Optimisation des opérations d'écriture multiples Chaque opération d'écriture (par exemple effectuée par les fonctions HAjoute, HModifie, HSupprime) est effectuée par défaut dans une transaction. Si aucune transaction n'est démarrée, une transaction est débutée automatiquement avant l'opération et terminée automatiquement après l'opération. Conseil : Les performances d'une boucle d'écriture seront meilleures en effectuant toutes les opérations dans la même transaction.
Pour cela, il suffit d'appeler la fonction SQLTransaction avant la boucle puis la fonction SQLTransaction après la boucle. Exemple :
SQLTransaction(sqlDébut, <Connexion>) // Boucle d'écritures // ... SQLTransaction(sqlFin, <Connexion>) Batchs de requêtes Le Connecteur Natif ne gère pas les batchs de requêtes (c'est-à -dire plusieurs requêtes séparées par des ';' exécutées en une seule fois). Il faut exécuter une requête à la fois. Astuce : Il est possible de débuter une transaction, exécuter/parcourir toutes les requêtes une par une, puis de terminer la transaction. Fonction HCréation La fonction HCréation peut échouer (erreur "database table is locked") si les conditions suivantes sont réunies : - le fichier à créer existe déjà .
- un parcours est en cours sur un autre fichier de la même base de données.
Ceci est dû à une limitation de la base de données SQLite. Blocage des enregistrements Les options de blocage (constantes hBlocageEcriture et hBlocageLectureEcriture) utilisables avec les fonctions HFSQL ne sont pas gérées dans cette version. Remarque : Seuls les blocages effectués par les fonctions SQL sont gérés. Le blocage est géré uniquement au niveau du fichier de données par SQLite. Blocage "Database is locked" Lors de lectures concurrentes (réalisées par plusieurs threads ou process) sous Windows, une erreur aléatoire de blocage ("database is locked") provenant de la base de données SQLite peut apparaître. Cette erreur ne provient pas du Connecteur Natif SQLite. Ordres SQL non gérés Le Connecteur Natif SQLite ne supporte pas : - les instructions suivantes :
- INSTR
- PATINDEX
- TOP
- BOTTOM
- LOG
- LN
- EXP
- POWER
- SIGN
- SQRT
- COS
- SIN
- TAN
- MOD
- MID
- RIGHT et FULL OUTER JOIN
- les concaténations de style (par exemple SELECT CLIENT.VILLE + '////' + CLIENT.CODEPOSTAL AS CONCAT1 FROM CLIENT WHERE CLIENT.VILLE + '////' + CLIENT.CODEPOSTAL LIKE 'O%')
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|