CLEAR
* Test Data yarat - Create test data
lnHandle = SQLSTRINGCONNECT('Driver={SQL Native Client};Server=.\SQLExpress;Trusted_Connection=yes')
CURSORSETPROP("MapBinary",.T.,0)
TEXT TO lcCreate noshow
IF NOT EXISTS ( SELECT name
FROM sys.databases
WHERE name = N'ImageDb' )
Create DATABASE [ImageDb]
ENDTEXT
SQLEXEC(m.lnHandle,m.lcCreate)
SQLEXEC(m.lnHandle,'Use ImageDb')
SQLEXEC(m.lnHandle,'Create Table ImageTable1'+;
' (pkId uniqueidentifier rowguidcol default NewID(),'+;
' fName varchar(20),lName varchar(20),'+;
' personPicture image)')
SQLEXEC(m.lnHandle,'Create Table ImageTable2'+;
' (pkId uniqueidentifier rowguidcol default NewID(),'+;
' fName varchar(20),lName varchar(20),'+;
' personPicture varbinary(max))')
lcImagePath = _samples + 'data\graphics'
FOR ix=1 TO ADIR(aFiles, ADDBS(m.lcImagePath)+'*.*')
IMAGE = CREATEBINARY(FILETOSTR(ADDBS(m.lcImagePath)+aFiles[m.ix,1]))
fname = PROPER(LEFT(aFiles[m.ix,1],4))
lName = PROPER(SUBSTR(aFiles[m.ix,1],5,4))
SQLEXEC(m.lnHandle, ;
"insert into ImageTable1 (fName,lName,personPicture)"+;
" values (?m.fname,?m.lname,?m.image)")
SQLEXEC(m.lnHandle, ;
"insert into ImageTable2 (fName,lName,personPicture)"+;
" values (?m.fname,?m.lname,?m.image)")
ENDFOR
SQLDISCONNECT(m.lnHandle)
* Test Data yarat - Create test data
* Form ile goster - Show on a form
PUBLIC oForm1, oForm2
oForm1 = CREATEOBJECT('myFormWithODBC')
oForm1.SHOW
oForm2 = CREATEOBJECT('myFormWithADO')
oForm2.LEFT=200
oForm2.TOP=200
oForm2.SHOW
DEFINE CLASS myFormWithODBC AS FORM
DATASESSION = 2
HEIGHT = 400
WIDTH = 600
CAPTION='ODBC - Bug'
ADD OBJECT myGrid1 AS GRID WITH HEIGHT = 200, TOP = 0,WIDTH = 400, RECORDSOURCE = 'Sample1'
ADD OBJECT myGrid2 AS GRID WITH HEIGHT = 200, TOP = 200,WIDTH = 400, RECORDSOURCE = 'Sample2'
ADD OBJECT myImage1 AS MyImage WITH LEFT = 410,TOP = 0,HEIGHT=200,WIDTH=190,STRETCH=1
ADD OBJECT myImage2 AS MyImage WITH LEFT = 410,TOP = 200,HEIGHT=200,WIDTH=190,STRETCH=1
PROCEDURE LOAD
Set Safety Off
lnHandle = SQLSTRINGCONNECT('Driver={SQL Native Client};Server=.\SQLExpress;Trusted_Connection=yes')
CURSORSETPROP("MapBinary",.T.,0)
SQLEXEC(m.lnHandle,'select * from ImageDb..ImageTable1','Sample1')
SQLEXEC(m.lnHandle,'select * from ImageDb..ImageTable2','Sample2')
SQLDISCONNECT(m.lnHandle)
ENDPROC
PROCEDURE myGrid1.AFTERROWCOLCHANGE
LPARAMETERS nColIndex
IF THIS.ROWCOLCHANGE%2 = 1
THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
ENDIF
ENDPROC
PROCEDURE myGrid2.AFTERROWCOLCHANGE
LPARAMETERS nColIndex
IF THIS.ROWCOLCHANGE%2 = 1
THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
ENDIF
ENDPROC
PROCEDURE INIT
THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
ENDPROC
ENDDEFINE
DEFINE CLASS myFormWithADO AS FORM
DATASESSION = 2
HEIGHT = 400
WIDTH = 600
oCa1 = NULL
oCa2 = NULL
CAPTION="CursorAdapter with ADO - Correct"
ADD OBJECT myGrid1 AS GRID WITH HEIGHT = 200, TOP = 0,WIDTH = 400, RECORDSOURCE = 'Sample1'
ADD OBJECT myGrid2 AS GRID WITH HEIGHT = 200, TOP = 200,WIDTH = 400, RECORDSOURCE = 'Sample2'
ADD OBJECT myImage1 AS MyImage WITH LEFT = 410,TOP = 0,HEIGHT=200,WIDTH=190,STRETCH=1
ADD OBJECT myImage2 AS MyImage WITH LEFT = 410,TOP = 200,HEIGHT=200,WIDTH=190,STRETCH=1
PROCEDURE LOAD
Set Safety Off
LOCAL cn AS 'AdoDb.Connection'
cn = CREATEOBJECT('AdoDb.Connection')
cn.ConnectionString = "Provider=SQLNCLI10;server=.\SQLExpress;Trusted_Connection=yes"
cn.OPEN()
rs1 = cn.Execute("select * from ImageDb..ImageTable1")
rs2 = cn.Execute("select * from ImageDb..ImageTable2")
THIS.oCa1 = CREATEOBJECT('Cursoradapter')
THIS.oCa2 = CREATEOBJECT('Cursoradapter')
THIS.oCa1.DATASOURCETYPE = "ADO"
THIS.oCa2.DATASOURCETYPE = "ADO"
THIS.oCa1.ALIAS = 'Sample1'
THIS.oCa2.ALIAS = 'Sample2'
THIS.oCa1.CURSORFILL(.F.,.F.,0,rs1)
THIS.oCa2.CURSORFILL(.F.,.F.,0,rs2)
cn.CLOSE()
ENDPROC
PROCEDURE myGrid1.AFTERROWCOLCHANGE
LPARAMETERS nColIndex
IF THIS.ROWCOLCHANGE%2 = 1
THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
ENDIF
ENDPROC
PROCEDURE myGrid2.AFTERROWCOLCHANGE
LPARAMETERS nColIndex
IF THIS.ROWCOLCHANGE%2 = 1
THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
ENDIF
ENDPROC
PROCEDURE INIT
THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
ENDPROC
ENDDEFINE
DEFINE CLASS myImage AS IMAGE
PROCEDURE PictureVal_Assign
LPARAMETERS vNewVal
IF VAL(OS(3)) < 6
THIS.PICTUREVAL = m.vNewVal
ELSE
THIS.PICTURE = ''
IF EMPTY(THIS.TAG)
THIS.TAG = FORCEPATH(SYS(2015)+'.pic',SYS(2023))
ENDIF
STRTOFILE(m.vNewVal,THIS.TAG)
THIS.PICTURE = THIS.TAG
ENDIF
ENDPROC
PROCEDURE DESTROY
THIS.PICTURE = ''
IF !EMPTY(THIS.TAG)
TRY
ERASE (THIS.TAG)
ENDTRY
ENDIF
ENDPROC
ENDDEFINE