[..] Tables pour une caisse
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
[..] Tables pour une caisse
Hello,
je dois faire un petit programme pour la gestion d'une petite caisse d'un troc, mais j'ai de la peine avec les bdds. Bien entendu, j'aimerais utiliser SQLlite. J'avais pensé au ini, mais ça devient trop lourd et trop de fichiers.
Pour cela, j'ai besoin de votre aide.
Voilà ce que j'ai besoin, je dois avoir une table table avec les clients (Nom, prénom et numéro de client) et une avec les articles liés au client (numéro client, prix article, quantité vendue).
Je dois pouvoir rassembler deux tables (2 ou plusieurs caisses), récapitulatif final pour chaque client, somme totale par client et pour la caisse et s'il y a un problème avec un article pouvoir ajouter des remarques, qui peut m'aider?
Merci d'avance pour votre aide
je dois faire un petit programme pour la gestion d'une petite caisse d'un troc, mais j'ai de la peine avec les bdds. Bien entendu, j'aimerais utiliser SQLlite. J'avais pensé au ini, mais ça devient trop lourd et trop de fichiers.
Pour cela, j'ai besoin de votre aide.
Voilà ce que j'ai besoin, je dois avoir une table table avec les clients (Nom, prénom et numéro de client) et une avec les articles liés au client (numéro client, prix article, quantité vendue).
Je dois pouvoir rassembler deux tables (2 ou plusieurs caisses), récapitulatif final pour chaque client, somme totale par client et pour la caisse et s'il y a un problème avec un article pouvoir ajouter des remarques, qui peut m'aider?
Merci d'avance pour votre aide
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Tables pour une caisse
Voici un schéma qui pourrait te convenir :
Tu risques d'avoir besoin d'une extension pour gérer les rechenches texte (nom, prénom) en Unicode. Dis-moi si ça tombe dans ton besoin.
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Tables pour une caisse
Hello,
ça à l'air pas mal, merci. Mais il y a deux ou trois choses.
Dans la table des membres il doit y avoir un numéro de membre, une colonne avec l'information s'il s'est inscrit ou pas (1 ou 0) et s'il fait partie de l'association (1 ou 0).
ça à l'air pas mal, merci. Mais il y a deux ou trois choses.
Dans la table des membres il doit y avoir un numéro de membre, une colonne avec l'information s'il s'est inscrit ou pas (1 ou 0) et s'il fait partie de l'association (1 ou 0).
Dans la table, je dois en aucun cas faire une recherche par nom et prénom, mais uniquement par le numéro de membre.Tu risques d'avoir besoin d'une extension pour gérer les rechenches texte (nom, prénom) en Unicode
C'est quoi cette ligne? Je crois que c'est bien d'avoir un numéro pour la table de la caisse, mais après il faudra que je rassemble toutes les tables ensemble, car les deux caisses travaillent en indépendant et sans aucune liaison. C'est à la fin que je reprends la bdd et que je les rassemble.CONSTRAINT "ckNumCaisse" CHECK(caisse between 0 and 9));
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Tables pour une caisse
Une version modifiée.
Par contre il faut savoir si ça peut fonctionner ainsi, car les clés étrangères ne peuvent bien sûr que référencer des identificateurs présents.
Cela m'amène à t'en demander plus sur ce point : est-ce que les caisses peuvent créer ou modifier des clients ? Si oui, alors des bases distinctes (caisses séparées) vont devoir se synchroniser au final, ce qui implique de mettre un n° de caisse aussi dans la définition client et une méthode de résolution, qui ne sera pas simple (comment distinguer les homonymes toujours possibles et les doublons, etc.).
Oui, le CHECK vérifie qu'on a un n° de caise entre 1 et 9 (j'ai mis ça pour ouvrir la parte à ce type de contrainte, à toi de voir si c'est correct/utile/justifié).
► Afficher le texte
Cela m'amène à t'en demander plus sur ce point : est-ce que les caisses peuvent créer ou modifier des clients ? Si oui, alors des bases distinctes (caisses séparées) vont devoir se synchroniser au final, ce qui implique de mettre un n° de caisse aussi dans la définition client et une méthode de résolution, qui ne sera pas simple (comment distinguer les homonymes toujours possibles et les doublons, etc.).
Oui, le CHECK vérifie qu'on a un n° de caise entre 1 et 9 (j'ai mis ça pour ouvrir la parte à ce type de contrainte, à toi de voir si c'est correct/utile/justifié).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Tables pour une caisse
Hello,
merci pour la version modifiée, dans la table client, il manque le numéro de membre (pas l'id de la table) et c'est Id qui va se retrouver dans la table Articles. Détail, C'est CliMembre.
La liste des membres est la même dans les deux caisses. A la génération des tables, le jour du troc, il va dupliquer les tables membres et faire une table Articles par caisse. A la fin on prend les deux tables et on en créé une troisième avec la somme de tous les articles. Est-ce plus clair?
Merci beaucoup pour ton aide!
merci pour la version modifiée, dans la table client, il manque le numéro de membre (pas l'id de la table) et c'est Id qui va se retrouver dans la table Articles. Détail, C'est CliMembre.
La liste des membres est la même dans les deux caisses. A la génération des tables, le jour du troc, il va dupliquer les tables membres et faire une table Articles par caisse. A la fin on prend les deux tables et on en créé une troisième avec la somme de tous les articles. Est-ce plus clair?
Merci beaucoup pour ton aide!
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Tables pour une caisse
Quelle différence sémantique entre client et membre ?
Si ton n° de membre est numérique, tu peux parfaitement employer le rowid pour le stocker.
Bon, si les tables clients sont dupliquées et se trouvent en fait en lecture seule pour les caisses, ça roule.
Si ton n° de membre est numérique, tu peux parfaitement employer le rowid pour le stocker.
Bon, si les tables clients sont dupliquées et se trouvent en fait en lecture seule pour les caisses, ça roule.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Tables pour une caisse
Ben simplement parce qu’on ne peut pas mettre d’auto-incrément, non?
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Tables pour une caisse
Tu peux virer l'autoincrement et donc spécifier explicitement la valeur à attribuer à l'id.
Autoincrement ne s'applique que si tu ne fournis pas de valeur, mais ces valeurs que tu fournis peuvent être quelconque dans int64 signé.
Autoincrement ne s'applique que si tu ne fournis pas de valeur, mais ces valeurs que tu fournis peuvent être quelconque dans int64 signé.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Tables pour une caisse
Code : Tout sélectionner
CREATE TABLE "Clients" (
"CliId" INTEGER NOT NULL PRIMARY KEY,
"CliNom" CHAR NOT NULL,
"CliPrenom" CHAR DEFAULT (''),
"CliInscrit" BOOL NOT NULL DEFAULT 0,
"CliMembre" BOOL NOT NULL DEFAULT 0);
CREATE TABLE "Articles" (
"ArtId" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"CliId" INTEGER NOT NULL CONSTRAINT "fkCliArt" REFERENCES "Clients"("CliId") ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED,
"Caisse" INTEGER NOT NULL,
"ArtPrix" INTEGER NOT NULL,
"ArtQte" INTEGER NOT NULL,
"Comment" CHAR DEFAULT (''),
CONSTRAINT "ckNumCaisse" CHECK(caisse between 0 and 9));
CREATE INDEX "ixArtCli" ON "Articles" ("CliId");- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Tables pour une caisse
Fais-toi une fonction de création où tu invoques
en ayant mis tout le paquet SQL dans la variable.
Tu peux aussi ajouter la clause IF NOT EXISTS à chaque table et index, ce qui t'évite de traiter toi-même le cas de la création ou pas.
Code : Tout sélectionner
_SQLite_Exec($hDB, $SQLCreat)Tu peux aussi ajouter la clause IF NOT EXISTS à chaque table et index, ce qui t'évite de traiter toi-même le cas de la création ou pas.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
