Just nu i M3-nätverket
Gå till innehåll

Stuva om i en Accesstabell..


Roger W

Rekommendera Poster

Jag håller på att grubbla ihjäl mig på följande problem:

Jag har en Access-tabell med en massa namn, Alltså:
Förnamn
Efternamn
Adress
Postnummer
Ort

Namnen hör till Kommunalt valda politiker och applikationen i fråga "visar" politikerna offentligt.



Nu har jag byggt om hela ASP-sajten (Classic ASP Vbscript) till en Responsiv design och skulle behöva släppa in Betatestare. Men innan detta måste jag "scrambla" om namnen och adresserna så att de blir oidentifierbara. Alltså: "Greta Garbo" "Bill Clinton" "Fredrik Reinfeldt" och "Nisse Hult" blir "Nisse Reinfeldt" "Bill Garbo" "Greta Hult" och "Fredrik Clinton" eller nåt liknande.

Alltså lyfta ur, skaka om och släppa ner namnen så får de landa där de landar.
Men jag kommer inte på hur jag skall göra.

Det är totalt 447 poster i tabellen som skall stuvas om. Jag har gjort en random-grej som ger mig nummer i spannet (1-447). Men resten slår jag huvudet i.

Jag måste även blanda om adresserna, men fixar jag namnen (med lite hjälp härifrån) löser det sig nog med resten.

Roger
 

Länk till kommentar
Dela på andra webbplatser

Nu har jag inte Access och inte kört det på ett tag så jag kan inte riktigt testa detta innan jag skriver det.

 

Men det du kan göra är att läsa upp en kolumn i taget och sortera på slumptal. I SQL-Server gör man typ så här

SELECT Fornamn FROM table
ORDER BY NEWID()

Jag hoppas att du även har en rad med en PrimaryKey som är en siffra eller liknande, för annars kommer du nog få viss huvudvärk.

 

Nu har du en lista med ID och namn i slumpad ordning. Sen tar du positionen på aktuella raden och uppdaterar databasen med detta, typ

UPDATE Tabell SET Fornamn = 'Nytt fornamn' WHERE ID=1

Det borde lösa ditt problem tycker jag. Det är just problem med att jag vet inte om Access kan göra en order by på newid.

Länk till kommentar
Dela på andra webbplatser

Jodå, det finns ett primärt indexfält som är av typen Autoincrement och under årens lopp har poster taits bort och lagts till vilket innebär att högsta värdet i indexfältet nu ligger på 1400..
 
Gjorde en tes:

<% SQLQuery = "SELECT Förnamn from NAMN ORDER by NEWID()"
Set NAMN = OBJdbConnection.Execute(SQLQuery) %>
 
ger..

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Odefinierad funktion 'NEWID' i uttryck.
 
R

Länk till kommentar
Dela på andra webbplatser

Jag har bestämt mig för att mitt inledande förslag inte kommer fungera helt ut. Det saknas nog ett steg.

 

Eftersom du har en id kolumn med autoincrement så kan vi inte anta att det verkligen går från 1 till hur mycket det nu är och samtliga siffor finns med.

 

Så istället för man nog först göra en select på id-kolumnen och sortera den fallande stigande, sen göra en select på den kolumn du vill blanda och id-kolumn, se till att den sorteras slumpmässigt. Sen uppdatera raden som har idt som står i första selecten med värdet i andra selecten... Det här var svårt att förklara, jag ska försöka göra en liten tabell som visar vad jag menar.

Select1 Select2
[ID]    [ID] [Fornamn]
----    --------------
   1       7   Bill
   3     100   Archimedes
   7       1   Hedvig
  14      14   Elvis
 100       3   Ringo

UPDATE Tabell SET FORNAMN='Bill' WHERE ID=1
etc etc
Länk till kommentar
Dela på andra webbplatser

 

Jag har bestämt mig för att mitt inledande förslag inte kommer fungera helt ut. Det saknas nog ett steg.

 

Eftersom du har en id kolumn med autoincrement så kan vi inte anta att det verkligen går från 1 till hur mycket det nu är och samtliga siffor finns med.

 

Så istället för man nog först göra en select på id-kolumnen och sortera den fallande stigande, sen göra en select på den kolumn du vill blanda och id-kolumn, se till att den sorteras slumpmässigt. Sen uppdatera raden som har idt som står i första selecten med värdet i andra selecten... Det här var svårt att förklara, jag ska försöka göra en liten tabell som visar vad jag menar.

Select1 Select2
[ID]    [ID] [Fornamn]
----    --------------
   1       7   Bill
   3     100   Archimedes
   7       1   Hedvig
  14      14   Elvis
 100       3   Ringo

UPDATE Tabell SET FORNAMN='Bill' WHERE ID=1
etc etc

 

Tror inte jag *riktigt* är med i ditt resonemang. Men tillräckligt iaf för att testa. Återkommer! :)

Länk till kommentar
Dela på andra webbplatser

Tror inte jag *riktigt* är med i ditt resonemang. Men tillräckligt iaf för att testa. Återkommer! :)

Får inte till det. Varenda gång jag försöker uppdateras namnet med det namn den redan har. Posten alltså. Jag har lagt till ett extrafält: FN1 som jag uppdaterar, så jag kan spåra vad som händer.

Första delen av ditt resonemang känns rätt, men i fråga två måste vi uppdatera RADEN, alltså radnumret. "Nisse Hult" har samma ID oavsett hur jag ställer frågan eller sorterar.

 

Eller tänker jag fel?

 

Skrev jag att det var en Accesstabell jag jobbar mot?

Länk till kommentar
Dela på andra webbplatser

Ett förslag kan vara att lämna tabellen orörd och istället göra en metod för utskrivning av namn som kastar om bokstäverna eller som genererar ett nytt namn, beroende på vissa faktorer.

 

Sedan när du går live behöver du bara skippa något steg i metoden och returnera den riktiga namnet direkt.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...