Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Den løsning ligger alle felter sammen :-) Det var ikke det som var meningen, det som skulle ske var alt alle felter skulle flyttes til venstre så der ikke var nogen tomme felter se fra venste.
Jeg kan ikke se, hvordan du skulle kunne gøre det i en forespørgsel eller en update. Du kan jo kun "se" felterne i tabellen. Hvis f.eks. indholdet af felt3 flyttes/kopieres til felt2, vil indholdet jo stadig være der i felt3. Du vil altså ikke kunne flytte/kopiere indholdet af felt4 til felt3, for det indeholder jo data.
Det er ikke på nogen måde en optimal lagringsmetode. Det vil være meget bedre, at gemme data med et type-id og så et felt til værdien, altså en række pr. værdi i stedet for én række med flere værdier i felter.
Men hvis du fastholder din langt fra optimale tabelopbygning vil en reorganisering af data (update) efter min mening derfor skulle køres i VBA, f.eks.:
Sub ReorganizeTable() Dim db As Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("dinTabel") Do While Not rs.EOF If rs.Fields.Count > 2 Then ' Vi antager, at felt 0 er Id feltet, og at resten af felterne er de felter, der skal reorganiseres... For x = 1 To rs.Fields.Count - 2 If IsNull(rs.Fields(x)) Then 'Det testede felt indeholder Null, finde det næste felt, som indeholder en værdi... For y = x + 1 To rs.Fields.Count - 1 If Not IsNull(rs.Fields(y)) Then rs.Edit rs.Fields(x) = rs.Fields(y) rs.Fields(y) = Null rs.Update End If Next End If Next End If Loop End Sub
og enig i at man skal undgå tomme felter problem er at det er ikke mig som laver tabeller, det er data som jeg importere fra text, excel eller csv filer som jeg så efterfølgende vil have venstre stillet :-)
TIP: Hvis nu felterne, der skal testes og ombyttes ikke ligger i forlængelse af hinanden, eller der findes andre felter i tabellen, som ikke skal opdateres, kan felternes selekteres ved at erstatte tabelnavnet med en SELECT:
rs=db.OpenRecordset("SELECT Id, Felt1, Felt2, Felt3, Felt4, Felt5 FROM dinTabel")
TÆnkte lidt på nedenstående virker jo perfekt - men kan man få den til at løbe den modsatte vej så den ikke akkumulere mod venstre men mod højre?
Private Sub Kommandoknap0_Click()
Dim db As Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("adresser") Do While Not rs.EOF If rs.Fields.Count > 2 Then ' Vi antager, at felt 0 er Id feltet, og at resten af felterne er de felter, der skal reorganiseres... For x = 1 To rs.Fields.Count - 2 If IsNull(rs.Fields(x)) Then 'Det testede felt indeholder Null, finde det næste felt, som indeholder en værdi... For y = x + 1 To rs.Fields.Count - 1 If Not IsNull(rs.Fields(y)) Then rs.Edit rs.Fields(x) = rs.Fields(y) rs.Fields(y) = Null rs.Update Exit For End If Next End If Next End If rs.MoveNext Loop End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.