[Résolu] increment autonum personnalisé (pas de 2)

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur: Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.

[Résolu] increment autonum personnalisé (pas de 2)

Messagepar martinbrait » 19 Juin 2017 22:47

Bonjour,
Afin de procéder à divers traitements de mise en page et de réutilisations dans du code,
je cherche à paramétrer l'autoincrément hsql, pour qu'il enchaîne les numérotations
automatique avec un pas de 2 au lieu d'une séquence consécutive par pas de 1.

Bref, je cherche une suite
1
3
5
7
9
11
etc...

J'ai tenté une instruction comme pour access, sans succès :
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "NomTable" ALTER COLUMN NomColonne (counter 1,2)


Est-ce possible ?
Merci et à bientôt !
Dernière édition par martinbrait le 20 Juin 2017 08:53, édité 1 fois.
LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 682
Inscrit le : 09 Avr 2013 09:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: increment autonum personnalisé (pas de 2)

Messagepar Hubert Lambert » 20 Juin 2017 08:14

Bonjour,

La réponse est dans le Guide de l'utilisateur HSQL, généreusement traduit par la communauté de ce forum pour simplifier la vie de chacun...
Cordialement.
AOOo 4.1.2 sur Win7 | LibreOffice 5.x sur divers systèmes Linux
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
PassiOOnné
PassiOOnné
 
Message(s) : 597
Inscrit le : 06 Avr 2016 09:26

Re: increment autonum personnalisé (pas de 2)

Messagepar martinbrait » 20 Juin 2017 08:53

Bonjour Hubert,

Merci pour le lien.

Je transmets donc la réponse, largement inspirée par Jean-François Nifenecker :

Avant toute chose, on rappelle que LA CASSE DE CARACTERE EST SENSITIVE POUR LES NOMS DE TABLES ET NOMS DE CHAMPS !

Champs Autovaleur
Dans Base, appelons le menu Outils > SQL. Dans la fenêtre qui s’ouvre, nous
saisissons une commande SQL comme indiqué ci-dessous.
Ajout d’une fonction Autovaleur à une colonne clef primaire existante
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "Nom_Table" ALTER COLUMN "Nom_Colonne" INTEGER IDENTITY

Exemple
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "T_Clients" ALTER COLUMN "ID" INTEGER IDENTITY


Si la colonne n’existe pas ou n’est pas clef primaire, nous recevons un message d’erreur.

Modification, remise à zéro d'une clef primaire avec fonction Autovaleur à une table :
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "Nom_Table" ADD COLUMN "Nom_Colonne" INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1)


Ajout d'un champ avec clef primaire fonction autovaleur, dans une table :
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "T_Clients" ADD COLUMN "ID" INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1)


Nous veillerons à respecter les guillemets.
Notons qu’il est fréquent de nommer ID (« identifiant ») les colonnes clefs primaires non signifiantes.

Ces commandes mettent la table à jour mais cette mise à jour n’est reflétée dans
Base qu’après avoir choisi Affichage > Actualiser les tables.


on suppose que ma table s'appelle "users", et que mon champ de clef primaire avec autonum s'appelle "id"

Voici des syntaxes TESTEES qui ont fonctionnées pour moi :
Code : Tout sélectionner   AgrandirRéduire
CREATE TABLE "users" ( "id" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 100, INCREMENT BY 1)
Alter table "users" alter column "id" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 2)


la syntaxe simplifiée permet de lancer la commande [restart] sans possibilité toutefois de modifier l'instruction de pas.
Le pas dernièrement mémorisé sera conservé.
Code : Tout sélectionner   AgrandirRéduire
ALTER TABLE "users" ALTER COLUMN "id" RESTART WITH 15000
LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 682
Inscrit le : 09 Avr 2013 09:15
Localisation : T'as pas dit bonjour, merci et à bientot !


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)