20. oktober 2005 - 12:18Der er
19 kommentarer og 1 løsning
Indsæt værdier i flere felter
Hej Alle,
Jeg har et felt i en tabel der får sit indhold fra en SQL sætning der trækker indholdet af et formular-felt ind i dette felt. SQL-sætningen er: INSERT INTO tbl_DropsTradeshows ( CotsWoldRef, TradeshowID ) SELECT [Forms]![frm_tradeshows]![DropBrought], [Forms]![frm_tradeshows]![TradeshowID] AS Expr1;
Jeg vil gerne have den til at oprette en record/linie i tbl_DropsTradeshows for HVER semikolon separeret værdi i formularfeltet DropsBrought. Som det er nu trækker den alle værdierne ind i tabelfeltet og det gør det svært at køre rapporter og queries på denne.
Ok - ser ud til at jeg er uforståelig... Kort sagt: "Jeg smider flere værdier ind i samme felt og disse værdier er adskilt med et semikolon. Hvordan spytter jeg dem ud i nye poster i min tabel?"
Som du beskriver det har du en liste med semikolonseperede værdier i feltet DropsBought i formularen. Det burde jo nok laves med en underformular på formlaren, hvor du tilføjede en ny post for hver af de værdier du nu tilføjer til DropsBought-feltet adskilt at semikolon.
Men hvis du vil have det sådan som du har det og har en liste som f.eks. "Hans,Per,Jørgen,Bent" i feltet DropsBought på formularen kan du tilføje det som 4 poster i tabellen således:
Dim i As Integer Dim mm As String Dim arr() As String Dim db As DAO.Database Set db = CurrentDb mm = "Hans,Per,Jørgen,Bent" arr = Split(mm, ",") For i = LBound(arr) To UBound(arr) 'db.Execute "INSERT INTO tbl_DropsTradeshows (CotsWoldRef, TradeshowID) VALUES (" & arr(i) & "," & Forms!frm_tradeshows!TradeshowID & "),dbFailOnError" Next
Det giver 4 poster i tabellen. Er det det du ville?
Dim i As Integer Dim arr() As String Dim db As DAO.Database Set db = CurrentDb arr = Split(Forms!frm_tradeshows!DropBrought, ",") For i = LBound(arr) To UBound(arr) db.Execute "INSERT INTO tbl_DropsTradeshows (CotsWoldRef, TradeshowID) VALUES (" & arr(i) & "," & Forms!frm_tradeshows!TradeshowID & "),dbFailOnError" Next
Jeg tror at arr = Split(Forms!frm_tradeshows!DropBrought, ",") skal skiftes med arr = Split(replace(Forms!frm_tradeshows!DropBrought,",",";"), ";") hvis listen i Dropbought-feltet er kommasepareret.
Jeg tror jeg havde vendt felterne forkert. Jeg antager at elementerne i DropBought er adskilt med ; Mellemrum i listen fjernes, så kun elementerne indsættes i tabellen.
Denne skulle virke:
Dim i As Integer Dim arr() As String Dim sList As String Dim db As DAO.Database Set db = CurrentDb sList = Replace(Forms!frm_tradeshows!DropBrought, " ", "") arr = Split(sList, ";") For i = LBound(arr) To UBound(arr) db.Execute "INSERT INTO tbl_DropsTradeshows (TradeshowID, CotsWoldRef) VALUES (" & Forms!frm_tradeshows!TradeshowID & ",'" & arr(i) & "')", dbFailOnError Next
Hvis det er relevant kan du bruge Begintrans og Committrans for at "wrappe" opdateringen i en transaktion. Det gøres sådan her
BeginTrans For i = LBound(arr) To UBound(arr) db.Execute "INSERT INTO tbl_DropsTradeshows (TradeshowID, CotsWoldRef) VALUES (" & Forms!frm_tradeshows!TradeshowID & ",'" & arr(i) & "')", dbFailOnError Next CommitTrans
Så venter databasen med at skrive til din backendfil indtil hele loopet er kørt igennem. Det reducerer antallet af skrivninger til disken (som er på netværk i dit tilfælde). Derudover har det den fordel (?) at alle posterne enten oprettes eller ikke oprettes. Så hvis indsættelsen af en post kikser i 5 køresel ud af 7 i et loop, så tilføjes der ingen poster overhovedet til tabellen. Det kan fungere som en sikring mod at kun nogle af posterne tilføjes. I øvrigt giver det ingen forskel i brug.
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.