Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103

    [VB6] Stored procedure che deve restituire file binario

    Ciao a tutti!
    Ho una stored procedure (Sql server 2005) che mi dovrebbe restituire un file binario (tipo di dato: IMAGE):

    codice:
    ALTER PROCEDURE [dbo].[VISUALIZZA_CERTIFICATI] 
        -- Add the parameters for the stored procedure here
        (@LOTTO VARCHAR(10))
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
    
        -- Insert statements for procedure here
        DECLARE @ID_CERT AS INT
        SELECT @ID_CERT = ID_CERTIFICATO FROM LOTTI_CERTIFICATI WHERE LOTTO = @LOTTO
    
        DECLARE @FILE_CERT AS VARBINARY
        SELECT @FILE_CERT = FILE_CERTIFICATO FROM DOC_CERTIFICATI WHERE ID_CERTIFICATO = @ID_CERT
    
        RETURN @FILE_CERT
    
    END

    Primo problema: devo assolutamente dichiare @FILE_CERT come VARBINARY, perchè come IMAGE mi da errore (FILE_CERTIFICATO è però di tipo IMAGE).
    Secondo problema: una volta eseguita la stored procedure, dovrei recuperare @FILE_CERT e visualizzarlo.

    Ecco il mio codice [VB6]:

    codice:
    Private Sub cmdVisualizzaFile_Click()
    
    Dim Cmd2 As New ADODB.Command
    Dim par2 As New ADODB.Parameter
    Dim valRitorno As Object
    
    Cmd2.ActiveConnection = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=ordinifb;Initial Catalog=CASTELFRIGODOC;Data Source=192.168.99.11"
    Cmd2.CommandText = "VISUALIZZA_CERTIFICATI"
    Cmd2.CommandTimeout = 15
    Cmd2.CommandType = adCmdStoredProc
    
    Set valRitorno = New ADODB.Parameter
    valRitorno.Direction = adParamReturnValue
    valRitorno.Name = "RETURN_VALUE"
    valRitorno.Type = adBinary
    Cmd2.Parameters.Append valRitorno
    
    par2.Direction = adParamInput
    par2.Name = "@lotto"
    par2.Type = adChar
    par2.Size = 10
    par2.Value = "MP0715313"
    Cmd2.Parameters.Append par2
    
    Cmd2.Execute
    
    
    Dim mstream As Object
    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write Cmd2.Parameters(0).Value
    mstream.SaveToFile "C:\Users\Elena\Desktop\prova.pdf", adSaveCreateOverWrite
    
    AcroPDF1.LoadFile ("C:\Users\Elena\Desktop\prova.pdf")
    
    End sub

    Quando mando in esecuzione il programma, mi dà errore in questa riga:
    codice:
    Cmd2.Parameters.Append valRitorno

    Errore: "L'oggetto Parameter non è stato definito correttamente. Le informazioni fornite sono incoerenti o incomplete."
    Dove sbaglio?

    Grazie mille!
    Ultima modifica di Elena85; 20-11-2013 a 12:43

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E la proprietà Size ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Intanto grazie ancora!

    Ho inserito questa riga di codice:

    codice:
    valRitorno.Size = 8000

    Ora quando mando in esecuzione il programma, si apre una finestra con scritto:
    "Il file non inizia con '%PDF-'.
    C:\Users\Elena\Desktop\prova.pdf"

    Che significa???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che quello che stai leggendo dal DB non è un file PDF valido. E io non so se è effettivamente così dato che non ho il tuo db ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Se uso questo codice, riesco a visualizzare il file nel db...

    codice:
    Set cn = New ADODB.Connection
    cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=ordinifb;Initial Catalog=CASTELFRIGODOC;Data Source=192.168.99.11"
    
    Set rs = New ADODB.Recordset
    rs.Open "Select FILE_CERTIFICATO from DOC_CERTIFICATI WHERE ID_CERTIFICATO = '2'", cn, adOpenKeyset, adLockOptimistic
    
    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("FILE_CERTIFICATO").Value
    mstream.SaveToFile "C:\Users\Elena\Desktop\prova.pdf", adSaveCreateOverWrite
    
    rs.Close
    cn.Close
    
    AcroPDF1.LoadFile ("C:\Users\Elena\Desktop\prova.pdf")

    Quindi dici che è la stored procedure che "non funziona"?
    Non sarà perchè non posso usare il tipo di dato "IMAGE"?

    Grazie ancora!

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Ho notato che il file prova.pdf che creo sul desktop (che dovrebbe contenere @FILE_CERT) non viene creato correttamente...
    Per quello non riesco a visualizzarlo...
    Il più e capirne il perché....

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Ma non c'è modo di usare un tipo di dato IMAGE per una stored procedure?
    Non riesco ancora a farla funzionare....

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    103
    Ragazzi, ci devo ancora saltare fuori!
    Nessuno sa darmi due dritte?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.