23 - 10 - 2017
Main Menu
Development
Old stories

Liste med dobbelt elementer

User Rating:  / 0
PoorBest 

Det aller meste for å synkronisere AgetoAge4 innebygde datahåndtering med MySQL er allerede gjort og det som gjenstår er litt finpussing og grundigere testing. Jeg lagde det slik at marriages tabellen fikk to rader for hvert ekteskap (a - b og b - a), men ser nå ingen grunn til det og har allerede forandret det til èn rad per ekteskap. Jeg måtte lage en prosedyre som sletter alle slike dobbelt registreringer og det var mer innviklet enn jeg hadde trodd. La oss si vi har denne listen:

1 - 2

2 - 1

3 - 4

4 - 3

5 - 6

7 - 8

 

Her har vi 2 tilfeller der a og b har byttet plass og disse ønskes slettet via en prosedyre. Hvordan programmerer man det? Vel, jeg begynte ved midnattstider i går og etter ca 30 min fant jeg en løsning som følger:

Prosedyren går gjennom hvert element i listen (hvert element består av to tallverdier a og b) og sjekker om det motsatte elementet (b og a)  finnes i listen. I såfall vil den sjekke en annen liste der det legges inn det elementet som eventuelt blir slettet (hver gang et element blir slettet blir en kopi av det lagt inn i denne tabellen). Hvis elementet ikke finnes i denne listen da blir dette elementet slettet og en kopi blir lagt inn i test listen. Her er C# koden for det:

struct rec

{

   int pid1;

   int pid2;

}

rec r, rx;

for (int i = 0; i < lst.Count - 1; i++)

{

      r.pid1 = lst[i].pid2;

      r.pid2 = lst[i].pid1; 

     if (lst.IndexOf(r) > -1)

     { 

         if (tmp.IndexOf(r) == -1)

         {

              doc.cmd.CommandText = "delete from marriages where pid1 = '" + r.pid1 + "' and pid2 = '" + r.pid2 + "';";

 

              listBox4.Items.Add(doc.cmd.CommandText); 

              rec rx = new rec();

              rx.pid1 = r.pid2;

              rx.pid2 = r.pid1;

              tmp.Add(rx);

              doc.cmd.ExecuteNonQuery();

         }

    }

MessageBox.Show("Finnish");

 

 

Hvis noen har en enklere løsning vennligst gi meg et hint.

Add comment


Security code
Refresh