2014-01-29 58 views
0

我正在開發vb.net和MS Access中的應用程序。起初,在幾個小時之後,我使用一些資源將代碼放在一起,從數據庫中打開一個pdf文件。代碼起作用。但是當我從應用程序午餐時,它會在根文件夾中創建一個pdf文件。所以現在我把它作爲二進制數據庫(OLEObjects)和根文件夾。我只需要它在一個地方。下面是代碼:從MS Access打開PDF,使用VB.NET中的窗體形式

Dim strSqll As String 
    Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BCInventory.accdb;Persist Security Info=False;") 
    conn.Open() 


    strSqll = "Select filename from pdf WHERE PR = '" & pr & "' AND Year = '" & year & "'" 

    Dim sqlCmdd As New OleDbCommand(strSqll, conn) 

    Dim r As OleDb.OleDbDataReader = sqlCmdd.ExecuteReader() 

    If Not r.HasRows Then Exit Sub 

    Do While r.Read() 
     fname = r.GetString(0) 
    Loop 
    conn.Close() 

     Try 
      Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BCInventory.accdb;Persist Security Info=False;") 
      con.Open() 
      Dim strSql As String = "Select File from pdf WHERE PR = '" & pr & "' AND Year = '" & year & "' AND fileType='" & ftype & "'" 

      Dim sqlCmd As New OleDbCommand(strSql, con) 

      Dim fileData As Byte() = DirectCast(sqlCmd.ExecuteScalar(), Byte()) 

      Dim sTempFileName As String = Application.StartupPath & "\Purchase Orders scans" & "\" & fname 

      If Not fileData Is Nothing Then 
       Using fs As New FileStream(fname, FileMode.OpenOrCreate, FileAccess.Write) 
        fs.Write(fileData, 0, fileData.Length) 
        fs.Flush() 
        fs.Close() 
       End Using 
       ShellEx(Me.Handle, "Open", fname, "", "", 10) 
      End If 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
+0

什麼是你要求?你正在告訴應用程序打開一個文件,該應用程序的寫作方式很可能是它可以打開PDF文件,而不是數據庫中的任何內容......那麼,你想要做的究竟是什麼?你不能將文件從數據庫中獲取到系統的臨時文件夾中,以便自動清除它,或者在不再使用時將其清理乾淨。 –

+0

如果我不清楚,我很抱歉。我想停止在我的數據庫中存儲pdf,而不是將所有pdf文件放在一個文件夾中,而在數據庫中只是有一個路徑到該文件夾​​。我得到它的工作。 – Victor

回答

0
Dim strSqll As String 
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BCInventory.accdb;Persist Security Info=False;") 
conn.Open() 


strSqll = "Select filename from pdf WHERE PR = '" & pr & "' AND Year = '" & year & "'" 

Dim sqlCmdd As New OleDbCommand(strSqll, conn) 

Dim r As OleDb.OleDbDataReader = sqlCmdd.ExecuteReader() 

If Not r.HasRows Then Exit Sub 

Do While r.Read() 
    fname = r.GetString(0) 
Loop 
conn.Close() 

    Try 
     If Len(Trim(fname)) = 0 Then 
       MessageBox.Show("There is no file attached", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Information) 
       txtpr.Focus() 
       Exit Sub 
      End If 
     ShellEx(Me.Handle, "Open", fname, "", "", 10) 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try