qq82015930 发表于 2011-7-18 10:20:12

AU3能将图片转二进制写到数据库吗[已解决]

本帖最后由 qq82015930 于 2011-7-24 21:08 编辑

AU3能将图片转二进制写到数据库吗

能的话给个转换和读取的列子,谢谢!

唉!转换到图片始终是空白

小凯 发表于 2011-7-18 11:23:38

同求.....哈哈!期待高手解答

netegg 发表于 2011-7-18 11:27:56

目前所知,au3可以把十六进制转化为图像输出,反过来操作不知道如何整

qq82015930 发表于 2011-7-18 14:37:05

AU3 不会不行哟。C++VB 都行拉。相信AU3能做到的。只是还没高手发现.

小凯 发表于 2011-7-18 15:21:52

纠结啊~~~~~!期待期待!!!!!!!!!!

tubaba 发表于 2011-7-18 16:45:35

本帖最后由 tubaba 于 2011-7-18 16:51 编辑

肯定是可以的,只要数据库字段大小足够储存这些信息,sql不知道text类型最多可以放多少个字符,可能是6万5千左右,我试过将粘贴到richedit的文件用_GUICtrlRichEdit_StreamToVar生成数据流再放入数据库,没有问题,可以重新提取到richedit内

kk_lee69 发表于 2011-7-18 21:30:58

可以ㄚ@@我已經可以做到了

kk_lee69 发表于 2011-7-18 21:42:16

本帖最后由 kk_lee69 于 2011-7-18 22:03 编辑

重點是資料庫版本 跟語法而已.................以下用 SQL 2000 為例子這個是比較複雜的....聽說SQL 2000以上的資料庫 有更方便的方法

第一種新增的方式......P.S 資料庫裡面的資料表為二進制格式的資料表欄位$hHandle = FileOpen("c:\123.jpg",16)
$fRead = Binary(FileRead($hHandle))
$conn.Execute("insert into comPicture (picID,picType,picName,Picture,Memo,Refcount,Step,JustSize) values ('123',1,'123.jpg',"&$fRead&",'自動轉入程式新增',0,-1,1)");插入一條紀錄注意上面 $fRead這個變數的地方..................用這樣的方式就可以用下面的語法直接寫入.......二進位的資料欄

可是..........如果原本的那個位置是屬於已經有存過照片的.....是屬於更新的.....就不能用上面的方法.....要用下面的語法才能更新$hHandle = FileOpen($jpgin&$RS.Fields (0).value&".jpg",16)
$fRead = Binary(FileRead($hHandle))
$conn.Execute("DECLARE @ptrval binary(16) SELECT @ptrval=TEXTPTR(Picture)FROM comPictureWHERE PicID='123'UPDATETEXT comPicture.Picture @ptrval 0 NULL "&$fRead)這段程式是我寫給正航系統 T357 ERP 用的有實測過........

PS 上面的範例 可能必須貼到 編輯器 去看會比較清楚....因為裡面我帶了很多 從資料表比對的資料 $RS.Fields (0).value這樣的東西 都是我從其他資料表比對出來要更新的值.......有關圖片的 主要是 $fRead 這個變數

P.S2 我修正一下好了....這樣會比較清楚點吧

happytc 发表于 2011-7-19 01:53:59

本帖最后由 happytc 于 2011-7-19 02:14 编辑

难道不是简单地:

#include <SQLite.au3>

Local $hImage, $fData, $hFileName, $sData, $hImageQuery, $hImageRow

_SQLite_Startup (@ScriptDir & "\sqlite3.dll")
_SQLite_Open(@ScriptDir & "\image.db")
_SQLite_Exec(-1,"CREATE TABLE IF NOT EXISTS Test (data blob);")

$hImage = FileOpen(@ScriptDir & "\LiveCapture.ico", 16)
$fData = FileRead($hImage)
$sData = _SQLite_Encode($fData)
MsgBox(0, 0, $fData)
_SQLite_Exec(-1,"INSERT INTO Test VALUES (" & $sData & ");")
_SQLite_Query(-1,"SELECT data FROM Test WHERE rowid=1;", $hImageQuery)
_SQLite_FetchData($hImageQuery, $hImageRow, 1)
MsgBox(0, 0, Hex($hImageRow))
_SQLite_QueryFinalize ($hImageQuery)
$hFileName = FileOpen(@ScriptDir & "\imageDB.gif", 2)
FileWrite($hFileName, $hImageRow)
_SQLite_Close()
_SQLite_Shutdown()

z761003 发表于 2012-2-27 11:41:25

回复 8# kk_lee69


    前辈,你只说明写入数据库如何写,那读出来呢?从数据库中取出,并转为图片文件如何操作??

kk_lee69 发表于 2012-2-28 01:38:21

回复 10# z761003

讀出來應該不困難吧.....因為這樣的圖片 通常是以 二進制存在資料庫裡面.....

用SQL 直接讀取.....然後再AU3 另存檔案附檔名是JPG 這樣就可以看到呀

z761003 发表于 2012-4-13 08:42:03

还是不太明白,如果读出能来点原码研究下就好了

z761003 发表于 2012-4-13 09:32:55

折腾了半天,读出的图片无法显示,请赐教

yeqing880 发表于 2012-4-13 09:49:53

http://www.autoitx.com/forum.php?mod=viewthread&tid=19253&highlight=sql%2B%CD%BC%C6%AC

zldfsz 发表于 2012-4-13 10:03:39

回复 14# yeqing880


谢谢,研究下
页: [1] 2
查看完整版本: AU3能将图片转二进制写到数据库吗[已解决]