Option Explicit Dim en As rdoEnvironment Dim Qd As rdoQuery Dim Cn As rdoConnection Dim Rs As rdoResultset Dim SQL As String Dim DataFile As Integer, Fl As Long, Chunks As Integer Dim Fragment As Integer, Chunk() As Byte, I As Integer Const ChunkSize As Integer = 16384Private Sub Form_Load() Set en = rdoEnvironments(0) Set Cn = en.OpenConnection(dsname:="", _ Connect:="UID=;PWD=;DATABASE=WorkDB;" _ & ""Driver={SQL Server};SERVER=Betav486", _ prompt:=rdDriverNoPrompt) Set Qd = Cn.CreateQuery("TestChunk", "Select * from Chunks Where PName = ?") End Sub Private Sub LoadFromFile_Click() ' ' 将文件定位并为该文件设置文件名。 ' With CommonDialog1 .Filter = "Pictures(*.bmp;*.ico)|*.bmp;*.ico" .ShowOpen FileName = .FileName End With End SubPrivate Sub ReadFromDB_Click() If Len(NameWanted) = 0 Then _ NameWanted = InputBox("Enter name wanted", "Animal") Qd(0) = NameWanted Set Rs = Qd.OpenResultset(rdOpenKeyset, rdConcurRowver) If Rs Is Nothing Or Rs.Updatable = False Then MsgBox "Can't open or write to result set" Exit Sub End If If Rs.EOF Then MsgBox "Can't find picture by that name" Exit Sub End If Description = Rs!Description DataFile = 1 Open "pictemp" For Binary Access Write As DataFile Fl = Rs!Photo.ColumnSize Chunks = Fl \ ChunkSize Fragment = Fl Mod ChunkSize ReDim Chunk(Fragment) Chunk() = Rs!Photo.GetChunk(Fragment) Put DataFile, , Chunk() For I = 1 To Chunks ReDim Buffer(ChunkSize) Chunk() = Rs!Photo.GetChunk(ChunkSize) Put DataFile, , Chunk() Next I Close DataFile FileName = "pictemp" End SubPrivate Sub SaveToDB_Click() If Len(NameWanted) = 0 Then _ NameWanted = InputBox("Enter name for this" _ & " picture", "Animal") Qd(0) = NameWanted Set Rs = Qd.OpenResultset(rdOpenKeyset, _ rdConcurRowver) If Rs Is Nothing Or Rs.Updatable = False Then MsgBox "Can't open or write to result set" Exit Sub End If If Rs.EOF Then Rs.AddNew Rs!PName = NameWanted If Description = "" Then _ Description = InputBox("Describe the picture", _ "Don't care") 'Rs!Description = Description Else Rs.Edit End If DataFile = 1 Open FileName For Binary Access Read As DataFile Fl = LOF(DataFile) ' 文件中数据的长度 If Fl = 0 Then Close DataFile: Exit Sub Chunks = Fl \ ChunkSize Fragment = Fl Mod ChunkSize Rs!Photo.AppendChunk Null ReDim Chunk(Fragment) Get DataFile, , Chunk() Rs!Photo.AppendChunk Chunk() ReDim Chunk(ChunkSize) For I = 1 To Chunks Get DataFile, , Chunk() Rs!Photo.AppendChunk Chunk() Next I Close DataFile Rs.Update End SubPrivate Sub FileName_Change() Picture1.Picture = LoadPicture(FileName) End Sub 这是MSDN中的一段例程(RDO),其他的差不多,关键是明白怎么做就行了.到MSDN中看看吧
to alinker(人生得意须尽欢 莫使金樽空对月) http://www.csdn.net/expert/topic/373/373294.shtm
Dim a() As Byte Open App.Path & "\" & "Excel1.xls" For Binary As #1a = InputB(LOF(1), #1) Close #1 Data1.Recordset.MoveFirst Data1.Recordset.Edit Data1.Recordset.Fields(1) = a Data1.Recordset.Update
只有将图片放如数据库中,才是真正意义上的数据库 存入数据库中,可用ado2.5的adodb.stream可实现。 以下代码供你参考 Public Sub savefile(ByVal tempfile As String) Dim mstream As ADODB.Stream Dim flen As Long adobanbenwenjian.Fields("wenjianming").value = tempfile Set mstream = New ADODB.Stream mstream.Type = adTypeBinary mstream.Open flen = FileLen(tempfile) If Len(tempfile) <> 0 Then mstream.LoadFromFile tempfile adobanbenwenjian.Fields("wenjian").value = mstream.Read Dim filever As clsfilever Dim rtnfilever As Variant Set filever = New clsfilever rtnfilever = filever.DisplayVerInfo(tempfile) adobanbenwenjian.Fields("banbenhao").value = rtnfilever(1) adobanbenwenjian.Fields("beizhu").value = rtnfilever(2) Set filever = Nothing End If Set mstream = Nothing End Sub
只有将图片放如数据库中,才是真正意义上的数据库 存入数据库中,可用ado2.5的adodb.stream可实现。 以下代码供你参考 Public Sub savefile(ByVal tempfile As String) Dim mstream As ADODB.Stream Dim flen As Long adobanbenwenjian.Fields("wenjianming").value = tempfile Set mstream = New ADODB.Stream mstream.Type = adTypeBinary mstream.Open flen = FileLen(tempfile) If Len(tempfile) <> 0 Then mstream.LoadFromFile tempfile adobanbenwenjian.Fields("wenjian").value = mstream.Read End If Set mstream = Nothing End Sub
用Ado的Stream对象吧,我写pdf模块时将几十兆的文件写入数据库的二进制字段也不过7到8秒,很快的。以下为示例代码:function fileToDatabase(byval rs as adodb.recordset,byval objfield as string, byval myfilename as string) as boolean dim stream as stream set stream = new stream stream.loadfromfile myfilename rs("objfield").value=stream set stream=nothing end function具体实现我可以通过Email发给你,我的Email是:[email protected] stream
Dim en As rdoEnvironment
Dim Qd As rdoQuery
Dim Cn As rdoConnection
Dim Rs As rdoResultset
Dim SQL As String
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, I As Integer
Const ChunkSize As Integer = 16384Private Sub Form_Load()
Set en = rdoEnvironments(0)
Set Cn = en.OpenConnection(dsname:="", _
Connect:="UID=;PWD=;DATABASE=WorkDB;" _
& ""Driver={SQL Server};SERVER=Betav486", _
prompt:=rdDriverNoPrompt)
Set Qd = Cn.CreateQuery("TestChunk", "Select * from
Chunks Where PName = ?")
End Sub
Private Sub LoadFromFile_Click()
'
' 将文件定位并为该文件设置文件名。
'
With CommonDialog1
.Filter = "Pictures(*.bmp;*.ico)|*.bmp;*.ico"
.ShowOpen
FileName = .FileName
End With
End SubPrivate Sub ReadFromDB_Click()
If Len(NameWanted) = 0 Then _
NameWanted = InputBox("Enter name wanted", "Animal")
Qd(0) = NameWanted
Set Rs = Qd.OpenResultset(rdOpenKeyset,
rdConcurRowver)
If Rs Is Nothing Or Rs.Updatable = False Then
MsgBox "Can't open or write to result set"
Exit Sub
End If
If Rs.EOF Then
MsgBox "Can't find picture by that name"
Exit Sub
End If
Description = Rs!Description
DataFile = 1
Open "pictemp" For Binary Access Write As DataFile
Fl = Rs!Photo.ColumnSize
Chunks = Fl \ ChunkSize
Fragment = Fl Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = Rs!Photo.GetChunk(Fragment)
Put DataFile, , Chunk()
For I = 1 To Chunks
ReDim Buffer(ChunkSize)
Chunk() = Rs!Photo.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next I
Close DataFile
FileName = "pictemp"
End SubPrivate Sub SaveToDB_Click()
If Len(NameWanted) = 0 Then _
NameWanted = InputBox("Enter name for this" _
& " picture", "Animal")
Qd(0) = NameWanted
Set Rs = Qd.OpenResultset(rdOpenKeyset, _
rdConcurRowver)
If Rs Is Nothing Or Rs.Updatable = False Then
MsgBox "Can't open or write to result set"
Exit Sub
End If
If Rs.EOF Then
Rs.AddNew
Rs!PName = NameWanted
If Description = "" Then _
Description = InputBox("Describe the picture", _
"Don't care")
'Rs!Description = Description
Else
Rs.Edit
End If
DataFile = 1
Open FileName For Binary Access Read As DataFile
Fl = LOF(DataFile) ' 文件中数据的长度
If Fl = 0 Then Close DataFile: Exit Sub
Chunks = Fl \ ChunkSize
Fragment = Fl Mod ChunkSize
Rs!Photo.AppendChunk Null
ReDim Chunk(Fragment)
Get DataFile, , Chunk()
Rs!Photo.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For I = 1 To Chunks
Get DataFile, , Chunk()
Rs!Photo.AppendChunk Chunk()
Next I
Close DataFile
Rs.Update
End SubPrivate Sub FileName_Change()
Picture1.Picture = LoadPicture(FileName)
End Sub
这是MSDN中的一段例程(RDO),其他的差不多,关键是明白怎么做就行了.到MSDN中看看吧
Open App.Path & "\" & "Excel1.xls" For Binary As #1a = InputB(LOF(1), #1)
Close #1
Data1.Recordset.MoveFirst
Data1.Recordset.Edit
Data1.Recordset.Fields(1) = a
Data1.Recordset.Update
什么速度。
资源文件允许将应用程序特定版本的全部文本和位图收集到一起。这可以包括常数声明、图标、屏幕文本,以及可能在本地化版本之间或在修订版本或特定的配置之间发生变化的其它材料。向工程中添加资源
可以使用资源编译器外接程序创建资源文件。编译过的资源文件带有 .res 扩展名。每个工程只能包含一个资源文件。资源文件实际上是由一系列独立的字符串、位图或者其它项目组成的,其中每一项都有一个唯一的标识符。标识符可能是 Long 类型或 String 类型,取决于资源所代表的数据类型。例如,字符串的标识符为 Long 型,而位图的标识符则为 Long 型或 String 型。如想在代码中检索资源,应知道每个资源的标识符。引用资源的函数参数可以使用 Variant 数据类型。要将新资源文件添加到您的工程中,请按照以下步骤执行: 从“工具”菜单中选择“资源编辑器”,将在资源编辑器窗口打开一个空的资源文件。注意 必须安装资源编辑器外接程序。有关安装外接程序的信息,请参阅“管理工程”中的“使用向导和外接程序”。
在资源编辑器工具栏中选择“保存”按钮以保存资源文件。文件将被添加到“相关文档”部分下的“工程资源管理器”中。
要将已存在的资源文件添加到您的工程中,请
从“工程”菜单中选择“添加新资源”。您的工程中任何已存在的资源文件将被替换。
警告 假如您对已存在的资源文件做任何修改,将可能影响使用此资源文件的其它工程。确保您将文件保存在一个新文件名下。注意 必须安装资源编辑器外接程序。有关安装外接程序的信息,请参阅“管理工程”中的“使用向导和外接程序”。详细信息 关于资源文件的详细信息,请参阅“国际化”中的“使用本地化资源文件”。注意 Windows 资源文件随 16 位或 32 位应用程序而不同,如果试图将一个 16 位资源文件添加到一个工程中,Visual Basic 将产生一条错误信息。为了将资源文件添加到工程中,可从“工程”菜单中选择“添加文件”命令,这与将别的文件添加至工程中完全一样。一个工程只能接受一个资源文件,如果试图添加第二个扩展名为 .res 的文件,将产生错误。在代码中使用资源
Visual Basic 提供了三个函数从资源文件中检索数据以供在代码中使用。函数 描述
LoadResString 返回一个文本字符串。
LoadResPicture 返回一个 Picture 对象,例如位图、图标或光标。
LoadResData 返回一个 Byte 数组,用于象 .wav 之类的文件。
详细信息 请参阅相应函数主题。
使用本地化资源文件
Visual Basic 通过使用资源文件有效地把本地化信息从代码中分离出来。注意 工程中只能有一个资源文件,如果试图添加一个以上的资源文件 Visual Basic 将产生一个错误信息。把字符串保存在资源文件中的优点
编写代码时,可以调用 LoadResString、LoadResPicture 和 LoadResData 函数代替对文字、图象和数据的引用。把这些元素存储在资源文件中有两大好处: 提高性能和增加空间,这是因为字符串、位图、图标和数据可以不必在调用窗体或模块时就全部加载,而可以按需要从资源文件中加载。
把需要翻译的资源单独放在一个资源文件中,因此没有必要访问源代码或重新编译应用程序。
要创建资源文件,请按照以下步骤执行: 从“工程”菜单中选择“新资源文件”。
注意 该命令只有在资源编辑器外接程序加载的情况下才能使用。要加载资源管理器外接程序,请选择“外接程序”菜单中的“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”。在“打开一个资源文件”对话框中,为资源文件输入一个名称。资源文件名称将被添加到“工程资源管理器”的“相关文档”节点。
Visual Basic 把具有 .res 扩展名的文件识别为资源文件。如果资源文件不具有正确的扩展名,Visual Basic 将不会加载它。相反地,任何具有 .res 扩展名的文件被加入到工程时都会被 Visual Basic 当作资源文件处理,如果该文件不具有标准的资源文件格式,Visual Basic 将在第一次使用资源文件支持函数(LoadResString、LoadResPicture 和 LoadResData)或试图编译成 .exe 文件时产生错误信息。试图添加 16 位的资源文件到工程中也会产生同样的错误信息。资源文件被添加到工程后,.res 文件将出现在“工程”窗口中。与窗体或模块不同,在 Visual Basic 中不能查看 .res 文件。该文件是标准的资源文件,可由 Microsoft Visual C++ 和其它大部分的 Windows 开发工具创建或使用。一旦在“文件”菜单中选中“生成 projectname.exe”一项,Visual Basic 将把该文件中的所有资源编译到 .exe 文件中作为 Windows 的资源。在编译 .exe 文件之前和之后,.res 文件都是标准的 Windows 资源文件,这意味着任何标准的 Windows 资源编辑器都可以加载该文件。要编辑资源文件,请按照以下步骤执行: 从“工具”菜单中选择“资源编辑器”。
注意 该命令仅在资源编辑器外接程序加载的情况下才能使用。要加载资源编辑器外接程序,请从“外接程序”菜单中选择“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”框。从“资源编辑器工具栏”中选择一个按钮来编辑一个现存资源文件或添加一个新的。有关编辑资源文件的更详细信息,请参阅资源编辑器外接程序文档。
锁定资源文件
Visual Basic 可以对 .res 文件进行文件锁定,以防止同时有几个应用程序使用该文件。在下列条件下 .res 文件将被锁定: Visual Basic 处于运行模式或中断模式。
创建了一个 .exe 文件。
详细信息 关于如何使用资源文件开发多区域应用程序的示例,请参阅本章后面的“自动取款机应用程序示例”。 关于使用资源文件编程的背景资料,请参阅“再论编程”中的“利用资源文件进行工作”。
dll
为什么不放到库里?
存入数据库中,可用ado2.5的adodb.stream可实现。
以下代码供你参考
Public Sub savefile(ByVal tempfile As String)
Dim mstream As ADODB.Stream
Dim flen As Long
adobanbenwenjian.Fields("wenjianming").value = tempfile
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
flen = FileLen(tempfile)
If Len(tempfile) <> 0 Then
mstream.LoadFromFile tempfile
adobanbenwenjian.Fields("wenjian").value = mstream.Read
Dim filever As clsfilever
Dim rtnfilever As Variant
Set filever = New clsfilever
rtnfilever = filever.DisplayVerInfo(tempfile)
adobanbenwenjian.Fields("banbenhao").value = rtnfilever(1)
adobanbenwenjian.Fields("beizhu").value = rtnfilever(2)
Set filever = Nothing
End If
Set mstream = Nothing
End Sub
只有将图片放如数据库中,才是真正意义上的数据库
存入数据库中,可用ado2.5的adodb.stream可实现。
以下代码供你参考
Public Sub savefile(ByVal tempfile As String)
Dim mstream As ADODB.Stream
Dim flen As Long
adobanbenwenjian.Fields("wenjianming").value = tempfile
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
flen = FileLen(tempfile)
If Len(tempfile) <> 0 Then
mstream.LoadFromFile tempfile
adobanbenwenjian.Fields("wenjian").value = mstream.Read
End If
Set mstream = Nothing
End Sub
dim stream as stream
set stream = new stream
stream.loadfromfile myfilename
rs("objfield").value=stream
set stream=nothing
end function具体实现我可以通过Email发给你,我的Email是:[email protected]
stream
如果说到安全问题,这个因该不是问题,因为服务器都有安全设置,就看你的文件保存的位置了,如果你使用过微软的EXCHANGE2000你就可以看到,邮件的目录是不可以浏览的不论是在IIS里还是在资源管理器里。
如果是mdb那么:路径sql 看情况!