PROCEDURE SqlFileImageRead() LOCAL lcTempFile LOCAL lnHandle,lnResult LOCAL lcFileName lcTempFile = thisapp.oDataHandler.MakeTempFileName() + ".dbf" THIS.EraseFile(lcTempFile) lcFileName = thisapp.oDataHandler.scViewPath + ALLTRIM(thisapp.GetNetWorkName()) + this.scFileSuffix + this.scFileExt && ".jpg" IF FILE(lcFileName) ERASE (lcFileName) ENDIF * take data from SQL server lcSQL = [SELECT picture as FileImage FROM MemberPhotos WHERE cMemberID = ?tcMemberID AND cSiteID = ?tcSiteID] lnResult = SQLExec(this.snHandle,lcSql,"csrFileImage") IF lnResult <> SQL_ERROR * We have a general field in 'csrPhoto' cursor because image type on SQL Server * mapped to general field in VFP. * save data to temporary table SELECT csrFileImage COPY TO (lcTempFile) USE * change general field type to memo lnHandle = FOPEN(lcTempFile,12) FSEEK(lnHandle,43) FWRITE(lnHandle,'M') FCLOSE(lnHandle) * save data from memo field into file USE (lcTempFile) ALIAS tempFileImage STRTOFILE(tempFileImage.FileImage,lcFileName) USE IN tempFileImage THIS.EraseFile(lcTempFile) ENDIF RETURN lcFileNameThe following will store a file to a SQL Table
PROCEDURE SqlFileImageWrite() LOCAL lcTempFile,lnHandle,lnResult lcTempFile = thisapp.oDataHandler.MakeTempFileName() + ".dbf" THIS.EraseFile(lcTempFile) * create temporary buffer table SELECT 0 CREATE TABLE (lcTempFile) FREE (PICTURE M) * Place binary data from file into memo APPEND BLANK APPEND MEMO PICTURE FROM (tcFileName) OVERWRITE USE * change memo field type to general to match to image type on SQL Server lnHandle = FOPEN(lcTempFile,12) FSEEK(lnHandle,43) FWRITE(lnHandle,'G') FCLOSE(lnHandle) lcEditUser = thisapp.oSecurityHandler.GetUserName() ltEditTime = DATETIME() * write data to SQL Server USE (lcTempFile) ALIAS csrFile * Check if a record already exists for this file lcSqlFind = [SELECT cMemberID FROM MemberPhotos WHERE cMemberID = ?tcMemberID AND cSiteID = ?tcSiteID] lnResult = SQLEXEC(this.snHandle,lcSqlFind,"csrFileExists") IF lnResult <> SQL_ERROR IF RECCOUNT("csrFileExists") = 0 lcSql = [insert into MemberPhotos VALUES ] +; [(?tcMemberID,?tcSiteID,?csrFile.Picture,?lcEditUser,?ltEditTime,?lcEditUser,?ltEditTime)] ELSE lcSql = [UPDATE MemberPhotos SET Picture = ?csrFile.Picture, ]+; [cUpdateUser = ?lcEditUser,tUpdateDate = ?ltEditTime ] +; [WHERE cMemberID = ?tcMemberID AND cSiteID = ?tcSiteID] ENDIF lnResult = SQLExec(this.snHandle,m.lcSQL) ASSERT lnResult <> SQL_ERROR USE IN csrFileExists ENDIF USE IN csrFile RETURN lnResult <> SQL_ERRORHope that helps!