Forfatter |
Emne Søg Emne funktioner
|
Lieberkind
Bronze bruger
Medlem: 05-11-2015
Land: Danmark
Status: Offline
Point: 5
|
Emne: Makro Sendt: 05-11-2015 kl. 11:41 |
Hej, Jeg er ny udi Access programmering.... Men jeg er ved at lave en database til at holde styr på pakker på et lager. Og nu er jeg kommet til de dele der er en udfordring for mig. :-) Jeg skal lave en "knap" som skal starte en makro som løber gennem min tabel og finde track & trace numre(som jeg har indtastet) og indsætter et ordrenummer i samme række, men anden kolonne. disse data kommer fra et Excel ark som bliver opdateret hver dag og importeret til access. Min anden opgave er at, når jeg tager en pakke ud fra lageret, skal en form indsætte en dato/tid, i en kolonne til formålet. Her er det så muligt at der er flere pakker til samme ordre, som alle skal markeres som fjernet fra lageret. Jeg håber at I kan hjælpe mig med disse udfordringer. :-) /Jan
|
![Til top Til top](forum_images/back_to_top.png) |
|
|
![Til top Til top](forum_images/back_to_top.png) |
hkh
Sølv bruger
Medlem: 15-08-2012
Status: Offline
Point: 320
|
Sendt: 05-11-2015 kl. 12:12 |
Hej Jan
For rigtigt at kunne hjælpe, skal vi nok have lidt oplysninger omkring din tabel og hvordan din form ser ud.
Du skal ikke bruge en makro men hændelsesprocedure til din knap.
I hændelsesproceduren skal du have en kode som løber gennem din tabel.
private sub DinKnap_Click() dim data as recordset set data=currentdb.openrecordset("SELECT Din_Tabel.* FROM Din_Tabel WHERE (((Din_Tabel.track)=" & søgtrack & ") AND (Din_Tabel.trace)=" & søgtrace & "));") if data.eof=true then msgbox"Din søgning på " & søgtrack & " og " & søgtrace & " gav intet resultat!" goto afslut endif while data.eof=false data.edit data!ordrenr=dit_ordrenr data.update data.mowenext wend Afslut:
set data=nothing end sub
set data=currentdb.openrecordset finder de data i din tabel hvor søgtrack og søgtrace passer. if data.eof=true then hvis der ingen data er der passer på din indtastning vises en besked og der afbrydes. while data.eof=false er et loop der gentager kode mellem while og wend hvis betingelsen passer.(der skal være poster) data.edit gør klar til at rette i posten. data.update gemmer dine rettelser. data.mowenext flytter til næste post, hvis der er nogen set data=nothing lukker din tabel
|
Hans
|
![Til top Til top](forum_images/back_to_top.png) |
Lieberkind
Bronze bruger
Medlem: 05-11-2015
Land: Danmark
Status: Offline
Point: 5
|
Sendt: 06-11-2015 kl. 14:06 |
Super, tak for hjælpen... Men nu er jeg rendt ind i et nyt problem, og det er at når jeg lukker et vindue med en formular som laver en forespørgsel, opretter den en ny post med de data der står i søgefeltet. hvordan kan det være? Tak.
|
![Til top Til top](forum_images/back_to_top.png) |
hkh
Sølv bruger
Medlem: 15-08-2012
Status: Offline
Point: 320
|
Sendt: 06-11-2015 kl. 15:59 |
Hvis du vil have en formular, der skal kunne oprette en forespørgsel, må du ikke have forbundet felterne til et datasæt(tabel eller forespørgsel), det vil sige felterne skal være ubundet.
Du kan starte søgningen med en knap eller benytte søgefelternes hændelsesprocedure ved ændret til at finde posterne. Hvis du har flere felter, er det letteste at oprette en sub eller procedure i et modul hvor du tester om der er indhold i felterne, f.eks:
Sub FindFelter() dim SqlTekst as string dim søg as boolean dim data as recordset
'her tester du dine søgefelter søg=false SqlTekst = "SELECT Produkter.* FROM Produkter" if nz(søgefelt1)="" then Sqltekst=sqltekst & " where (((Produkter.Produktnavn)='" & søgefelt1 &"')" søg=true endif if nz(søgefelt2)="" then if søg=true then Sqltekst=sqltekst & " AND ((Produkter.Genbestillingsniveau)<" & søgefelt2 & ")" else Sqltekst=sqltekst & " where (((Produkter.Genbestillingsniveau)=" & søgefelt2 &")" endif søg=true endif if søg=true then Sqltekst=sqltekst & ")" Sqltekst=sqltekst & ";" set data=currentdb.opendataset(Sqltekst) if data.eof=true then msgbox"inden data!" goto afslut endif
forms!dinform.recordsource=sqltekst
Afslut: set data=nothing
endsub i felternes vedændret skriver du =FindFelter()
For at se om felterne er tomme, kan du benytte if nz(søgefelt)="" then nz(søgefelt) henter værdien i søgefelt, hvis det er et tekstfelt vil et tomt resultat blive "" eller null hvilket ikke er det samme, men det sørger nz(søgefelt)for så du ikke skal teste for flere former af ingenting.
hvis resultatet skal vises i en form skal du oprette en forespørgsel i kode og indsætte søgekriterierne i den. Det kunne være noget i retning af:
Til at hjælpe med den rigtige formatering af Sqlteksten, kan du oprette en forespørgsel, indtaste nogle søgekritereier, køre den og vise den i sqlform. Der skal rettes lidt i den feks. skal der sættes & tegn ind og ' (enkelte anførselstegn) ved tekstfelter. Du skal udskifte søgefelt1 med forms!frm_navnpåformularhvorsøgefelternefindes!søgefelt1 osv.
|
Hans
|
![Til top Til top](forum_images/back_to_top.png) |
Lieberkind
Bronze bruger
Medlem: 05-11-2015
Land: Danmark
Status: Offline
Point: 5
|
Sendt: 09-11-2015 kl. 15:52 |
1000 tak for hjælpen. det er noget avanceret, det du har lavet der. jeg lavede mine søgefelter ubundet, og så virkede det. nu har jeg skaffet en scanner, og til min overraskelse kommer der ¨C1 foran alle track & trace koderne. det er så et problem i forhold til at kunne søge en anden tabel og overføre data til et andet felt. hvordan kan man søge hvor den ignorer "¨C1" eller kan man fjerne det? Tak.
|
![Til top Til top](forum_images/back_to_top.png) |
hkh
Sølv bruger
Medlem: 15-08-2012
Status: Offline
Point: 320
|
Sendt: 10-11-2015 kl. 02:19 |
Se nu ved jeg jo ikke hvad du foretager dig, andet end at det må indvolvere en scanner.
Men hvis det er noget med data der importeres til en tabel kan det godt fjernes.
set data=currentdb.openrecordset("SELECT Din_Tabel.* FROM Din_Tabel;")
while data.eof=false
if left(data!ditfelt),2)="c1" then data.edit data!ditfelt=right(data!ditfelt),len(data!ditfelt)-2) data.update end if
|
Hans
|
![Til top Til top](forum_images/back_to_top.png) |
Lieberkind
Bronze bruger
Medlem: 05-11-2015
Land: Danmark
Status: Offline
Point: 5
|
Sendt: 11-11-2015 kl. 09:41 |
Jeg takker mange gange for hjælpen, jeg det er vidst ud over min fatteevne at lave det her. Tak
|
![Til top Til top](forum_images/back_to_top.png) |
hkh
Sølv bruger
Medlem: 15-08-2012
Status: Offline
Point: 320
|
Sendt: 11-11-2015 kl. 10:38 |
hkh skrev:
[COLOR=blue] 'åben den tabel hvor dine data er set data=currentdb.openrecordset("SELECT Din_Tabel.* FROM Din_Tabel;") 'Gentag til alle data er løbet igennem while data.eof=false 'Hvis indhold i feltet begynder med c1 skal det fjernes, det bruger vi venstrefunktionen til hvor vi henter de to første tegn fra venstre if left(data!ditfelt),2)="c1" then 'Klargør data til rettelse data.edit 'Da det er i begyndelsen af feltet du har C1 skal vi have fjernet de to første karakterer det gør vi med højrefunktinonen der henter et antal tegn fra højre, len er den totale længde af indholdet i feltet, derfra trækkes de to tegn der skulle fjernes og resultatet gemmes igen data!ditfelt=right(data!ditfelt),len(data!ditfelt)-2) data.update end if
[/COLOR] | 'data!ditfelt=right(data!ditfelt),len(data!ditfelt)-2) kan også gøres på denne måde. Feltindhold=data!ditfelt Feltlængde=len(data!ditfelt)
nytfeltindhold=antallet af tegn fra højre-2 data!ditfelt=right(feltindhold),feltlængde-2)
Det hele afvikles i en subprocedure
|
Hans
|
![Til top Til top](forum_images/back_to_top.png) |