#Include vhLib.Macro PrepareSQL(Query) new qHandler set qHandler=##class(TECH.ResultSet).%New("%DynamicQuery:SQL") new flagPrepared set flagPrepared = qHandler.Prepare(Query) if 'flagPrepared set qHandler = "" quit qHandler ExecDynQuery(Query,Param,RuntimeMode) new qHandler set qHandler=##class(TECH.ResultSet).%New("%DynamicQuery:SQL") set RuntimeMode = $get(RuntimeMode) if $length(RuntimeMode) set qHandler.RuntimeMode = RuntimeMode new flagPrepared set flagPrepared = qHandler.Prepare(Query) if 'flagPrepared { new Message set Message = ##class(%GlobalCharacterStream).%New() do Message.WriteLine("Can not prepare query '"_Query_"'") do Message.WriteLine("Status : "_$$ParseStatus^vhLib(flagPrepared)) do Message.WriteLine($$GetStackToString^vhLib()) Do ##class(vhLib.Logger).%New("vhLib.Query").ErrorMail("Prepare",Message) new Exception set Exception = ##class(TECH.Exceptions.StatusException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),"Can not prepare query '"_Query_"'",flagPrepared) Do ##class(TECH.ExceptionHandler).Throw(Exception) } set Param = $get(Param) #dim Status As %Status = $$$OK if $length(Param) { if $listlength(Param) = 1 { Set Status = qHandler.Execute($listget(Param,1)) } else { new qParam set qParam = """"_$listget(Param,1)_"""" new Counter for Counter = 2 : 1 : $listlength(Param) set qParam = qParam _ ",""" _ $listget(Param,Counter)_"""" xecute "Set Status = qHandler.Execute("_qParam_")" } } else { Set Status = qHandler.Execute() } If $$$ISERR(Status){ new Message set Message = ##class(%GlobalCharacterStream).%New() do Message.WriteLine("Can not execute query '"_Query_"'") do Message.WriteLine("Param : "_$$LCVT^vhLib(Param)) do Message.WriteLine("Status : "_$$ParseStatus^vhLib(Status)) do Message.WriteLine($$GetStackToString^vhLib()) Do ##class(vhLib.Logger).%New("vhLib.Query").ErrorMail("Execute",Message) new Exception set Exception = ##class(TECH.Exceptions.StatusException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),"Can not execute query '"_Query_"'", Status) Do ##class(TECH.ExceptionHandler).Throw(Exception) } quit qHandler ;--------------------------------------------------------------------------------------------------------------------- ExecDynQueryCRLF(Query,Param,DataCount,amItems) new result set result = "" new qHandler set qHandler = $$ExecDynQuery($get(Query),$get(Param)) new ItemCount set ItemCount = 0 set DataCount = $get(DataCount,0) set amItems = $get(amItems,0) if $length(qHandler) { while qHandler.Next() { if DataCount = 0 { set result = result _ qHandler.GetData(1) _ $$$CRLF } else { for Counter = 1 : 1 : DataCount set result = result _ qHandler.GetData(Counter) _ $C(9) set result = result _ $$$CRLF } set ItemCount = $increment(ItemCount) if ( amItems > 0 ) , ( ItemCount = amItems ) do qHandler.Close() }} do qHandler.Close() quit result ;--------------------------------------------------------------------------------------------------------------------- ValueExecDynQuery(Query,Param) quit $piece($$ExecDynQueryCRLF(Query,$g(Param)),$$$CRLF) ;--------------------------------------------------------------------------------------------------------------------- ListExecDynQuery(Query,Param) new result set result = $$ExecDynQueryCRLF(Query,$g(Param)) if $length(result) set result = $$PiecesToList^vhLib(result,$$$CRLF) quit result ;--------------------------------------------------------------------------------------------------------------------- ListIDsExecDynQuery(Query,Param) new result set result = "" new qHandler set qHandler = $$ExecDynQuery($get(Query),$get(Param)) if $length(qHandler) { while qHandler.Next() { set result = result _ $LB(qHandler.Get("ID")) } } quit result ;--------------------------------------------------------------------------------------------------------------------- IDsExecDynQuery(Query,Param) new result set result = "" new qHandler set qHandler = $$ExecDynQuery($get(Query),$get(Param)) if $length(qHandler) { while qHandler.Next() { set result = result _ qHandler.Get("ID") _ $$$CRLF } } quit result ;--------------------------------------------------------------------------------------------------------------------- OneIDExecDynQuery(Query,Param) new result set result = "" new qHandler set qHandler = $$ExecDynQuery($get(Query),$get(Param)) if $length(qHandler) { while qHandler.Next() { set result = qHandler.Get("ID") } } quit result ;---------------------------------------------------------------------------------------------------------------------