Sql result set to a %Stream
I am trying to read data from MySQL Server 2012 to a stream and I keep getting an error here is my code so far
ERROR
An error was received : ERROR <Ens>ErrException: <INVALID OREF>zGetBatchDetails+14^DDQTools.DQTGetBatchOpp.3 -- logged as '-' number - @' set sc=reStream.WriteLine(rec) '< set tSC=$$$OK
set ^tvalue=1
set ^tvalue=$INCREMENT(^tvalue)
#dim rs as EnsLib.SQL.GatewayResultSet
#dim reStream as %Stream.GlobalCharacter
if $$$ISERR(pRequest) quit pRequest
set sc=..Adapter.ExecuteQuery(.rs,..GetTheSubmissionData(pRequest.pMonth, pRequest.pApp, pRequest.pRef, pRequest.pInPat))
if $$$ISERR(sc) quit sc
while rs.Next() {
set (comma,rec)=""
for i=1:1:rs.GetColumnCount() {
set rec=rec_comma_""""_rs.GetData(i)_""""
set comma=","
}
set reStream=""
set sc=reStream.WriteLine(rec)
}
do reStream.%Save()
if ($$$ISOK(sc)){ set pResponse.pReqDetails=reStream
set reStream=""}else{$$$TRACE("There is nothing on the stream")}
set tSC=pResponse.%Save()
set tSC=..SendRequestSync(..TargetConfigNames,pResponse,.pOutput)
Quit tSCDiscussion (3)1
Comments
I just can detect.
#dim reStream as %Stream.GlobalCharacter
in your code but nowhere
set reStream=##class(%Stream.GlobalCharacter).%New()
or similar. So no Object.
@Robert Cemper Have tried changing that as per your suggestion but seem not to get it working do you have another suggestion on how I can approach this was wondering is there a function like select to stream to do this
If you didn't correct the other 2 mistakes it's no surprise.
The code should look like this:
set tSC=$$$OK
set ^tvalue=1
set ^tvalue=$INCREMENT(^tvalue)
#dim rs as EnsLib.SQL.GatewayResultSet
#dim reStream as %Stream.GlobalCharacter
if $$$ISERR(pRequest) quit pRequest
set sc=..Adapter.ExecuteQuery(.rs,..GetTheSubmissionData(pRequest.pMonth, pRequest.pApp, pRequest.pRef, pRequest.pInPat))
if $$$ISERR(sc) quit sc
set reStream=##class(%Stream.GlobalCharacter).%New()
while rs.Next() {
set (comma,rec)=""
for i=1:1:rs.GetColumnCount() {
set rec=rec_comma_""""_rs.GetData(i)_""""
set comma=","
}
;; set reStream="" ;; dont kill your stream before using !!! OMG
set sc=reStream.WriteLine(rec)
}
do reStream.%Save()
;; sc doesn't reflect if there is a content in reStream. check Size instead
set sc=''reStream.Size
if ($$$ISOK(sc)){ set pResponse.pReqDetails=reStream
set reStream=""}
else {$$$TRACE("There is nothing on the stream")}
set tSC=pResponse.%Save()
set tSC=..SendRequestSync(..TargetConfigNames,pResponse,.pOutput)
Quit tSC
set ^tvalue=1
set ^tvalue=$INCREMENT(^tvalue)
#dim rs as EnsLib.SQL.GatewayResultSet
#dim reStream as %Stream.GlobalCharacter
if $$$ISERR(pRequest) quit pRequest
set sc=..Adapter.ExecuteQuery(.rs,..GetTheSubmissionData(pRequest.pMonth, pRequest.pApp, pRequest.pRef, pRequest.pInPat))
if $$$ISERR(sc) quit sc
set reStream=##class(%Stream.GlobalCharacter).%New()
while rs.Next() {
set (comma,rec)=""
for i=1:1:rs.GetColumnCount() {
set rec=rec_comma_""""_rs.GetData(i)_""""
set comma=","
}
;; set reStream="" ;; dont kill your stream before using !!! OMG
set sc=reStream.WriteLine(rec)
}
do reStream.%Save()
;; sc doesn't reflect if there is a content in reStream. check Size instead
set sc=''reStream.Size
if ($$$ISOK(sc)){ set pResponse.pReqDetails=reStream
set reStream=""}
else {$$$TRACE("There is nothing on the stream")}
set tSC=pResponse.%Save()
set tSC=..SendRequestSync(..TargetConfigNames,pResponse,.pOutput)
Quit tSC