我在做一個紙品管理系統,用戶要求在輸入紙箱資料時,可以先從打開的圖片檔案復制圖片,然后再粘貼到錄入界面的相應位置,即可將圖片保存到紙箱資料表中。
請問這個應該如何實作,是否要使用API才能實作?謝謝!
uj5u.com熱心網友回復:
這個可以在資料視窗中 加一個圖片控制元件,采用selectblob讀取資料庫列,UpdateBlob再更新uj5u.com熱心網友回復:
看一下這個函式,說的很明白//====================================================================
// [功能] 對照片進行初始化,改變照片
//--------------------------------------------------------------------
// [入口引數] ai_flag 0 初始化照片
// 1 讀取照片到臨時檔案中,當檢索時用
// 2 更改照片
// 3 保存照片
//--------------------------------------------------------------------
// [回傳值] 0 success
// -1 failure
//
//--------------------------------------------------------------------
// [使用特殊約定]臨時檔案在當前路徑下且名為F#&@bmp.@@@
//--------------------------------------------------------------------
//[維護歷史] Kalen xiao 2001-1-7
//====================================================================
Integer li_filehandle,i,li_multiple,rtn
Long ll_filelength
Boolean lb_autocommit
String ls_pfilename,ls_named
Blob lbb_photoread,lbb_photo
Choose Case ai_flag
Case 0
If FileExists(gs_sysrunpath+"\bmp\F#&@bmp.@@@") Then
If Not FileDelete(gs_sysrunpath+"\bmp\F#&@bmp.@@@") Then Return 1
End If
tab_1.tabpage_1.dw_2.Object.p_photo.Filename = gs_sysrunpath+"\bmp\F#&@bmp.@@@"
Return 1
Case 1
SelectBlob fphoto Into :lbb_photo From t_hrempl
where fentityno = :gs_entityno
And fempno = :is_empno
Using sqlca;
If sqlca.SQLNRows <> 1 Then
Return -1
End If
If IsNull(lbb_photo) Then Return 1
If Mod(Len(lbb_photo),32765) <> 0 Then
li_multiple = Round(Len(lbb_photo)/32765,0) + 1
Else
li_multiple = Len(lbb_photo)/32765
End If
li_filehandle = FileOpen(gs_sysrunpath+"\bmp\F#&@bmp.@@@",streammode!,Write!,lockwrite!,Replace!)
If li_filehandle = -1 Then
Return -1
End If
//存入臨時檔案
For i = 1 To li_multiple
lbb_photoread = BlobMid (lbb_photo,(i - 1)*32765 + 1 ,32765 )
If FileWrite(li_filehandle,lbb_photoread) = -1 Then
Return -1
End If
Next
FileClose(li_filehandle)
If tab_1.tabpage_1.dw_2.Object.p_photo.Filename <> gs_sysrunpath+"\bmp\F#&@bmp.@@@" Then
tab_1.tabpage_1.dw_2.Object.p_photo.Filename = gs_sysrunpath+"\bmp\F#&@bmp.@@@"
End If
Return 0
Case 2
rtn = GetFileOpenName("Select File",ls_pfilename,ls_named, "bmp","Bmp Files (*.bmp),*.bmp")
If rtn = -1 Or rtn = 0 Then
Return -1
Else
tab_1.tabpage_1.dw_2.Object.p_photo.Filename = ls_pfilename
cb_sav.Enabled = True
Return 1
End If
Case 3
ls_pfilename = ''
lbb_photo = Blob('')
ls_pfilename = tab_1.tabpage_1.dw_2.Object.p_photo.Filename
If ls_pfilename = gs_sysrunpath+"\bmp\F#&@bmp.@@@" Then Return 1
//need update
ll_filelength = FileLength(ls_pfilename)
li_filehandle = FileOpen(ls_pfilename,streammode!,Read!,lockwrite!,Replace!)
If li_filehandle = -1 Then
Return -1
End If
If ls_pfilename = '' Then
Return 0
End If
li_multiple = Round(ll_filelength/32765,0) + 1
For i = 1 To li_multiple
If FileRead(li_filehandle,lbb_photoread) = -1 Then Return -1
lbb_photo = lbb_photo + lbb_photoread
Next
FileClose(li_filehandle)
If IsNull(lbb_photo) Then
Return -1
End If
lb_autocommit = sqlca.AutoCommit
sqlca.AutoCommit = True;
UpdateBlob t_hrempl set fphoto = :lbb_photo where fentityno = :istr_dot.fstr3 And &
fempno = :istr_dot.fstr4;
If sqlca.SQLCode = 0 Then
COMMIT Using sqlca;
sqlca.AutoCommit = lb_autocommit;
Return 1
Else
ROLLBACK Using sqlca;
sqlca.AutoCommit = lb_autocommit;
Return -1
End If
End Choose
Return 0
uj5u.com熱心網友回復:
謝謝,我要的效果是 從autocad或其他畫圖軟體中復制一塊 粘貼到輸入界面 讓后保存到資料庫我升級以前的系統delphi寫的,用的TDBimage 請問PB中怎么辦?
請高手幫忙!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109300.html
標籤:API 調用
