Avatar billede killer_r Nybegynder
02. januar 2004 - 01:46 Der er 8 kommentarer og
1 løsning

Kopiering/redigering af tabel (database)

Jeg skal have flyttet alt data fra en Access-database-tabel til en ny og samtidig ændre lidt på dataene...
Jeg har lavet følgende script til at gøre det for mig:

*****************************************

set rs = Conn.execute("select * from news")
    do until rs.EOF
        StrBesked = rs("besked")
        StrBesked = replace(StrBesked, Chr(13), VbCrLf)
        StrBesked = replace(StrBesked,"#smil","<#smil>")
        StrBesked = replace(StrBesked,"#sur","<#sur>")
        StrBesked = replace(StrBesked,"#spørg","<#spørg>")
        StrBesked = replace(StrBesked,"#cool","<#cool>")
        StrBesked = replace(StrBesked,"#ked","<#ked>")
        StrBesked = replace(StrBesked,"#kold","<#kold>")
        StrBesked = replace(StrBesked,"#lol","<#lol>")
        StrBesked = replace(StrBesked,"#opkast","<#opkast>")
        StrBesked = replace(StrBesked,"#tunge","<#tunge>")
        StrBesked = replace(StrBesked,"#cig","<#cig>")
        StrBesked = replace(StrBesked,"#skrig","<#skrig>")
        StrBesked = replace(StrBesked,"#ninja","<#ninja>")
        StrBesked = replace(StrBesked,"#handup","<#handup>")
        StrBesked = replace(StrBesked,"#handdown","<#handdown>")
        StrBesked = replace(StrBesked,"#stop","<#stop>")
        StrBesked = replace(StrBesked,"#disk","<#disk>")
        StrBesked = replace(StrBesked,"#fare","<#fare>")
        StrBesked = replace(StrBesked,"#cd","<#cd>")
        StrBesked = replace(StrBesked,"#love","<#love>")
        StrBesked = replace(StrBesked,"#unlove","<#unlove>")
   
        if isEmail(rs("email")) then
            StrEmail = rs("email")
            StrKey = ""
            Randomize
            for i = 1 to 50
                if Rnd >= 0.5 then
                    StrKey = StrKey & LCase(Chr(Int((26*Rnd)+65)))
                else
                    StrKey = StrKey & round(Rnd*10)
                end if
            next
        else
            StrEmail = ""
            StrKey = ""
        end if
       
        Set rs2 = Server.CreateObject("ADODB.RecordSet")
        rs2.Open "SELECT * FROM Tavlen", Conn, 1, 3
        rs2.AddNew
            rs2("id") = rs("id")
            rs2("svarid") = rs("svarid")
            rs2("adgang") = 0
            rs2("overskrift") = rs("overskrift")
            rs2("besked") = StrBesked
            rs2("forfatter") = rs("forfatter")
            rs2("MailMode") = "normal"
            rs2("email") = StrEmail
            rs2("Key") = StrKey
            rs2("dato") = rs("dato")
        rs2.Update
        rs2.Close
        Set rs2 = Nothing
       
    rs.MoveNext
    loop
set rs = nothing

*****************************************

Men den melder følgende fejl:

Der opstod en eller flere fejl ved en OLE DB-handling på flere trin. Kontroller alle OLE DB-statusværdier.

Så nu har jeg et par spørgsmål...

1) Hvorfor vil scriptet ikke virke? - Hvordan får jeg det til at virke?
2) Kan dette overhovedet lade sig gøre?
    - Her tænker jeg bl.a. på om der vil blive problemer med kolonnen id der er af typen autonummerering - vil den for fremtiden kunne finde ud af at fortsætte efter den sidste post, med det næste nummer, eller vil den 'starte forfra' fra 1 med autonummereringen (hvilket jo ville forårsage et problem!)

På forhånd tak!

/Killer_R
Avatar billede thesurfer Nybegynder
02. januar 2004 - 02:01 #1
Jeg tror ikke at du skal bruge rs2("id") = rs("id").
Tabellen "Tavlen" skal bare have autonummerering.
Og så kan du vist bare bruge:
set rs = Conn.execute("select * from news order by id")

Så skulle den gerne start ved id 1, og fortsætte deropad.. Den skulle så gerne indsætte, den først post fra news, som id 1 i Tavlen. Og den anden som id 2, osv..
Prøv det.. slet din nuværende tabel Tavlen, og genopret den igen, med autonummerering, og samme felter..
Husk at felterne skal være af samme type, som dem i news..
Avatar billede killer_r Nybegynder
02. januar 2004 - 12:35 #2
Jo jeg skal bruge rs2("id") = rs("id") (det virker! Jeg har prøvet det før...) fordi det er meget vigtigt at id'et er det samme i de to tabeller!!!
Og i news starter den nødvendigvis ikke på id 1!!!
Avatar billede killer_r Nybegynder
02. januar 2004 - 12:47 #3
ok... Du har lidt ret... :)
Jeg fjernede linjen rs2("id") = rs("id") og så virkede det...
MEN jeg skal have kopieret kolonnen med autonummerering over i Tavlen da ikke alle id'er ikke eksisterer kontinuert (pga. sletning) og fordi der er en sammenhæng mellem kolonnen id og svarid der ikke må ødelægges...

Så problemet er nu:
- Hvordan får jeg kopieret kolonnen med autonummerering over i den nye tabel?
Avatar billede thesurfer Nybegynder
02. januar 2004 - 14:08 #4
Jeg ved desværre ikke, hvordan man kopiere autonummereringen.
Avatar billede killer_r Nybegynder
02. januar 2004 - 18:58 #5
Det er så i orden... :)
Er der andre der ved det?!
Avatar billede killer_r Nybegynder
02. januar 2004 - 20:02 #6
Det kan tilsyneladende lade sig gøre hvis man bruger en INSERT INTO-sql-sætning, men jeg løber her ind i nogle problemer med det forbandede '-tegn...

Conn.execute("insert into Tavlen (id,svarid,adgang,MailMode,overskrift,forfatter,dato,email,key) values ("&rs("id")&","&rs("svarid")&",0,'normal','"&rs("overskrift")&"','"&rs("forfatter")&"',#"&rs("dato")&"#,'"&StrEmail&"','"&StrKey&"')")

Hvordan skal får jeg gjort så jeg får '-tegnene med over i den nye tabel - det vil sige uden at jeg skal replace dem med ingenting...?
Avatar billede killer_r Nybegynder
02. januar 2004 - 23:26 #7
Jeg tror jeg har fundet ud af det... Ved at bruge ovenstående SQL-sætning og replace'et et "'" med to "''" ser det ud til at virke...
Avatar billede thesurfer Nybegynder
03. januar 2004 - 14:14 #8
Det er korrekt :)
Man erstatter 1 ' med 2 '.. det fortolkes som 1 ' af databasen.
Avatar billede killer_r Nybegynder
03. januar 2004 - 15:58 #9
Ok jeg løste det!!!
Så jeg lukker...
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
Kurser inden for grundlæggende programmering

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