Avatar billede s0mmer Nybegynder
12. oktober 2009 - 16:15 Der er 8 kommentarer

Lidt hjælp til binary write

Hej Eksperter,

Jeg er så tæt på have den her, men mangler lige lidt hjælp.

Jeg har en masse binær data gemt i en sql server i et felt af typen "text". Jeg gør følgende:

        ' String to byte array conversion function:
        Function StringToBinary(S)
          Dim i, ByteArray
          For i=1 To Len(S)
            ByteArray = ByteArray & ChrB(Asc(Mid(S,i,1)))
          Next
          StringToBinary = ByteArray
        End Function

        Response.write(VarType(StringToBinary(ys("indhold"))))
   
      'Create a stream object
      Dim objStream
      Set objStream = Server.CreateObject("ADODB.Stream")
     
      objStream.Type = adTypeBinary
      objStream.Open
      objStream.Write StringToBinary(ys("indhold"))
     
      'Output the contents of the stream object
      Response.BinaryWrite objStream.Read
     
      'Working save to file
      MyFile2 = Server.MapPath("pdf/tester2.htm")
      objStream.SaveToFile MyFile2, adSaveCreateOverWrite

     
      'Clean up....
      objStream.Close
      Set objStream = Nothing


Og det virker næsten! Jeg får bare altid fejl på linjen:
objStream.Write StringToBinary(ys("indhold"))

Det er som om min string til byte array ikke fungerer? Endvidere printer den 8 ud som vartype, hvilket også er forkert=?
Avatar billede arne_v Ekspert
12. oktober 2009 - 16:51 #1
Hvad er ys ?
Avatar billede s0mmer Nybegynder
12. oktober 2009 - 16:56 #2
Sådan her får jeg ys:

    strSQL = ***
    Set cmd = Server.CreateObject("ADODB.Command")
    Set cmd.ActiveConnection = Conn
    cmd.CommandType = adCmdText
    cmd.CommandText = strSQL
    cmd.Parameters.Append cmd.CreateParameter("@Overskrifter_FilerID", adVarChar, adParamInput, 255, rs("FileID1"))
    Set ys = cmd.Execute()
Avatar billede arne_v Ekspert
12. oktober 2009 - 22:07 #3
Indeholder ys("indhold") det forventede ?
Avatar billede s0mmer Nybegynder
13. oktober 2009 - 00:01 #4
arne_v > Indholdet kommer fra en database jeg ikke har lavet. Personen siger at det er binær data gemt i feltet "indhold" som er af typen text i databasen. Han siger at jeg blot skal gemme indholdet som binær data og så vil jeg få filen frem igen. Det er imidlertid nemmere sagt end gjort :(

Jeg ved dog at indholdet kommer fra et delphi program, hvor han ligeledes også henter det op som jeg ønsker.
Avatar billede arne_v Ekspert
13. oktober 2009 - 02:46 #5
Binære data burde være et felt af type IMAGE ikke i et felt af typen TEXT.

Og du burde kunne:

Response.BinaryWrite ys("indhold")
Avatar billede s0mmer Nybegynder
14. oktober 2009 - 10:22 #6
arne_v > Helt enig med feltet i databasen, men det er som sagt ikke noget jeg står bag eller bruger i det daglige. Jeg skal bare få det her enkelt udtræk til at fungere.

Hvis jeg benytter:
Response.BinaryWrite ys("indhold")

Får jeg bare en masse tegn som:
87z¼¯'�3øx ������T�������A¼;�w®Óã£ç—¾N ³áquk!¹8¼tRÜTD¬õ³Ž©VÌô=Å2ÿÅÓO°Ë)Á ؤ…×èôü'srÊ9(4t‹ÒêõoäåŒ~Á· ˺#/HNq14¥ÇÓÒÞ xøÌ•LÊIã5î÷W8«F¦O

Bemærk at det er .htm filer jeg får fra databasen.
Avatar billede s0mmer Nybegynder
14. oktober 2009 - 10:28 #7
Endvidere hvis jeg gør dette:
Response.write(VarType(ys("indhold")))

Får jeg 8 ud, hvilket vel heller ikk er hvad det burde være?
Avatar billede s0mmer Nybegynder
14. oktober 2009 - 10:59 #8
Nu er jeg rigtig tæt på at have den.. Jeg får ingen fejl og den gemmer dokumentet som ønsket. Dog når jeg åbner dokumentet er det bare fyldt med de tegn som vist ovenover. Min kode:


      'Create Stream object
      Dim BinaryStream 'As New Stream
      Set BinaryStream = CreateObject("ADODB.Stream")
   
      'Specify stream type - we want To save text/string data.
      BinaryStream.Type = adTypeText
   
      'Specify charset For the source text (unicode) data.
      BinaryStream.CharSet = "us-ascii"
   
      'Open the stream And write text/string data To the object
      BinaryStream.Open
      BinaryStream.WriteText ys("indhold")
   
   
      'Change stream type To binary
      BinaryStream.Position = 0
      BinaryStream.Type = adTypeBinary
   
      'Ignore first two bytes - sign of
      BinaryStream.Position = 0
   
      'Open the stream And get binary data from the object
      Stream_StringToBinary = BinaryStream.Read   
     
   
      'Create a stream object
      Dim objStream
      Set objStream = Server.CreateObject("ADODB.Stream")
     
      'Write binary
      objStream.Type = adTypeBinary
      objStream.Open
      objStream.Write Stream_StringToBinary
     
     
      'Working save to file
      MyFile2 = Server.MapPath("pdf/tester2.htm")
      objStream.SaveToFile MyFile2, adSaveCreateOverWrite

     
      'Clean up....
      objStream.Close
      Set objStream = Nothing

Kan i hjælpe?
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