Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 12:18 Der 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.

Hjælp :o)

Tak,

Jens
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 15:54 #1
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?"

Tak? :o)

Jens
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 15:56 #2
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?
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 15:58 #3
Så'n her skulle det være i dit eksempel:

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
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 16:10 #4
It's telling me "User defined Type not defined" - high-lighting "Dim db As DAO.Database"

Hvorfor?
jens
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 16:18 #5
ok. I VBA-editoren skal du op Tools>References og finde og afkrydse "Microsoft DAO 3.6" eller 3.51.

Så skulle det virke.

Det kan for øvrigt være det virker hvis du blot i stedet for skriver
Dim db as database
i stedet for
Dim db as Dao.database
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 16:40 #6
okay - now it is missing a semicolon...
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 16:54 #7
hov, den her

db.Execute "INSERT INTO tbl_DropsTradeshows (CotsWoldRef, TradeshowID) VALUES (" & arr(i) & "," & Forms!frm_tradeshows!TradeshowID & "),dbFailOnError"

skal rettes til

db.Execute "INSERT INTO tbl_DropsTradeshows (CotsWoldRef, TradeshowID) VALUES (" & arr(i) & "," & Forms!frm_tradeshows!TradeshowID & ")",dbFailOnError

Det er bare det sidste anførselstegn, der skal rykkes lidt tilbage.
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 17:10 #8
I get a syntax error in the expressions when there is more than one og jeg får expected 1 når der bare er en....
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 17:11 #9
Hvis du vil kan jeg maile dne til dig - min mail er jens@solving-it.biz
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 17:14 #10
helt fint, jeg har sendt dig en mail.
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 17:16 #11
er sendt!
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 17:19 #12
den er ikke kommet igennem, men jeg venter lige og ser et par minutter.
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 17:20 #13
fik en fejlmeddelelse tilbage fra Exchange serveren.. sender den lige med en anden konto...
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 17:28 #14
jeg får den ikke igennem
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 17:28 #15
hmmm.. vil ikke tillade ZIP...
har du en anden adresse?
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 18:01 #16
Ok, jeg har modtaget den.

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 dobbelttjekker lige.
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 18:24 #17
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
Avatar billede Jens Jakob Teislev Nybegynder
20. oktober 2005 - 18:35 #18
Perfekt! nu virker den del også :o)

Tak!

Jens
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 18:41 #19
Selv tak. Held og lykke med projektet.
Avatar billede jesperfjoelner Nybegynder
20. oktober 2005 - 18:45 #20
Lige en ekstra kommentar

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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester