متد InsertToSql
PROCEDURE INSERT
LPARAMETERS emaindata,efields,evalues,skipsqlchkeing
IF !skipsqlchkeing
IF TYPE('oEconect')='U'
PUBLIC oeconect
oeconect =THIS.evaloeconect
ELSE
IF oeconect=0 OR oeconect<0 OR !m.activedataformcheked
THIS.sqlservercheck()
ENDIF
ENDIF
ENDIF
WAIT WINDOW waitstringmsginsupd NOWAIT
*****
*!* IF m.activedataformCheked &&From Data Menu
*!* IF type([m.ChangedDB])=[L]
*!* IF .not. m.ChangedDB
*!* eExecReq = SQLEXEC(oEconect,MainDataSource) && Call Main Database in Sql Server
*!* ELSE
*!* eExecReq = SQLEXEC(oEconect,MainDataServer) && Call Main Database in Sql Server
*!* ENDIF
*!* ELSE
*!* eExecReq = SQLEXEC(oEconect,MainDataSource) && Call Main Database in Sql Server
*!* ENDIF
*!* ELSE
*!* eExecReq = SQLEXEC(oEconect,MainDataServer) && Call Main Database in Sql Server
*!* ENDIF
*!* IF eExecReq <= 0
*!* RELEASE SelField,Seltable,Selwhere,SelGroup,Selhaving,Selo rder,StrSel
*!* =alert([!.Çã˜Çä ÏÓÊÑÓí Èå ÏíÊÇÈíÓ ÇÕáí æÌæÏ äÏÇÑÏ])
*!* RETURN .f.
*!* ENDIF
inscmdq = [Insert Into ]+emaindata+[ (]+efields+[) ]+[values ] +[ (]+evalues+[) ]
IF !THIS.TRANSACTION(oeconect)
RETURN .F.
ENDIF
xcatcherr=.F.
zcatcherr=.F.
DO WHILE !xcatcherr
eexecreq = SQLEXEC(oeconect,inscmdq)
*!* Cmtd by fshiri CATCH TO oException
*!* Cmtd by fshiri IF oException.ErrorNo>1
*!* Cmtd by fshiri this.errhandling(oException.ErrorNo,oException.Mes sage+'-'+oException.Procedure)
*!* Cmtd by fshiri CatchErr= this.ShowRetryMsg(oException.Message)
*!* Cmtd by fshiri IF CatchErr
*!* Cmtd by fshiri LOOP
*!* Cmtd by fshiri ELSE
*!* Cmtd by fshiri CatchErr=.T.
*!* Cmtd by fshiri EXIT
*!* Cmtd by fshiri ENDIF
*!* Cmtd by fshiri ENDIF
*!* Cmtd by fshiri FINALLY
IF eexecreq <= 0
catcherrx=THIS.showretrymsg('!.Çã˜Çä ÇíÌÇÏ ÇØáÇÚÇÊ æÌæÏ äÏÇÑÏ')
IF catcherrx
LOOP
ELSE
xcatcherr=.T.
zcatcherr=.F.
EXIT
ENDIF
ELSE
xcatcherr=.T.
zcatcherr=.T.
EXIT
ENDIF
ENDDO
*!* Cmtd by fshiri = SQLCOMMIT(oEconect)
IF eexecreq <= 0
execcmdq =[ROLLBACK TRANSACTION]
eexecreq = SQLEXEC(oeconect,execcmdq) && T-SQL Script
IF eexecreq <= 0
zcatcherr=.F.
ENDIF
ELSE
execcmdq =[COMMIT TRANSACTION]
eexecreq = SQLEXEC(oeconect,execcmdq) && T-SQL Script
IF eexecreq <= 0
zcatcherr=.F.
ENDIF
ENDIF
WAIT CLEAR
RETURN zcatcherr
برای اینکه درد سر نوشتن اسم فیلد و نام کنترل سورس گرفتن اطلاعات کنترل هم به حداقل برسونم یه فانکشن نوشتم که کارش اینه که ببینه تو فرمی که کنترلها رو کاربر اطلاعات شو زده به صورت دینامیک خودش مقادیر رو میخونه میده به متدها INSERT , UPDATE سعی میکنم بیشتر توضیح بدم.
در حقیقت اسکریپت های مورد نیاز رو برای دستورات insert , update میسازه.
*********************************************
*\ This Method Dynamic bind Memo Var Value
*\ By F.shiri 1387
*\ Para : Main View , Flag (Update Or Insert)
*\ ,uniqe field view
*********************************************
PROCEDURE sqlfieldstring
PARAMETERS MainTableSQL,FlagUpdIns,UniquField
PRIVATE FieldCnt,StrFiledName,StrFieldValue,StrRetVlaue,Re servedWords,StrFieldNameins
ReservedWords =[,DESC,DATE,RESERVED,PRINT,ID,VIEW,BY,DEFAULT,CURRE NT,KEY,ORDER,CHECK,FROM,TO,GROUP,INDEX,VIEWNAME,DA TANAME,NOTAFIELD,DATAFIELD,DATALTAG,DATAFTAG,DATAT YPE,DATASPEC,DATALEN,HEAD,PICTURE,READONLY,BFORCEV AL,BOUNDARY,WHEN,VALID,FORCEVAL,COLWIDTH,ERROR,LEV EL,]
STORE '' TO StrFiledName,StrFieldValue,StrFieldUpd,StrFieldNam eins
FieldCnt=FCOUNT(ALLTRIM(MainTableSQL))
DIMENSION CFieldName[FieldCnt]
DIMENSION CFieldValue[FieldCnt]
RELEASE SmemValRem
PUBLIC SmemValRem
SET MULTILOCKS ON
=CURSORSETPROP("Buffering", 5, MainTableSQL )
FOR Cnt_=1 TO FieldCnt
DIMENSION SmemValRem[Cnt_]
IF TYPE([EVALUATE('m.'+allt(field(Cnt_,MainTableSQL)))])!='U'
CFieldName[Cnt_]=allt(field(Cnt_,MainTableSQL))
IF (OLDVAL(field(Cnt_,MainTableSQL),MainTableSQL)!=EV ALUATE('m.'+CFieldName[Cnt_])) OR (!FlagUpdIns)
StrFiledName=StrFiledName+IIF(EMPTY(StrFiledName), '',[,])+IIF([,]+CFieldName[Cnt_]+[,] $ ReservedWords,"["+CFieldName[Cnt_]+"]",CFieldName[Cnt_])
CFieldValue[Cnt_]=[?m.]+CFieldName[Cnt_]
StrFieldValue=StrFieldValue+IIF(EMPTY(StrFieldValu e),'',[,])+CFieldValue[Cnt_]
StrFieldUpd=StrFieldUpd+IIF(EMPTY(StrFieldUpd),'',[,])+IIF(FlagUpdIns,StrFiledName+[=]+CFieldValue[Cnt_],'')
StrFieldNameins=StrFieldNameins+IIF(EMPTY(StrField Nameins),'',[,])+StrFiledName
StrFiledName=''
SmemValRem[Cnt_]=[m.]+CFieldName[Cnt_]
ENDIF
ENDIF
ENDFOR
*!* Cmtd by fshiri StrRetVlaue=IIF(TYPE([UniquField])=[C],IIF([,]+UniquField+[,] $ ReservedWords,"["+UniquField+"]",UniquField)+[,],'')+StrFieldValueins+[|]+IIF(TYPE([UniquField])=[C],[=?m.]+UniquField+[,],'')+StrFieldValue
StrRetVlaue=StrFieldNameins+[|]+StrFieldValue
RETURN IIF(!FlagUpdIns,StrRetVlaue,StrFieldUpd)
این کد ها هم برای Transaction
PROCEDURE TRANSACTION
PARAMETERS oEconect
eExecReq = SQLEXEC(oEconect ,MainDataServer) && Call Main Database in Sql Server
IF eEXecReq <= 0
=alert([!.Çã˜Çä ÏÓÊÑÓí Èå ÏíÊÇÈíÓ ÇÕáí æÌæÏ äÏÇÑÏ])
RETURN .f.
ENDIF
*!*ExecCmdTran =[SET TRANSACTION ISOLATION LEVEL READ COMMITTED] && Row Level locking
ExecCmdTran =[SET TRANSACTION ISOLATION LEVEL SNAPSHOT] && No row Lock
eXecReq = SQLEXEC(oEconect,ExecCmdTran)
IF eEXecReq <= 0
RETURN .f.
ENDIF
ExecCmdTran =[BEGIN TRANSACTION] && T-SQL Script
eXecReq = SQLEXEC(oEconect,ExecCmdTran)
CatchErr=.t.
IF eXecReq <= 0
CatchErr=.f.
ENDIF
RELEASE ExecCmdTran
IF !CatchErr
=alert([!.Çã˜Çä ÇäÌÇã ÊÑǘäÔ æÌæÏ äÏÇÑÏ])
ENDIF
RETURN CatchErr
نحوه استفاده هم تو پست بعدی