/ 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
Hvad er det dog der sker med min update??
Fra : Kasper Katzmann


Dato : 20-09-02 18:53

Når jeg forsøger at opdatere et memo(notat) felt i min Access DB gør den
noget meget underligt. Istedet for at indsætte alt hvad jeg skriver i min
<textarea>, indsætter den kun noget af det. Helt præcis indsætter den 289
tegn (inkl. mellemrum).

Hvorfor gør den det? Skal jeg angive noget specielt før jeg opdaterer?

Syn's det er møj mystisk


Mvh
Kasper K



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


Dato : 20-09-02 22:22

Kasper Katzmann escribió / skrev

> N†r jeg fors›ger at opdatere et memo(notat) felt i min Access DB
> g›r den noget meget underligt. Istedet for at inds‘tte alt hvad jeg
> skriver i min <textarea>, inds‘tter den kun noget af det. Helt
> pr‘cis inds‘tter den 289 tegn (inkl. mellemrum).

Hvordan ser din SQL streng ud?

Kasper Katzmann (20-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 20-09-02 20:26

> Hvordan ser din SQL streng ud?

Således:

sqlUpdate = "UPDATE content SET page = '" & page & "', title = '" &
title & "', content = '" & content & "' WHERE page = '" & page & "'"
conn.Execute(sqlUpdate)


Mvh
Kasper K



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


Dato : 21-09-02 12:49

Kasper Katzmann escribió / skrev

>> Hvordan ser din SQL streng ud?
>
> Således:
>
> sqlUpdate = "UPDATE content SET page = '" & page & "', title
> = '" &
> title & "', content = '" & content & "' WHERE page = '" & page &
> "'"
Er det bare mig eller manger der lidt mening i det?

Din SQL siger "opdater feltet page med værdien X hvor feltet page er lig
med værdien X" Det vil sige at der ingen ændringer sker.

prøv at lave en response.write(sqlUpdate) lige før din conn.Execute så
man kan se hvad din SQL indeholder med variablerne skrevet ud.

Det er muligt at dine variabler indeholder et ' tegn hvorfor du bør
omklamre dine variabler med: replace(variable,"'","''") således at '
bliver udskiftet med ''
Med venlig hilsen
Lars Hoffmann




Kasper Katzmann (21-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 21-09-02 11:44

> > sqlUpdate = "UPDATE content SET page = '" & page & "', title
> > = '" &
> > title & "', content = '" & content & "' WHERE page = '" & page &
> > "'"
> Er det bare mig eller manger der lidt mening i det?
>
> Din SQL siger "opdater feltet page med værdien X hvor feltet page er lig
> med værdien X" Det vil sige at der ingen ændringer sker.

Jeg tror bare det er dig

Jeg skal opdatere den post hvor feltet page (f.eks. minside.asp) er lig med
variablen page. Når den har fundet den post, opdaterer den også, bare kun
med noget af det der er tilføjet/erstattet.
Faktisk bør jeg fjerne SET page = '" & page & "', da feltet page er
konstant.

Mvh
Kasper K



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


Dato : 21-09-02 13:56

Kasper Katzmann escribió / skrev

> Faktisk bør jeg fjerne SET page = '" & page & "', da feltet page er
> konstant.

Se det var jo det jeg hentydede til.
Med venlig hilsen
Las Hoffmann

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


Dato : 21-09-02 00:06

Kasper Katzmann skrev:

> Når jeg forsøger at opdatere et memo(notat) felt i min Access
> DB gør den noget meget underligt. Istedet for at indsætte alt
> hvad jeg skriver i min <textarea>, indsætter den kun noget af
> det. Helt præcis indsætter den 289 tegn (inkl. mellemrum).

Mon ikke du er løbet ind i makslængden for en sql-kommando. Selvom
dit memofelt kan håndtere 64Kb data kan du ikke få Access til at
fortolke en sql-streng af vilkårlig længde.

> Hvorfor gør den det? Skal jeg angive noget specielt før jeg
> opdaterer?

Brug en cursor. Åbn din tabel med en select-sætning, indsæt en ny
post med .Addnew og sæt memoværdien ind med rs("memofelt") =
Request.Form("memoformfelt").

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

Kasper Katzmann (21-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 21-09-02 13:26

> Brug en cursor. Åbn din tabel med en select-sætning, indsæt en ny
> post med .Addnew og sæt memoværdien ind med rs("memofelt") =
> Request.Form("memoformfelt").

Men tilføjer det ikke en ny post? Det jeg vil, er jo at opdatere en
eksisterende.
Min update ser sådan her ud nu:

<%
page = Request.Form("page")
title = Request.Form("title")
content = Request.Form("content")

sqlUpdate = "UPDATE content SET title = '" & title & "', content = '" &
content & "' WHERE page = '" & page & "'"
conn.Execute(sqlUpdate)
%>

Tør man spørge hvordan du mener den bør se ud? ...be om


Mvh
Kasper K



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


Dato : 21-09-02 20:58

Kasper Katzmann skrev:

> Men tilføjer det ikke en ny post? Det jeg vil, er jo at
> opdatere en eksisterende.

Undskyld - jeg havde glemt at det var en opdateringsforespørgsel.
Men det kan stadig klares med en cursor. Du skal bare sørge for at
vælge den post du skal bruge, og så sætte de nye værdier uden at
benytte .addnew(). Jeg kan pt ikke huske om metoderne .edit og
..update er nødvendige - men prøv evt. med og uden.

> page = Request.Form("page")
> title = Request.Form("title")
> content = Request.Form("content")
>
> sqlUpdate = "UPDATE content SET title = '" & title & "',
> content = '" &
> content & "' WHERE page = '" & page & "'"

Var det page der indeholdt en memoværdi? I så fald er den ikke
særlig god at søge på. Brug et id-nummer hvis du ikke har en oplagt
nøgle at søge på.

Et forsøg på en cursor-udgave af ovenstående er:

sqlUpdate = "SELECT title, content FROM content WHERE page = "
& page

set rs = conn.execute(sqlUpdate)
' Eksperimenter evt. med flere parametre til .execute-metoden hvis
' du ikke får lov til at opdatere

If not rs.EOF Then
   ' Fjern udkommenteringen hvis du får en fejlmeddelelse
   ' om at postsættet ikke kan redigeres (det er ikke sikkert
   ' at det er nok, men et forsøg værd
   ' rs.Edit
   rs("title") = Request.Form("title")
   rs("content") = Request.Form("content")
   rs.Update
End If

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

Kasper Katzmann (22-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 22-09-02 22:14

> > sqlUpdate = "UPDATE content SET title = '" & title & "',
> > content = '" &
> > content & "' WHERE page = '" & page & "'"
>
> Var det page der indeholdt en memoværdi? I så fald er den ikke
> særlig god at søge på. Brug et id-nummer hvis du ikke har en oplagt
> nøgle at søge på.

Nej page er blot et unikt filnavn.

> Et forsøg på en cursor-udgave af ovenstående er:

[SNIP EN MASSE KODE]

Koden virkede ikke, men fandt dog noget på stardeveloper.com der lignede.

' Creating Recordset Object and opening the database
Set rs = Server.CreateObject("ADODB.Recordset")

' Lets open books table
rs.Open "content", conn, 1, 2, adCmdTableDirect

' Filtering records
rs.Filter = "page = '" & page & "'"

' Now updating records
rs("title") = title
rs("content") = content
rs.Update

rs.Close
Set rs = Nothing

Det virker desværre på samme måde som det oprindelige. Det opdaterer altså
kun feltet med en del af teksten. Jeg har en idé om at det skyldes at jeg
benytter den forkerte cursor.

rs.Open "content", conn, 1, 2, adCmdTableDirect

Kan du forklare hvilke cursore jeg skal benytte?


Mvh
Kasper K






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


Dato : 23-09-02 09:12

Kasper Katzmann skrev:

> Koden virkede ikke, men fandt dog noget på stardeveloper.com
> der lignede.
>
> ' Creating Recordset Object and opening the database
> Set rs = Server.CreateObject("ADODB.Recordset")
>
> ' Lets open books table
> rs.Open "content", conn, 1, 2, adCmdTableDirect
>
> ' Filtering records
> rs.Filter = "page = '" & page & "'"


Jeg tror bedre det kan svare sig at vælge den rigtige post med
"SELECT ... WHERE" i stedet for med filter (men det er ikke noget
jeg ved).

> Det virker desværre på samme måde som det oprindelige. Det
> opdaterer altså kun feltet med en del af teksten. Jeg har en
> idé om at det skyldes at jeg benytter den forkerte cursor.

Det lyder mærkeligt. Hvis den opdaterer noget så burde den -
efter min erfaring tage det hele med.

Får du fat i hele feltet med din Request.Form (prøv at udskrive
den på siden).

> rs.Open "content", conn, 1, 2, adCmdTableDirect
>
> Kan du forklare hvilke cursore jeg skal benytte?

Her er lidt kode fra en af de sider jeg har cursore på:

Save_SQL = "SELECT * FROM " & Member_Table & " WHERE member_guid=" & "'" & member_guid & "'"
   
rsSave.Open Save_SQL,cn2,adOpenKeyset,adLockOptimistic,adCmdText


if rsSave.EOF then
      blNew_draft = true
   end if
   Application.Lock
      
      if blNew_draft then
         rsSave.addnew
         rsSave("member_guid") = member_guid
      end if
      rsSave("Name") = objUpl.form("name")
   ' en masse linjer slettet

      rsSave.update   
      
   Application.UnLock
rsSave.Close
set rsSave = nothing


--
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

Kasper Katzmann (23-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 23-09-02 12:32

> > Det virker desværre på samme måde som det oprindelige. Det
> > opdaterer altså kun feltet med en del af teksten. Jeg har en
> > idé om at det skyldes at jeg benytter den forkerte cursor.
>
> Det lyder mærkeligt. Hvis den opdaterer noget så burde den -
> efter min erfaring tage det hele med.
>
> Får du fat i hele feltet med din Request.Form (prøv at udskrive
> den på siden).

Hmm hmmm hmmm....???
Jeg har "løst" problemet.
Indholdet fra mit textarea blev submittet til en bekræftelsesside, hvor det
blev vist fint. Når jeg så submittede det videre til opdaterings-scriptet
via et <input type="hidden".... felt, forsvandt det meste af teksten. Jeg
har husket at komme anførelsestegn i rigelige mængder omkring ( ...""" &
content & """... ). Så istedet for at ligge mit textarea i et hidden felt,
lagde jeg det i en session og vupti, så virkede det.

Er det mit hidden-felt der driller? Kan det maks. indeholde x antal tegn?
Kan ikke finde noget om det på w3.org.

Nu er det så bare at jeg helst vil undgå sessions i det her script. Hvad gør
man så??

Mvh
Kasper K



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


Dato : 23-09-02 12:45

Kasper Katzmann skrev:

> Er det mit hidden-felt der driller? Kan det maks. indeholde x
> antal tegn? Kan ikke finde noget om det på w3.org.

Det vil jeg gå ud fra. Jeg slog lige op i HTML4-specifikationen,
hvor det desværre heller ikke fremgår. Men jeg vil tro at CDATA-
typen som er den der benyttes til både hidden- og text-input-felter
har en maxlængde som du støder ind i.

> Nu er det så bare at jeg helst vil undgå sessions i det her
> script. Hvad gør man så??

A) Læg din lange tekst ind i databasen med det samme. Du kan evt.
lægge den i en midlertidig tabel og så flytte den hvis der
submittes på den anden side - ellers slettes den.

B) Læg teksten i et nyt textarea-felt som så (måske) kan skjules
via CSS.

Jeg vil anbefale A - dels fordi du næppe kan være helt sikker på at
teksten ikke ændres på side 2 med B, og dels fordi du sparer to
overførsler af indholdet i dit textarea (med model B skal teksten
transporteres tre gange frem og tilbage mellem server og klient).

--
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

Kasper Katzmann (23-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 23-09-02 13:14

> A) Læg din lange tekst ind i databasen med det samme. Du kan evt.
> lægge den i en midlertidig tabel og så flytte den hvis der
> submittes på den anden side - ellers slettes den.

Tusind tak for hjælpen. Jeg prøver A'eren


Mvh
Kasper K



Kasper Katzmann (22-09-2002)
Kommentar
Fra : Kasper Katzmann


Dato : 22-09-02 22:15

> > sqlUpdate = "UPDATE content SET title = '" & title & "',
> > content = '" &
> > content & "' WHERE page = '" & page & "'"
>
> Var det page der indeholdt en memoværdi? I så fald er den ikke
> særlig god at søge på. Brug et id-nummer hvis du ikke har en oplagt
> nøgle at søge på.

Nej page er blot et unikt filnavn.

> Et forsøg på en cursor-udgave af ovenstående er:

[SNIP EN MASSE KODE]

Koden virkede ikke, men fandt dog noget på stardeveloper.com der lignede.

' Creating Recordset Object and opening the database
Set rs = Server.CreateObject("ADODB.Recordset")

' Lets open books table
rs.Open "content", conn, 1, 2, adCmdTableDirect

' Filtering records
rs.Filter = "page = '" & page & "'"

' Now updating records
rs("title") = title
rs("content") = content
rs.Update

rs.Close
Set rs = Nothing

Det virker desværre på samme måde som det oprindelige. Det opdaterer altså
kun feltet med en del af teksten. Jeg har en idé om at det skyldes at jeg
benytter den forkerte cursor.

rs.Open "content", conn, 1, 2, adCmdTableDirect

Kan du forklare hvilke cursore jeg skal benytte?


Mvh
Kasper K








Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408838
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste