hur.cn - 华软网

 热门搜索

请问:怎样保存文件到数据,并可以用相应的软件打开文件如word,excel等等

  作者:未知    来源:网络    更新时间:2019/4/16
我想把资料保存到数据库,然后能够打开资料,如:
  保存.txt;.doc;.xls资料,然后有能够用响应的记事本,WORD,EXCLE打开资料,
讨教列位有没有好的想法,最好给个实例
------华软网友回答------
我也有此想法,关注中。。。
------华软网友回复------
步骤
1.用fileread把资料读到blob变量中,注意>32k时用循环读取, 联机帮助上有. 以前的贴子也有很多. 
2.用updateblob来更新到数据库
3.用selectblob来从数据库中读取到bolb变量中
4.a(方法1).1 用filewrite写到当地硬盘上.
4.a.2 用ole_xls.open()等方法打开. 

4.b(方法二).在窗口上放一个 ole  word 可视控件, 然后用 ole_word.object.objectdata = blob 来打开.





------华软网友回复------
每一个步骤的代码都能够在联机帮助或以前的贴子中找到! 我就不贴出来了.
------华软网友回复------
d
------华软网友回复------
100分  我来给你全贴上
------华软网友回复------
//上传资料 (所有资料)

//-------------------------先保存---------------------------
if dw_1.getRow () <= 0 then return

if dw_1.event ue_update () = 1 then
commit using sqlca;
else
rollback using sqlca;
return
end if
string ls_No
ls_no = dw_1.getItemString (dw_1.getRow (), "资料名称")
//-----------------------------------------------------------

String   ls_FileName, ls_pathName, ls_currDir, ls_fileType_new, ls_fileType_old
int    li_ret, li_filePtr, li_loops, i
long ll_fileLen, ll_bytes_read, ll_new_pos
blob lbb_read, lbb_total
dateTime ldt_old //原始更新时间

//ls_currDir = getCurrentDirectory ()  //当前路径  
li_ret = GetFileOpenName("选择资料",ls_pathName, ls_FileName,"doc","WORD资料(*.doc),*.doc,所有资料(*.*),*.*") 
//changeDirectory (ls_currDir)

IF Li_ret <= 0 then return  

setPointer (hourGlass!)

//获得资料类型和更新时间
ls_fileType_old = dw_1.getItemString (dw_1.getRow (), "资料类型") //保存原来资料类型
ldt_old = dw_1.getItemDateTime(dw_1.getRow (), "更新时间") 
ls_fileType_new = mid (trim (ls_fileName), pos (trim (ls_fileName), '.') )
dw_1.setItem (dw_1.getRow (), '资料类型', ls_fileType_new)
dw_1.setItem (dw_1.getRow (), "更新时间", gf_getServerTime () )

li_filePtr = fileOpen (ls_pathName, STREAMMODE!, READ!, Shared!)
if li_filePtr <> 1 then
messageBox ("毛病", "打开资料失利!", stopSign!)
return
end if

ll_fileLen = fileLength (ls_pathname)
if ll_fileLen > 32766 then
li_loops = long ((ll_fileLen - 1)/32766) + 1
else
li_loops = 1
end if
//messageBox (string (ll_fileLen) , string (li_loops) )
for i = 1 to li_loops step 1
ll_bytes_read = fileRead (li_filePtr, lbb_read)
lbb_total = lbb_total + lbb_read
ll_new_pos = ll_new_pos + ll_bytes_read
fileSeek (li_filePtr, ll_new_pos, FROMBEGINNING!)
next
FileClose (li_filePtr)

sqlca.autocommit = true
UPDATEBLOB Q资料库
SET 资料 = :lbb_total
WHERE   资料名称 = :ls_no
USING SQLCA;
if SQLCA.SQLCode = 0 then
messageBox ("提醒", "保存资料成功!")
else
messageBox ("数据库毛病", "保存资料失利!~r~n~r~n毛病代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + & 
sqlca.sqlERRText, stopSign!)
dw_1.setItem (dw_1.getRow (), '资料类型', ls_fileType_old)
dw_1.setItem (dw_1.getRow (), '更新时间', ldt_old)
end if
dw_1.event ue_update ()  //更改了资料类型
sqlca.autoCommit = false


// - 用大文本措置惩罚 - 运用系统打开方式
string ls_fileName, ls_fileNameTemp, ls_fileType
blob lbb_text, lb_temp

if dw_1.getRow () <= 0 then return
ls_fileName = dw_1.getItemString (dw_1.getRow (), "资料名称")
ls_fileType = dw_1.getItemString (dw_1.getRow (), "资料类型")

ls_fileNameTemp = ls_fileName
ls_fileName = gs_currDir + '\tempPic\' + ls_fileName + ls_fileType

setpointer (hourGlass!)

SELECTBLOB 资料
INTO  :lbb_text
FROM Q资料库
WHERE   资料名称 = :ls_fileNameTemp
USING  SQLCA;

//messageBox ('',string ( len (lbb_text)/32766) )

if SQLCA.SQLCode = -1 then 
messageBox ("数据库毛病", "从数据库中读取资料失利!~r~n~r~n毛病代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + & 
sqlca.sqlERRText, stopSign!)
return -1
else
if len (lbb_text) > 0 then
long ll_handle, ll_fileLen, i, ll_loops

ll_handle = FileOpen(ls_fileName, StreamMode!, Write!, lockWrite!, replace!)
ll_fileLen = len(lbb_text)
if ll_fileLen > 32766 then
ll_loops = long ((ll_fileLen - 1)/32766) + 1
else
ll_loops = 1
end if
//messageBox (string (ll_fileLen) , string (ll_loops) )  //
For i=1 to ll_loops step 1
     lb_temp = Blobmid(lbb_text,(i - 1)*32765+1,32765)
    filewrite(ll_handle,lb_temp)
Next
FileClose(ll_handle)
//打开
ShellExecute(handle (parent), '', ls_fileName, "shell32.dll", '', 0)
return 1
else
messageBox ("提醒", "还没有上传资料,请先上传!", exclamation!)
return -1
end if
end if
setPointer (arrow!)
------华软网友回复------
注意: ShellExecute(handle (parent), '', ls_fileName, "shell32.dll", '', 0)
这个函数好申明一个API函数:

FUNCTION ulong ShellExecute(ulong hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,ulong nShowCmd) LIBRARY "shell32.dll" ALIAS FOR "ShellExecuteA"
------华软网友回复------
谢谢!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。