Réorganiser les ID dans ma base de données. C# SQL
Résolu
Pearusdoancaia
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
Pearusdoancaia Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
Pearusdoancaia Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Youplet
- Fuite données maif - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Reorganiser icones iphone - Guide
- Document id lycamobile ✓ - Forum Mobile
7 réponses
Ben non, il ne faut pas.
Supposons que tu aies besoin de synchroniser un téléphone qui n'est pas toujours en ligne avec une base de données en ligne.
Si sur la bdd, tu supprimes l'item 4 et que tu réorganises le reste, lors de la synchro, le téléphone vera que le dernier index (disons 34 ) n'existe plus et supprimera cet index.
Tu vas te retrouver avec 2 bdd différentes et impossible à gérer.
Enfin, si tu as supprimé, l'ID 4 et qu'après tu cherches cet ID c'est que quelque part tu as mal géré un truc.
Supposons que tu aies besoin de synchroniser un téléphone qui n'est pas toujours en ligne avec une base de données en ligne.
Si sur la bdd, tu supprimes l'item 4 et que tu réorganises le reste, lors de la synchro, le téléphone vera que le dernier index (disons 34 ) n'existe plus et supprimera cet index.
Tu vas te retrouver avec 2 bdd différentes et impossible à gérer.
Enfin, si tu as supprimé, l'ID 4 et qu'après tu cherches cet ID c'est que quelque part tu as mal géré un truc.
Oui, je sais tout ça, j'ai vu d'autres posts à ce sujet d'où le "(ne me dites pas qu'il ne faut pas faire ça sinon j'vous bute)". (du coup RIP toi)
Mais, c'est parce que j'utilise l'ID comme un "compteur" : ID = le X ième machin. Et pas vraiment comme un ID. Et donc arrivé au 4 ième machin bah il me dit "What the fuck, le 4 ième n'existe pas, c'est non". Du coup y a moyen ou pas ?
Mais, c'est parce que j'utilise l'ID comme un "compteur" : ID = le X ième machin. Et pas vraiment comme un ID. Et donc arrivé au 4 ième machin bah il me dit "What the fuck, le 4 ième n'existe pas, c'est non". Du coup y a moyen ou pas ?
Oui, en effet, il faut compter les lignes.
SqlConnection conn = new SqlConnection("ConnectionString"); conn.Open(); SqlCommand comm = new SqlCommand("SELECT COUNT(*) FROM table_name", conn); Int32 TotalRows = (Int32) comm .ExecuteScalar();
@Cédric, merci pour tes prochains posts de lire (et appliquer) ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
@Pearusdoancaia
Tu n'es pas très explicite, ce qui explique que des réponses ne correspondent pas à ce que tu voudrais faire.
Ce dont je suis sûr, c'est que tu veux te servir de l'ID pour ce qu'il n'est pas. Un peu comme se servir d'un vélo comme un échelle, ça pourrait marcher mais c'est casse gueule....
Ce que je crois avoir compris, tu as des données dans ta bdd (des gens par exemple)
Et avoir une requête qui t'extrait le 4 eme enregistrement?
Si c'est bien ça, ce n'est ni un ID ni un compteur. Pour une collection, je t'aurais dit c'est un index, mais en sql (les bdd c'est pas mom fort), je ne sais pas si index n'a pas une autre signification.
Pourrais tu poster le coder que tu utilises actuellement pour voir comment l'adapter?
@Pearusdoancaia
Tu n'es pas très explicite, ce qui explique que des réponses ne correspondent pas à ce que tu voudrais faire.
Ce dont je suis sûr, c'est que tu veux te servir de l'ID pour ce qu'il n'est pas. Un peu comme se servir d'un vélo comme un échelle, ça pourrait marcher mais c'est casse gueule....
Ce que je crois avoir compris, tu as des données dans ta bdd (des gens par exemple)
Nom Prénom ID Jean Sors 1 Mélanie Zetofrais 2 Alain Di 3 Marie onette 5
Et avoir une requête qui t'extrait le 4 eme enregistrement?
Si c'est bien ça, ce n'est ni un ID ni un compteur. Pour une collection, je t'aurais dit c'est un index, mais en sql (les bdd c'est pas mom fort), je ne sais pas si index n'a pas une autre signification.
Pourrais tu poster le coder que tu utilises actuellement pour voir comment l'adapter?
Alors, je vais être plus précise :
Tout d'abord j'ai une méthode qui retourne le dernier ID de ma base de données (je crois) grâce à "SELECT Max(ID) FROM MaTable".
Je récupère la valeur dans lastMonTrucID qui vaux 7 admettons, que j'utilise dans une boucle :
"mainFormLoadORNot" c'est pour savoir si je modifie ce qu'il y a dans mon UserControl ou si je le charge quand je lance l'appli' ou si j'en créer un nouveau (Clique droit créer un nouveau MonTruc)
NID vaux 1 jusqu'à lastMonTruckID (7 donc), et j'utilise NID pour le chargement des UserControl, exemple :
NID = 1, je récupère la donnée NOM, de l'ID qui est égal à NID(1), qui est Michmich, je modifie le texte de la texteBox par MichMich
je récupère la donnée PRENOM, de l'ID qui est égal à NID(1,) qui est TutoRaclette, je modifie le texte de la texteBox par TutoRaclette
etc.. etc.. Pour tous les éléments de mon UserControl de l'ID 1
NID = 2, idem mais pour l'ID qui est égal à 2.
etc... etc...
Tout charge bien.
Mais tu vois, s'il y a un trous, si NID vaux 4 et qu'il n'y a pas d'ID qui vaux 4 parce que je l'ai supprimé et bah il y a une erreur qui dit qu'il n'existe pas, normal.
Mais en aucun cas je l'utilise autrement, et j'y compte pas. On pourrait remplacer "ID" par "Emplacement dans ma base de donnée" et c'est comme ça que je veux l'utiliser.
Donc, je peux faire : clique droit supprimer MonTruc, ce qui décharge l'UserControl qui a le focus et supprime sa ligne dans la base de données. Si ce MonTruc avait comme ID 4, dans ma base de données ça va donner :
ID NOM PRENOM
1 gfdgykl rykryukryuky
2 yrukryu ergerger
3 ergerger ergerger
5 eeeeee rrrrrrrrrrrrr
6 Youplet Deneslet
7 Nik Tasalut
Et moi je veux que ça fasse :
ID NOM PRENOM
1 gfdgykl rykryukryuky
2 yrukryu ergerger
3 ergerger ergerger
4 eeeeee rrrrrrrrrrrrr
5 Youplet Deneslet
6 Nik Tasalut
Donc, j'aimerais savoir si c'est possible, grâce à une simple commande, de réorganiser les ID en 1,2,3,4,5,6 pour éviter de devoir le faire "manuellement" avec des boucles et donc, devoir rajouter pas mal de lignes. Je sais pas si c'est plus claire. ?_?
Tout d'abord j'ai une méthode qui retourne le dernier ID de ma base de données (je crois) grâce à "SELECT Max(ID) FROM MaTable".
Je récupère la valeur dans lastMonTrucID qui vaux 7 admettons, que j'utilise dans une boucle :
do { NID++; MonUserControl newMonTruc = new MonUserControl(mainFormLoadORNot, NID); //etc... } while (NID != LastMonTrucID);
"mainFormLoadORNot" c'est pour savoir si je modifie ce qu'il y a dans mon UserControl ou si je le charge quand je lance l'appli' ou si j'en créer un nouveau (Clique droit créer un nouveau MonTruc)
NID vaux 1 jusqu'à lastMonTruckID (7 donc), et j'utilise NID pour le chargement des UserControl, exemple :
NID = 1, je récupère la donnée NOM, de l'ID qui est égal à NID(1), qui est Michmich, je modifie le texte de la texteBox par MichMich
je récupère la donnée PRENOM, de l'ID qui est égal à NID(1,) qui est TutoRaclette, je modifie le texte de la texteBox par TutoRaclette
etc.. etc.. Pour tous les éléments de mon UserControl de l'ID 1
NID = 2, idem mais pour l'ID qui est égal à 2.
etc... etc...
Tout charge bien.
Mais tu vois, s'il y a un trous, si NID vaux 4 et qu'il n'y a pas d'ID qui vaux 4 parce que je l'ai supprimé et bah il y a une erreur qui dit qu'il n'existe pas, normal.
Mais en aucun cas je l'utilise autrement, et j'y compte pas. On pourrait remplacer "ID" par "Emplacement dans ma base de donnée" et c'est comme ça que je veux l'utiliser.
Donc, je peux faire : clique droit supprimer MonTruc, ce qui décharge l'UserControl qui a le focus et supprime sa ligne dans la base de données. Si ce MonTruc avait comme ID 4, dans ma base de données ça va donner :
ID NOM PRENOM
1 gfdgykl rykryukryuky
2 yrukryu ergerger
3 ergerger ergerger
5 eeeeee rrrrrrrrrrrrr
6 Youplet Deneslet
7 Nik Tasalut
Et moi je veux que ça fasse :
ID NOM PRENOM
1 gfdgykl rykryukryuky
2 yrukryu ergerger
3 ergerger ergerger
4 eeeeee rrrrrrrrrrrrr
5 Youplet Deneslet
6 Nik Tasalut
Donc, j'aimerais savoir si c'est possible, grâce à une simple commande, de réorganiser les ID en 1,2,3,4,5,6 pour éviter de devoir le faire "manuellement" avec des boucles et donc, devoir rajouter pas mal de lignes. Je sais pas si c'est plus claire. ?_?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Toi non, mais ta base de données t’en sais rien.
Tu peux faire ça avec un champ entier que t’appelle comme tu veux, mais pas ID.
Mais quoiqu’il en soit, ça n’est pas une bonne solution.
Supposons que tu aies 1000 item, si tu supprimes le 4 eme, il faut en mettre à jour 996.
Puisqu’apparemment tu charges tous les items, tu n’as pas besoin de savoir en avance combien y’en a.
Tu peux, par exemple, tout mettre dans un datatable et ensuite l’itérer du debut à la fin
Mais en aucun cas je l'utilise autrement, et j'y compte pas. On pourrait remplacer "ID" par "Emplacement dans ma base de donnée" et c'est comme ça que je veux l'utiliser.
Toi non, mais ta base de données t’en sais rien.
Tu peux faire ça avec un champ entier que t’appelle comme tu veux, mais pas ID.
Mais quoiqu’il en soit, ça n’est pas une bonne solution.
Supposons que tu aies 1000 item, si tu supprimes le 4 eme, il faut en mettre à jour 996.
Puisqu’apparemment tu charges tous les items, tu n’as pas besoin de savoir en avance combien y’en a.
Tu peux, par exemple, tout mettre dans un datatable et ensuite l’itérer du debut à la fin
Non, pas de commandes pour faire cela.
Dans ton cas, tu peux avoir 2 variables un compteur et un ID par exemple en métacode :
et @Whismeril Oui, en BDD un Index a un autre sens, c'est une sorte de mise en cache de données pour les retrouver plus vite.
Dans ton cas, tu peux avoir 2 variables un compteur et un ID par exemple en métacode :
var MaListe=ResultatSQL ("SELECT Id FROM ... ORDER BY Id ASC") var lIndex=0; while(FinPasAtteinte) { lIndex++;//Part à 1 donc MonUserControl newMonTruc = new MonUserControl(mainFormLoadORNot, lIndex, MaListe.CurrentItem["Id"]); //etc... //PasserAEnregistrementSuivant }
et @Whismeril Oui, en BDD un Index a un autre sens, c'est une sorte de mise en cache de données pour les retrouver plus vite.