Avatar billede litop Nybegynder
17. marts 2005 - 08:18 Der er 20 kommentarer og
1 løsning

Fjernelse af ",00" med forespørgsel

Hej Eksperter.
Af forskellige grunde har jeg fået noget data i min db hvor til flere, men ikke alle, variable er tilføjet ledet ",00" således er fx 13 blevet til 13,00. Jeg vil gerne have fjernet de ny cifre, således ønsker jeg en forespørgsel der fjerner de tre sidste anslag på variablerne. Min tanke er at lave en tabeloprettelsesforespørgsel hvor jeg så definerer nye variable som de gamle blot uden ",00" og det er til denne forespørgsel jeg ønsker hjælp. Mere præcist er det udtrykket der skal indtastes i felt, kunne måske være "if...." men det er ligegyldigt hvordan bare det løser mit problem.
På forhånd tak.
17. marts 2005 - 08:21 #1
Er dine data Tal eller Tekst?
17. marts 2005 - 08:22 #2
Hvis det er Tekst, kan du køre denne opdateringsforespørgsel:

Update [Din tabel] Set [Dit felt] = replace([Dit felt], ",00", "")
17. marts 2005 - 08:24 #3
Hvis det er Tal, så er det bare et spørgsmål om, at feltet er formatteret med 2 decimaler. Dette er altså reelt ikke det, som STÅR i feltet. Ved at ændre formattet og Antal decimaler i egenkaberne, kan du fjerne de 2 nuller.
Avatar billede litop Nybegynder
17. marts 2005 - 08:37 #4
Hej Thomas
Det er tekst, men kan ikke helt få opdateringen til at virke. Jeg tilføjer alle felterne og indtaster så opdateringen...?
Felt: civil
Tabel: tbdata
Opdatering: ??
Eller er jeg helt galt på den?
17. marts 2005 - 08:40 #5
ok, i opdatering skriver du:

replace([Civil]; ",00"; "")

Jeg forstod dog ikke helt hvad du ville med "if".

Min forespørgsel opdaterer ALLE felter, hvor der står ",00"
Avatar billede litop Nybegynder
17. marts 2005 - 08:46 #6
Nu ser det altså sådan ud:

Felt: Civil
Tabel: tbdata
Opdater til: replace([Civil]; ",00"; "")

Men forsøger jeg køre denne forespørgsel får følgende besked: Der er en ikke-defineret funktion "replace" i udtrykket...
17. marts 2005 - 08:48 #7
Arbejder du i Access 97?
17. marts 2005 - 08:52 #8
I så fald skal du selv oprette Replace-funktionen. Det gør du ved at indsætte nedenstående funktion i et modul:

Public Function Replace(Streng As String, Find As String, Erstat As String) As String
    On Error Resume Next
    Dim pos As Integer, findpos As Integer
    Dim tmpStr As String
    pos = 1
    If Len(Streng) = 0 Then
      Replace = Streng
      Exit Function
    End If
    tmpStr = Streng
    Do
        findpos = InStr(pos, tmpStr, Find)
        If findpos <> 0 Then
            tmpStr = Left(tmpStr, findpos - 1) & Erstat & Mid(tmpStr, findpos + Len(Find))
            pos = pos
        Else
            pos = pos + 1
        End If
    Loop Until pos = Len(Streng)
    If Err Then
      Replace = Streng
    Else
      Replace = tmpStr
  End If
End Function

Herefter skulle forespørgslen virke!
Avatar billede litop Nybegynder
17. marts 2005 - 08:52 #9
nej det er 2000
17. marts 2005 - 08:55 #10
okay!!!?

Det er ellers en standard-funktion siden '2000.

Prøv alligevel at åbne VBA editoren (Alt+F11) og gå i menuen Tools->references.

Hvis der er står "MISSING.." ud for ét af de afkrydsede elementer, så er det der fejlen er. Så skal du fjerne krydset og evt erstatte med en tilsvarende reference - måske bare en anden version.
Avatar billede litop Nybegynder
17. marts 2005 - 09:01 #11
Der står ikke missing nogen steder, men jeg ved at der er ændret referencelisten og at følgende er afkrydset:
-Visual Basic for appl...
-Microsoft Acces 9.0 Object Library
-Microsoft DAO 3,6 Object Library
-OLE Automation
-Microsoft ActiveX Data Objects 2.1 Library
Kan det tænkes der skal afkrydses mere?
17. marts 2005 - 09:05 #12
nej, det burde ikke være nødvendigt. Dette er standard-referencerne.

Prøv at trykke Ctrl+G (for at komme i immidiate-window) og skriv så:

?replace("XXXYYY", "Y", "Z")

Dette skulle gerne afstedkomme, at der skrives XXXZZZ i linien under.
Avatar billede litop Nybegynder
17. marts 2005 - 09:08 #13
Det sker også
17. marts 2005 - 09:11 #14
hmm, så er det mystisk, at den siger, at den ikke kender Replace i forespørgslen.

I forespørgselsdesign, prøv at gå i menuen Vis->SQL visning og kopier hele SQL'en og indsæt den her. Så kan jeg måske se om der skulle være en dum lille fejl.

Du er evt også velkommen til at sende databsen zippet til mig. Så skal jeg hurtigt sende den retur i rettet tilstand.
Avatar billede litop Nybegynder
17. marts 2005 - 09:14 #15
UPDATE tbdata SET tbdata.civil = replace([civil],",00","");
17. marts 2005 - 09:16 #16
ja, det ser jo rigtigt nok ud.

Har du mulighed for at sende db'en til mig - klik på mit navn her til venstre for at få min email. (jeg vil helst ikke poste den for mange steder for at undgå for meget spam)
Avatar billede litop Nybegynder
17. marts 2005 - 09:18 #17
Jeg kan desværre ikke sende den :-(
17. marts 2005 - 09:23 #18
heller ikke bare en "tom" database, hvor du har importeret den pågældende tabel?

Hvis det er en opdatering, som kun skal køres denne ene gang, kan du også bare åbne tabellen, stille dig i civil-kolonnen og så vælge menuen Rediger->erstat og skrive:
Søg efter: ,00
Erstat med:
Søg i: Civil
Søg på: En del af feltet

og herefter klikke på "Erstat alle"
Avatar billede litop Nybegynder
17. marts 2005 - 09:31 #19
iif(right([streng];3) =",00"; left([streng];len([streng])-3);[streng])
Nå nu lavede jeg følgende mere besværlige iff i en tabeloprettelsesforesp... Men tak for hjælpen anywho
- Jeg vil gerne give dig de 200 point hvis du vil have dem?
17. marts 2005 - 09:34 #20
tjo...jeg forstår dog ikke hvorfor den anden ikke virker. Bruger den altid selv, og den er mere generel og anvendelig end din egen metode.

Men vi kan jo bare dele pointene :)
17. marts 2005 - 09:50 #21
takker, men "dele" betyder, at du også skulle have nogle ;o)
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