/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Data kopiering
Fra : Per Thomsen


Dato : 10-09-02 14:44

Jeg har en database, hvor kunder bestiller materiale. Denne database skal
'tømmes' hver aften, - på en eller anden måde skal jeg have makeret hvilke
der er blevet udlæst.

Jeg har prøvet at opdatere et felt (done) til 1 under udlæsning, men det
medføre at jeg kun får udlæst 1. post.

Jeg har så overvejet at kopiere de udlæste til en anden database, hvorefter
den oprindelige 'tømmes'.
Nu kommer så det store spørgsmål: 'Hvordan kopiere jeg data fra en database
til en anden under udlæsning?

Per



 
 
Lars Hoffmann (10-09-2002)
Kommentar
Fra : Lars Hoffmann


Dato : 10-09-02 14:47

"Per Thomsen" <pt@*REMOVE*THIS*monacor.dk> escribió

> Jeg har prøvet at opdatere et felt (done) til 1 under udlæsning, men det
> medføre at jeg kun får udlæst 1. post.

Det ville ellers være den korrekte måde at gøre det på, hvorfor får du kun
udlæst 1 post?


> Jeg har så overvejet at kopiere de udlæste til en anden database,
hvorefter
> den oprindelige 'tømmes'.
> Nu kommer så det store spørgsmål: 'Hvordan kopiere jeg data fra en
database
> til en anden under udlæsning?

Det er et bøvl. Du skal først lave noget SQL der samler dataene op i et
recordsæt, derefter gennemløber du recordsættet og for hver post affyrrer du
en SQL med insert into til den anden DB.

Med venlig hilsen
Lars Hoffmann



Per Thomsen (10-09-2002)
Kommentar
Fra : Per Thomsen


Dato : 10-09-02 14:57

> > Jeg har prøvet at opdatere et felt (done) til 1 under udlæsning, men det
> > medføre at jeg kun får udlæst 1. post.
>
> Det ville ellers være den korrekte måde at gøre det på, hvorfor får du kun
> udlæst 1 post?

Bare jeg vidste det! Det virker som om den opdaterer feltet i hele
databasen.


>
> > Jeg har så overvejet at kopiere de udlæste til en anden database,
> hvorefter
> > den oprindelige 'tømmes'.
> > Nu kommer så det store spørgsmål: 'Hvordan kopiere jeg data fra en
> database
> > til en anden under udlæsning?
>
> Det er et bøvl. Du skal først lave noget SQL der samler dataene op i et
> recordsæt, derefter gennemløber du recordsættet og for hver post affyrrer
du
> en SQL med insert into til den anden DB.
>
Det havde jeg også på mistanken.

Per



Lars Hoffmann (10-09-2002)
Kommentar
Fra : Lars Hoffmann


Dato : 10-09-02 15:40

"Per Thomsen" <pt@*REMOVE*THIS*monacor.dk> escribió

> > Det ville ellers være den korrekte måde at gøre det på, hvorfor får du
kun
> > udlæst 1 post?
>
> Bare jeg vidste det! Det virker som om den opdaterer feltet i hele
> databasen.

Kom med noget kode så finder vi ud af det



Per Thomsen (11-09-2002)
Kommentar
Fra : Per Thomsen


Dato : 11-09-02 07:19

> > > Det ville ellers være den korrekte måde at gøre det på, hvorfor får du
> kun
> > > udlæst 1 post?
> >
> > Bare jeg vidste det! Det virker som om den opdaterer feltet i hele
> > databasen.
>
> Kom med noget kode så finder vi ud af det
>
Her følger så koden:

Conn.Open DSN
Response.Write "Firma , Navn , Adresse , PostNr , Email" & "<br>"

' SQL forespørgsel

strSQL = "Select * from resultater where done = 0"

' Udfør forespørgsel (rs indeholder nu resultatet)

Set rs = Conn.Execute(strSQL)

' Gennemløb Recordset (rs) med en løkke

Do

' Udskriv ej udskrevne

Response.Write rs("Firma") & " , " & rs("Navn") & " , " & rs("Adresse") & "
, " & rs("PostNr") & " , " & rs("Email") & " , " & rs("Done") & "<br>"


'Marker som læst

If Done = 1 Then

strSQL2 = "Update resultater set Done = 0"

Conn.Execute(strSQL2)

End If

' Gå til næste Record i rs

rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)

Loop While Not rs.EOF




Jens Gyldenkærne Cla~ (11-09-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-09-02 10:14

Per Thomsen skrev:

> Her følger så koden:

> strSQL = "Select * from resultater where done = 0"

Her vælger du alle poster med done = 0


> Response.Write rs("Firma") & " , " & rs("Navn") & " , " &
> rs("Adresse") & " , " & rs("PostNr") & " , " & rs("Email") & "
> , " & rs("Done") & "<br>"

Hvad sker der hvis et af felterne er null her? rs("Done") er i
øvrigt et tal og bør derfor castes som tekst inden udskrivningen:
Cstr(rs("Done"))

(Hvis ovenstående udskrivning fungerer fint nok når du ikke
opdaterer databasen behøver du ikke at ændre noget. Men der kan
opstå problemer med de ting jeg har nævnt)


> 'Marker som læst
>
> If Done = 1 Then

Hvad er Done? Er det (eller skulle det være) rs("Done")? Du har
ikke nogen variabelerklæring i din kode - så har Done overhovedet
en værdi? (Hvis du bruger Option Explicit slipper du for den slags
problemer - det kan *altid* anbefales)


> strSQL2 = "Update resultater set Done = 0"

Her opdaterer du hele resultat-tabellen - skulle du ikke kun
opdatere den aktuelle post? Og skulle du i øvrigt ikke sætte Done =
1 i stedet for Done = 0? De poster du har udvalgt er jo kun dem
hvor Done er 0. Der er ikke noget sted i din kode hvor du sætter
Done til 1.

Det er ikke til at se om din tabel indeholder et id-felt, men hvis
den gør kan du bruge følgende kode til kun at opdatere én post:

strSQL2 = "UPDATE resultater SET Done = 0 WHERE resultatID = " & _
   rs("resultatID")

(udskift resultatID med feltnavnet på din primærnøgle).


Du kunne også helt vente med at opdatere tabellen til efter du har
udskrevet den. Hvis du ved at dine data ikke bliver ændret i den
tid det tager at løbe postsættet igennem, så kan du vente med at
køre opdateringsforespørgslen til du har udskrevet alle posterne.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Per Thomsen (11-09-2002)
Kommentar
Fra : Per Thomsen


Dato : 11-09-02 12:12


> Det er ikke til at se om din tabel indeholder et id-felt, men hvis
> den gør kan du bruge følgende kode til kun at opdatere én post:
>
> strSQL2 = "UPDATE resultater SET Done = 0 WHERE resultatID = " & _
> rs("resultatID")
>
> (udskift resultatID med feltnavnet på din primærnøgle).
>
>
> Du kunne også helt vente med at opdatere tabellen til efter du har
> udskrevet den. Hvis du ved at dine data ikke bliver ændret i den
> tid det tager at løbe postsættet igennem, så kan du vente med at
> køre opdateringsforespørgslen til du har udskrevet alle posterne.
>
Det ser fornuftigt ud, det vil jeg prøve.

Jeg takker for hjælpen til jer alle sammen.

Per



Jens Gyldenkærne Cla~ (10-09-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 10-09-02 22:20

Per Thomsen skrev:

>> Det ville ellers være den korrekte måde at gøre det på,
>> hvorfor får du kun udlæst 1 post?
>
> Bare jeg vidste det! Det virker som om den opdaterer feltet i
> hele databasen.

Noget tyder på at du har glemt WHERE-delen af din sql-sætning
(eller at den ikke er sat ordentlig op).

Hvis du udvælger et postsæt med fx følgende betingelse:

SELECT <felter> FROM <tabeller> WHERE antal = 4

kan du opdatere _hele_ postsættet med præcis samme betingelse:

UPDATE <tabel> SET felt2 = 8 WHERE antal = 4

Men hvis du vil opdatere enkeltvis skal du bruge en anden WHERE-
betingelse. Det sikreste er at bruge primærnøglen, hvis du har den
i dit SELECT-postsæt.

--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste