Avatar billede foldager Novice
07. januar 2002 - 10:41 Der er 26 kommentarer og
1 løsning

ændring af datatype

Jeg har i min tabel en kolonne med email-adresser (desværre) angivet som typen \"hyperlinks\"

Jeg skal dog bruge værdien af felterne som tekst, og skal derfor have ændret typen for kolonnen.

HVis jeg uden videre ændrer typen, sker der uheldige ting:

    værdien asf@sdf.dk

    bliver til 

    asf@sdf.dk#http://asf@sdf.dk#


Jeg har derfor tænkt mig at lave en ny kolonne i tabellen af typen tekst, og opdatere denne til værdien af den første kolonne med en opdateringsforespørgsel.
Hvis jeg angiver opdateringsforespørgslen til

UPDATE TBL_Adressekartotek SET TBL_Adressekartotek.[E - mail2] = [TBL_Adressekartotek]![E - mail];

får jeg samme fejl som hvis jeg blot havde ændret kolonnetypen.

Hvordan får jeg opdateret kolonnen til kun af være værdien af hyperlinkkolonnen, så jeg undgår at få tilføjet ## koden?

Avatar billede jamal_s Nybegynder
07. januar 2002 - 11:00 #1
gå ind i access...åben din database...gå ind designblah...

og ændre dit type til text :) simpel !
Avatar billede jamal_s Nybegynder
07. januar 2002 - 11:01 #2
også tjek i din kode hvis du har skrevet noget i retning af det her.

Response.Write(\"http://\")
Avatar billede foldager Novice
07. januar 2002 - 11:03 #3
Duer ikke. læs spørgsmålet!
Hvis jeg blot ændrer typen, ændres alle værdier. Der tilføjes #http://adresse@host.dk\" til alle adresserne....:-(

Avatar billede jamal_s Nybegynder
07. januar 2002 - 11:11 #4
sorry :)
så gå op i edit ... og replace alle de steder der begynnder med \"#http://\" til \"\" !
Avatar billede jamal_s Nybegynder
07. januar 2002 - 11:11 #5
find and replace...
Avatar billede terry Ekspert
07. januar 2002 - 11:24 #6
A hyperlink actually contains up to three components. You see only the first!
1: display text
2: address
3: sub address

you are going to have to alter your update query to something like this:
UPDATE YourTable SET YourTable.NewField = Mid([OldField],1,InStr(1,[OldField],\'#\')-1);


Avatar billede foldager Novice
07. januar 2002 - 11:25 #7

Det jeg gerne vil have er noget sql der kan pille værdien ud af email-kolonnen, og opdatere email2-kolonnen til værdien UDEN \"#http://blabla.


Avatar billede terry Ekspert
07. januar 2002 - 11:27 #8
I have just given it you :o)
07. januar 2002 - 11:37 #9
Jeg ved ikke om det hjælper dig, men grunden til at sætter http foran, er selvfølgelig at den betragter link\'et som et link til en web-adresser.
Og hvis der ikke står \"Http://\" foran, så laver den nummeret med #\'er og skriver linket 2 gange.

Hvis man istedet skriver: mailto:asf@sdf.dk
så vil linket virke og feltet vil kun indeholde én kopi af teksten.

Men ellers vil Terry\'s løsning med MID virke....
Avatar billede foldager Novice
07. januar 2002 - 13:13 #10
Terry> det virker fint! Bortset fra at nogle af mine mailadresser står med værdien mailto: foran adressen. Disse værdier vil den ikke opdatere...
Avatar billede terry Ekspert
07. januar 2002 - 13:19 #11
Not sure exactly what you mean.
Thomas mentioned that thsoe with mailto befor e them for example: mailto:asf@sdf.dk
wouldnt have #..... are you saying that they do have #... or are you saying that you also want to remove mailto ?
Avatar billede foldager Novice
07. januar 2002 - 14:03 #12
Emailadresserne er for hovedparten indtastet som en alm. emailadresse i tabellen: altså som asd@asd.dk

Nogle af adresserne er dog indtastet som

mailto:asd@asd.dk

Det er de sidste adresser der tilsyneladende ikke vil opdateres af din sql af 11:24:12

En løsning kunne vel være at slette alle disse mailto:´s inden man kører sql af 11:24:12....

Eller kan man lade sletningen indgå i en og samme SQL?


Avatar billede terry Ekspert
07. januar 2002 - 15:15 #13
So it looks like this when converted
mailto:asf@sdf.dk#http://asf@sdf.dk#

Or

mailto:asf@sdf.dk





Avatar billede foldager Novice
07. januar 2002 - 15:18 #14
Nogle af værdierne (ikke dem alle) ser sådan her ud:

mailto:asf@sdf.dk

Avatar billede foldager Novice
07. januar 2002 - 15:19 #15
resten af værdierne er som jeg gerne vil have dem:

asd@asd.dk

Avatar billede terry Ekspert
07. januar 2002 - 15:51 #16
Can you try this on your data. I seem to get an extra # added to the end.

UPDATE YourTable SET YourTable.NewField = Mid([OldField],InStr(1,[OldField],\':\')+1)
WHERE (((YourTable.NewField) Is Null));

Avatar billede foldager Novice
15. januar 2002 - 10:08 #17
Det er tæt på.....

asd@asd.dk

bliver til

//asd@asd.dk#

Når jeg bruger mine data.

Undskyld det sene svar ;-)

Avatar billede foldager Novice
15. januar 2002 - 10:35 #18
De felter hvor den gamle email er angivet som

mailto: asd@asd.dk

bliver til

asd@asd.dk#

Avatar billede terry Ekspert
15. januar 2002 - 10:36 #19
hi foldager> will take a look at the problem just as soon as I get five minutes :o)
Avatar billede foldager Novice
15. januar 2002 - 14:33 #20
Herligt! Bare tag den med ro ;-)
Avatar billede terry Ekspert
15. januar 2002 - 15:23 #21
think I have a solution!

Place this in a module:
Function cHyp(sin As String) As String
Dim sWork As String
Dim i As Integer
Dim j As Integer

    sWork = sin
   
    i = InStr(1, sin, \"#\")
    j = InStr(i + 1, sin, \"#\")
   
    sWork = Mid(sin, i + 8, j - (i + 8))
    Debug.Print sWork
   
    cHyp = sWork


End Function

Then make a query:
UPDATE YourTable SET YourTable.NewField = Chyp([NewField]);

First you need to make an update query which copies the original field into the new field. Then run the query after modifying the tabel and field names.



Avatar billede foldager Novice
15. januar 2002 - 15:54 #22
Modulet fremkalder desværre en fejl :

Procedurekaldet eller argumentet er ugyldigt (fejl 5)

Avatar billede terry Ekspert
15. januar 2002 - 15:57 #23
have you placed it in a new module, not in a forms code?
I can take a look at the dB if you send it terry@santhell.dk
Avatar billede foldager Novice
15. januar 2002 - 23:05 #24
Ja, jeg har placeret koden i et nyt modul. Jeg kan desværre ikke sende dig mine data, da de tilhører mit firma.

Kan man ikke bare køre proceduren gennem flere querys?

Først en der fjerner mailto fra de adresser hvor dette står foran adressen, og derefter din af
07/01 2002 11:24:12......
Avatar billede terry Ekspert
16. januar 2002 - 08:16 #25
hi foldager> Converting data almost always gives problems, specially when you (I) cant see the data to be converted. I am sure you have the solution somewhere within the answers and comments given here. There are enough examples on how to use Mid and InStr etc. so I would think you should be able to make one or more queries to solve your problem.
The module I sent DOES work here. You could try compiling the module to see if you get an error indicating what the actual problem is. \"sin\" may be a reserved word
Function cHyp(sin As String) As String
so you could try replacing it in the module.
Other than that I think I am dry for ideas :o)


Avatar billede foldager Novice
16. januar 2002 - 13:38 #26
Du har fuldstændig ret Terry, der er ingen grund til at rode mere rundt i det, jeg må kunne lappe noget sammen. Tak for hjælpen (endnu en gang);-)
Avatar billede terry Ekspert
16. januar 2002 - 13:40 #27
selv tak :o) If you do still have problems in getting it to work then post a comment!
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