Avatar billede region Nybegynder
08. maj 2002 - 16:56 Der er 10 kommentarer og
3 løsninger

VBA haster

hvad er der galt med dette udtryk:

DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = 000 & [intern lev nr]WHERE master.[Intern lev nr] = ???")

den siger der er en syntax error i 'master.[Intern lev nr] = ???'
Avatar billede jkrons Professor
08. maj 2002 - 18:34 #1
Jeg har lidt problemer med at forstå, hvad du egentlig vil.

DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '000' & [intern lev nr]WHERE master.[Intern lev nr] = '???'")

løset dit syntaxproblem, men det er næppe det, du vil. Den sætning ændrer alle poster, hvor der faktisk står ??? i feltet [intern lev nr] til 000???.

Hvis det ikke er det, du øsnker, kan du så ikke specificere det lidt nærmere.
Avatar billede jkrons Professor
08. maj 2002 - 18:47 #2
Hvis det du ønsker er at alle felter, der indeholder netop tre tegn skal have tre foranstillede nuller, vil dette virke:

strsql = "UPDATE master SET master.[intern lev nr] = '000' & [intern lev nr] WHERE (((Len([intern lev nr]))=3))"
DoCmd.RunSQL strsql

Hele strSql skal skrives på en linie. DoCmd.RunSQL på en anden
Avatar billede terry Ekspert
08. maj 2002 - 19:43 #3
Not quite!
strsql = "UPDATE master SET master.[intern lev nr] = '000" & [intern lev nr] & "'" WHERE (((Len([intern lev nr]))=3))"
09. maj 2002 - 19:49 #4
Hey Region,

Går dine ??? ud på at brugeren skal spørges??
I så fald, kan koden se således ud:

DoCmd.RunSQL "UPDATE master SET [Intern lev nr] = 000 & [intern lev nr] WHERE [Intern lev nr] = [Indtast Intern Levnr]"
Avatar billede region Nybegynder
10. maj 2002 - 00:37 #5
Sorry allesammen... jeg har lige været offline i nogle dage...( skrev jo det hasterde... :-) )

Det jeg vil er :
Mine lev nr skal altid bestå af 6 cifre. Det er bare ikke altid tilfældet grundet formater. ( lad være med at fortælle mig at disse skal laves om for det bliver de ikke fra den kilde jeg får dem fra...)

EKs. lev nr = 000123. Når jeg får dette nummer fra min Mainframen er det number hvilket betyder jeg får det som 123. Nu vil jeg altså opdatere dette felt til at hedde 000123. Derfor siger jeg. :

find poster der består af 3 cifre dvs. "???". Dernæst skal den updatere disse poster til 000 + det aktuelle lev navn.

Jeg gider ikke lave dette via en query idet der er tale om flere varianter ??? eller ?? eller ? osv.

håber det gav noget ydeligere
Avatar billede terry Ekspert
10. maj 2002 - 09:09 #6
UPDATE master SET master.[lev nr] = Format([lev nr],"000000");
Avatar billede terry Ekspert
10. maj 2002 - 09:11 #7
change [lev nr] to the correct field name if it is not right
Avatar billede terry Ekspert
10. maj 2002 - 09:12 #8
Dont reject it without first trying it region, it works with
1
12
123
1234
12345
123456
Avatar billede region Nybegynder
10. maj 2002 - 22:18 #9
Hej Terry.

Først måtte jeg lige rette det lidt.:

DoCmd.RunSQL ("UPDATE master SET master.[intern lev nr] = Format([intern lev nr],000000)")

som du kan se har jeg været nødsaget til at fjerne dine " " mellem 000000, for at få lov at eksekvere dette. Den opdater dog på baggrund af dette til en NULL værdi.
Hvis ikke jeg fjernede " " mellem 000000 vill VBA slet ikke køre dette grundet en copile error. Den siger den mangler en list seperator eller en ).

Har eksperimenteret men kan ikke finde fejlen.
Avatar billede region Nybegynder
10. maj 2002 - 22:44 #10
Denne her virker :

Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '0' & [Intern lev nr] WHERE (((master.[Intern lev nr]) Like '?????'))")
DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '00' & [Intern lev nr] WHERE (((master.[Intern lev nr]) Like '????'))")
DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '000' & [Intern lev nr] WHERE (((master.[Intern lev nr]) Like '???'))")
DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '0000' & [Intern lev nr] WHERE (((master.[Intern lev nr]) Like '??'))")
DoCmd.RunSQL ("UPDATE master SET master.[Intern lev nr] = '00000' & [Intern lev nr] WHERE (((master.[Intern lev nr]) Like '?'))")
DoCmd.SetWarnings True
End Sub
Avatar billede region Nybegynder
10. maj 2002 - 22:45 #11
takker
Avatar billede terry Ekspert
11. maj 2002 - 10:24 #12
Your example does NOT work.
DoCmd.RunSQL ("UPDATE master SET master.[intern lev nr] = Format([intern lev nr],000000)")

My example DOES work!
DoCmd.RunSQL ("UPDATE master SET master.[intern lev nr] = Format([intern lev nr],'000000')")

The example I gave was the SQL needed to make the update. It doesnt take too manty changes to get it to work with docmd.runsql
Avatar billede region Nybegynder
11. maj 2002 - 14:15 #13
Hej Terry.

Jeg skriver også at mit IKKE virker fordi den opdaterer til en null værdi. Det jeg skriver er at den kan eksekveres fra docmd.runsql..

Dit script virker ikke når det er et textfelt... den opdaterer men for en konverteringsfejl på grund af formatet... hvis jeg ignorerer denne bliver all værdier til null.

hvis jeg ændrer mit felt til at være number vil jeg ikke kunne hitte en søgning der feks hedder : 0054*, idet 00 jo bare er visuelle nuller og ikke eksisterer fysisk i tabellen. derfor har jeg valgt et text felt i formatet.
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