Avatar billede plaf Nybegynder
08. februar 2006 - 13:35 Der er 29 kommentarer og
1 løsning

Kopiere et blob-felt til et andet i mySQL

Skal have data fra ét blob-felt ind i et andet.

Har forsøgt med det her:

Set rsBasket = Conn.Execute("Select Note from webshopbasket where (Sessionid = '"& Session("sessionid") &"')")

'Indsæt note
If Not IsNull(rsBasket("Note")) then
           
    strSQL = "Update webshopbasket set "
    strSQL = strSQL & "Note= '" & bin_data(rsBasket("Note")) & "' "
    strSQL = strSQL & " Where (FUnique =  '"& FUnique &"' )"
   
    Conn.Execute(strSQL)
End If



Får fejlen: Type mismatch

Nogen, der ved hvordan man gør?

/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 14:27 #1
Jeg vil næsten tro at du kan gøre det på denne måde i stedet:

strSQL = "UPDATE webshopbasket SET Note = "
strSQL = strSQL & "(SELECT Note FROM webshopbasket WHERE Sessionid = '" & Session("sessionid") & "') "
strSQL = strSQL & "WHERE (FUnique =  '" & FUnique & "')"
Conn.Execute(strSQL)
Avatar billede plaf Nybegynder
08. februar 2006 - 14:30 #2
Så får jeg denne her:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Note FROM webshopbasket WHERE Sessionid = 'a27457274a1f3
Avatar billede nielle Nybegynder
08. februar 2006 - 14:53 #3
Ok, det lyder som om at du har en lidt ældre version af M;ySQL - en som ikke understøtter sub-queries. Så må vi jo forsøge uden:

Set rsBasket = Conn.Execute("SELECT Note FROM webshopbasket WHERE Sessionid = '" & Session("sessionid") & "'")

'Indsæt note
If Not IsNull(rsBasket("Note")) Then
    strSQL = "UPDATE webshopbasket SET "
    strSQL = strSQL & "Note = '" & rsBasket("Note") & "' "
    strSQL = strSQL & "WHERE FUnique = '"& FUnique & "'"
   
    Conn.Execute(strSQL)
End If
Avatar billede plaf Nybegynder
08. februar 2006 - 14:57 #4
Det var også hvad jeg startede ud med - men den giver også:

Type mismatch

Er ikke så vandt til det her med blob-felter....

/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 15:06 #5
Funktionen bin_data() er vel noget du selv har defineret? Har duy mulighed for at lave den omvendte version?

Iøvrigt; Hvordan får du din BLOB ind i webshopbasket til at starte med?
Avatar billede plaf Nybegynder
08. februar 2006 - 15:07 #6
Nej det der bin_data var et skud i tågen..

Jamen det er jo det, de er det dybt mystiske. Det gør jeg bare med en Request.Form("Note") - altså ikke noget med at lave DET om til binært først...


/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 17:41 #7
Hvad er det egentlig for en linje du får din fejlmeddelelse på?
Avatar billede plaf Nybegynder
08. februar 2006 - 17:58 #8
Det er linien med Conn.Execute...

/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 18:00 #9
Den første eller den anden?
Avatar billede plaf Nybegynder
08. februar 2006 - 18:08 #10
Den anden..
Avatar billede nielle Nybegynder
08. februar 2006 - 18:30 #11
Prøv - som debug - au udskrive din strSQL før at du forsøger den i Conn.Execute()

Response.Write "DEBUG: " & strSQL & "<br>"
Conn.Execute(strSQL)
Avatar billede plaf Nybegynder
08. februar 2006 - 18:42 #12
Har endda sat en response.End ind før Conn.Execute(strSQL)

Nu får jeg fejlen i liníen

strSQL = "Update sfh set Note = '"& rsBasket("Note")  &"'"
Avatar billede plaf Nybegynder
08. februar 2006 - 18:59 #13
Altså - hvis jeg laver det feltet som der trækkes FRA (rsBasket("Note") ) om til at være af typen VarChar så er der ingen problemer...

Det må være noget med at det er en binær værdi, jeg trækker ud.

/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 19:05 #14
Jeg regnede også med at det var den som fejlede, men blev i tvivl da du fortalte at det var Conn.Execute().

Hvad får du ud hvis du forsøger at udskrive:

rsBasket("Note")

?
Avatar billede plaf Nybegynder
08. februar 2006 - 19:11 #15
Hvis jeg - som normalt - skriver Response.Write, så får jeg et par spørgsmålstegn

Hvis jeg skriver Response.BinaryWrite, så får jeg den indsatte tekst - dog uden linieskift...
Avatar billede nielle Nybegynder
08. februar 2006 - 19:19 #16
Hvor lang er din tekst egentlig? Måske skulle du bare bruge noget andet - f.eks. et VARCHA felt eller lignende?
Avatar billede plaf Nybegynder
08. februar 2006 - 19:21 #17
Ja, det kunne man jo godt - men det bliver jeg jo ikke klogere af...

I det her tilfælde er det kun et par líner - men jeg vil jo ikke have nogen begrænsning...

Som sagt - laver jeg feltet om til VarChar, så virker det - det er bare ikke det, jeg skal bruge...
Avatar billede nielle Nybegynder
08. februar 2006 - 19:31 #18
For det første bør du ikke bruge en BLOB til korte tekster - det er ikke den slags data de er skabt til.

Når det er sagt, så tror jeg ikke at du kan løse det nuværende problem via en UPDATE. Der skal nok noget med at kopiere direkte fra recordset til recordset.
Avatar billede nielle Nybegynder
08. februar 2006 - 19:32 #19
Ok, keg så ikke lige at de allerede havde været rundt om varchar :^|
Avatar billede plaf Nybegynder
08. februar 2006 - 19:40 #20
Tester på en kort tekst - i virkeligheden er/bliver den jo længere...

Det kan godt ske, jeg ikke kan gøre det via en UPDATE... men hvordan  kan jeg kopiere direkte fra recoredset til recordset?

/Plaf
Avatar billede nielle Nybegynder
08. februar 2006 - 19:52 #21
Nu er vi ude i noget som jeg plejer at holde mig fra (fordi at performance ikke er den bedste). Så jeg vil ikke garantere at det virker, men prøv dette:

Set rsBasket = Conn.Execute("SELECT Note FROM webshopbasket WHERE Sessionid = '" & Session("sessionid") & "'")

'Indsæt note
If Not IsNull(rsBasket("Note")) Then
    ' Opret et nyt recordset til formålet.
    Set rsUpdate = Server.CreateObject("ADODB.Recordset")

    ' Det åbnes sådan at man kan kalde Update() på det
    rsUpdate.CursorLocation = 1
    rsUpdate.LockType = 3
    rsUpdate.CursorType = 1
    rsUpdate.ActiveConnection = Conn

    ' Den post som skal opdateres fremsøges
    rsUpdate.Open "SELECT * FROM webshopbasket WHERE FUnique = '" & FUnique & "'"

    ' Værdien af Noet-feltet overskrives med indholdet fra rsBasket("Note")
    rsUpdate("Note") = rsBasket("Note")

    ' Der opdateres
    rsUpdate.Update
End If
Avatar billede plaf Nybegynder
08. februar 2006 - 20:17 #22
Så får jeg:

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
Forespørgselsbaseret opdatering mislykkedes, fordi den række, der skulle opdateres, ikke kunne findes.
/test/opdatblob.asp, line 29
Avatar billede nielle Nybegynder
08. februar 2006 - 20:41 #23
Det lyder som om at SQL'en:

"SELECT * FROM webshopbasket WHERE FUnique = '" & FUnique & "'"

- slet ikke finder noget frem?
Avatar billede plaf Nybegynder
08. februar 2006 - 20:47 #24
Ja, derfor lavede jeg den om til:

"SELECT * FROM webshopbasket"

ved der er noget i tabellen, men den fandt stadig ikke noget.
Avatar billede nielle Nybegynder
08. februar 2006 - 20:50 #25
Peøv med dette:

' Værdien af Note-feltet overskrives med indholdet fra rsBasket("Note")
rsUpdate.MoveFirst  ' Flyt til første post i recordsættet
rsUpdate("Note") = rsBasket("Note")
Avatar billede plaf Nybegynder
08. februar 2006 - 21:13 #26
Hmmm... samme fejl
Avatar billede nielle Nybegynder
08. februar 2006 - 21:43 #27
Hmmmm... den bliver jeg nok nødt til at lade hvile for i aften. Jeg er totalt blank, og min googling har heller ikke givet noget videre. :^|
Avatar billede srigger Nybegynder
13. februar 2006 - 16:34 #28
Hey plaf jeg kan se at du har lavet logo forslag før og jeg går og mangler et så jeg ville høre om det var noget du havde mod på ?
Avatar billede nielle Nybegynder
20. februar 2006 - 19:46 #29
Den bliver jeg nok desværre nødt til at give op på. :^|
Avatar billede plaf Nybegynder
12. december 2006 - 09:15 #30
Lukker og slukker... sorry
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