[轉]VB圖片讀取!

2023-10-12 02:38
文章标签 vb 讀取 圖片

本文主要是介绍[轉]VB圖片讀取!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. '将二进制文件添加到数据库中(该记录必须在存在)
  2. '函数名:FileToRecode
  3. '参数:  P_Cnn ADODB连接,TabName 目标数据表,FldName 目标字段,WhereStr 更新条件,FileName 源文件名
  4. '返回值:
  5. '例:    CALL  FileToRecode(P_Cnn,"AchGoods","GdsPhoto","Where gdsid='001'","C:/Tmp.Bmp")
  6. Public Function FileToRecode(ByRef P_Cnn As ADODB.Connection, _
  7.                              TabName As String, _
  8.                              FldName As String, _
  9.                              WhereStr As String, _
  10.                              Filename As StringAs Boolean
  11.     
  12.     Dim RsB As New ADODB.Recordset
  13.     Dim Person_name As String
  14.     Dim StrSql As String
  15.     Dim File_Num As String
  16.     Dim File_Length As String
  17.     Dim Bytes() As Byte
  18.     Dim Num_Blocks As Long
  19.     Dim Left_Over As Long
  20.     Dim Block_Num As Long
  21.     
  22.     Err.Clear
  23.     On Error Resume Next
  24.     
  25.     File_Num = FreeFile
  26.     Filename = Trim$(Filename)
  27.     
  28.     If P_Cnn.State <> 1 Then P_Cnn.Open
  29.     
  30.     If Len(Dir$(Filename)) = 0 Or Len(Filename) = 0 Then FileToRecode = FalseExit Function
  31.     
  32.     Open Filename For Binary Access Read As #File_Num
  33.         File_Length = LOF(File_Num)                 '取文件大小
  34.         If File_Length > 0 Then
  35.             Num_Blocks = File_Length / Block_Size
  36.             Left_Over = File_Length Mod Block_Size
  37.             
  38.             If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where"Then WhereStr = "Where " & Trim$(WhereStr)
  39.             StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
  40.             Set RsB = RsOpen(P_Cnn, StrSql, False'连接式记录集
  41.             If Not (RsB.EOF And RsB.BOF) Then
  42.             
  43. '/            '不分块写
  44. '/            ReDim Bytes(File_Length)
  45. '/            Get #File_Num, , Bytes()
  46. '/            DoEvents
  47. '/            RsB.Fields(FldName).AppendChunk Bytes()
  48.             '/分块写
  49.                 ReDim Bytes(Block_Size)
  50.                 For Block_Num = 1 To Num_Blocks
  51.                     Get #File_Num, , Bytes()
  52.                     RsB.Fields(FldName).AppendChunk Bytes()
  53.                 Next
  54.                 
  55.                 If Left_Over > 0 Then
  56.                     ReDim Bytes(Left_Over)
  57.                     Get #File_Num, , Bytes()
  58.                     RsB.Fields(FldName).AppendChunk Bytes()
  59.                 End If
  60.                 RsB.Update
  61.                 DoEvents
  62.             End If
  63.             If RsB.State = adStateOpen Then
  64.                RsB.Close
  65.                Set RsB = Nothing
  66.             End If
  67.         End If
  68.     Close #File_Num
  69.     Erase Bytes
  70.     FileToRecode = (Err.Number = 0)
  71.     Err.Clear
  72. End Function
  73. '
  74. '将二进制数据从记录中取出
  75. '函数名:RecodeToFile
  76. '参数:  P_Cnn ADODB连接,TabName 源数据表,FldName 源字段名, WhereStr 取字段条件,FileType 生成临时文件的类型
  77. '返回值:'一个临时文件名
  78. '例:    GetTmpFile=RecodeToFile(P_Conn,"achgoods","achphoto","where gdsid='001',"bmp")
  79. Public Function RecodeToFile(ByRef P_Cnn As ADODB.Connection, _
  80.                              TabName As String, _
  81.                              FldName As String, _
  82.                              WhereStr As String, _
  83.                              Optional FileType As String = "Bmp"As String
  84.     
  85.     Dim Rs As New ADODB.Recordset
  86.     Dim StrSql As String
  87.     
  88.     Dim Bytes() As Byte
  89.     Dim File_Name As String
  90.     Dim File_Num As Integer
  91.     Dim File_Length As Long
  92.     Dim Num_Blocks As Long
  93.     Dim Left_Over As Long
  94.     Dim Block_Num As Long
  95.     Dim WorkPath As String
  96.     Dim TmpDir As New SmSysCls
  97.     
  98.     Err.Clear
  99.     On Error Resume Next
  100.     
  101.      WorkPath = TmpDir.GetFolder(SmWinTempDirectory)
  102.      If Dir$(WorkPath, vbDirectory) = "" Then WorkPath = App.Path
  103.      If Right$(WorkPath, 1) <> "/" Then WorkPath = WorkPath & "/"
  104.     
  105.      If Left$(Trim$(UCase$(WhereStr)), Len("where")) <> UCase$("where"Then WhereStr = "Where " & Trim$(WhereStr)
  106.      StrSql = "Select Top 1 [" & TabName & "].[" & FldName & "] From [" & TabName & "] " & WhereStr
  107.      Set Rs = RsOpen(P_Cnn, StrSql)
  108.      If Rs.BOF And Rs.EOF Then Exit Function
  109.      
  110.      If P_Cnn.State <> 1 Then P_Cnn.Open
  111.      
  112.      If Not IsNull(Rs.Fields(FldName)) Then
  113.          File_Name = WorkPath & "TmpFile." & FileType
  114.          If Len(Dir(File_Name)) <> 0 Then Kill File_Name
  115.          File_Num = FreeFile
  116.          Open File_Name For Binary As #File_Num
  117.              File_Length = CT.ToLng(Rs.Fields(FldName).ActualSize) '取字段的实际大小
  118. '/不分块读写
  119. '/             If File_Length > 0 Then
  120. '/                Bytes() = Rs.Fields(FldName).GetChunk(File_Length)
  121. '/                Put #File_Num, , Bytes()
  122. '/             Else
  123. '/                Err = -1
  124. '/             End If
  125. '/分块读写
  126.              Num_Blocks = File_Length / Block_Size
  127.              Left_Over = File_Length Mod Block_Size
  128.              For Block_Num = 1 To Num_Blocks
  129.                  Bytes() = Rs.Fields(FldName).GetChunk(Block_Size)
  130.                  Put #File_Num, , Bytes()
  131.              Next
  132.              If Left_Over > 0 Then
  133.                  Bytes() = Rs.Fields(FldName).GetChunk(Left_Over)
  134.                  Put #File_Num, , Bytes()
  135.              End If
  136.              Erase Bytes
  137.          Close #File_Num
  138.          
  139.         If Rs.State = adStateOpen Then
  140.            Rs.Close
  141.            Set Rs = Nothing
  142.         End If
  143.             
  144.          Erase Bytes
  145.     End If
  146.     RecodeToFile = IIf(Err.Number = 0, File_Name, "")
  147.     Set TmpDir = Nothing
  148.     Err.Clear
  149. End Function

这篇关于[轉]VB圖片讀取!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192634

相关文章

用VB创建开始菜单快捷方式(无需其他DLL)

Option Explicit   Private Sub Command1_Click()   CreateProgManGroup Me, "测试", "test.grp"   CreateProgManItem Me, "d:\ghost.exe", "Ghost"   CreateProgManItem Me, "d:\setupQQ.exe", "QQ"   End

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

VB项目中必需的几点技巧

1.    点击右上角的关闭按钮,要弹出“提示”,是否关闭,但用右键关闭时,不能重复提示 在vb中找到这个事件Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)If MsgBox("是否要退出", vbYesNo + vbDefaultButton2, "提示") = vbNo ThenCancel

在VB.net中,如何把20240906转化成日期格式

==标题== vb.net中,如何把20240906转化成日期格式 ==正文== 在 VB.NET 中,将一个数字字符串(如 "20240906")转换为日期格式,你可以使用 `DateTime.Parse` 或 `DateTime.TryParse` 方法。这些方法可以将符合日期格式的字符串解析为 `DateTime` 对象。以下是如何将 "20240906" 这样的字符串转换为日期格式的示

学习VB语言的步骤和资源

1. 基础知识 1.1 了解VB的基本语法 变量声明**: 使用 `Dim` 关键字。 Dim myVariable As Integer - **条件语句**: 使用 `If...Then...Else`。   If myVariable > 10 ThenMsgBox "Greater than 10"ElseMsgBox "10 or less"End If - **循

EmguCV学习笔记 VB.Net 第9章 视频操作

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客 笔者的

EmguCV学习笔记 VB.Net 8.2 分水岭法 watershed

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客 笔者的

【VB.NET】台湾和大陆术语对照

【前言】 看了曹祖圣先生的《Visual Basic 程式开发线上教学课程》之后,抛开技术知识不讲,最大的感受就是台湾和大陆两地相关术语真的是差别很大,刚开始听的时候,很别扭。因此把我总结的一些术语分享给大家,不断更新。 【对照】 台湾大陆 物件对象 物件导向面向对象 类别类 呼叫调用 建构式构造函数 宣告声明 阵列数组 变数变量 常

EmguCV学习笔记 VB.Net 9.1 VideoCapture类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客 笔者的博

VB.NET邮件群发纯htlm二维码

发送邮件采用了frame的System.Net.Mail Dim msg As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()msg.To.Add(mailToStr)msg.From = New MailAddress("liuc@qq.com", "Liuc", System.Text.Encoding.