Thread: FoxPro Some General Questions/Crystal report + MSQ SQL Server (OLE DB Provider) in VFP

Crystal report + MSQ SQL Server (OLE DB Provider) in VFP
PARAMETERS tcReportname, tcSQLServer, tcDBName, tcUserID, tcPswd

LOCAL oCR AS CRAXDRT.APPLICATION
LOCAL oRpt AS CRAXDRT.REPORT
LOCAL oDB AS CRAXDRT.DATABASE
LOCAL ocDBT AS CRAXDRT.DatabaseTables
LOCAL oDBT AS CRAXDRT.DatabaseTable
LOCAL oConn AS ADODB.CONNECTION
LOCAL oRS AS ADODB.Recordset

DO CASE
   CASE PCOUNT() = 0
      * Handle the ADO
      tcSQLServer = 'SQLSERVER'
      tcDBName   = 'Reporting_Data'
      tcUserID   = 'report'
      tcPswd      = 'report'
      tcReportname= 'conditional_approvals_oledb.rpt'
ENDCASE


cFileName = tcReportname


cConnString = "User ID=" + ALLTRIM(tcUserID) + ";"
cConnString = cConnString + "Password=" + ALLTRIM(tcPswd) + ";"
cConnString = cConnString + "Initital Catalog=" + ALLTRIM(tcDBName) + ";"
cConnString = cConnString + "Data Source=" + ALLTRIM(tcSQLServer)

oConn = CREATEOBJECT("ADODB.Connection")
oConn.Provider = "SQLOLEDB.1"
oConn.ConnectionString = cConnString
oConn.OPEN()

oRS = CREATEOBJECT("ADODB.RecordSet")

oCR = CREATEOBJECT("CrystalRuntime.Application.9")
oRpt = oCR.OpenReport(cFileName)

* Create the Database object
oDB = oRpt.DATABASE()

* Get a references to the DatabaseTables collection
ocDBT = oDB.TABLES()

FOR EACH loTable IN oRpt.DATABASE.TABLES
   WITH loTable
      lcLocation = .Location
      *** connect to SQL Server using OLEDB (ConnectionProperties)
      loConnProps = loTable.ConnectionProperties
      *** delete all existing connection properties
      loConnProps.DeleteAll()
      *** add new connection properties
      loConnProps.ADD("Provider","SQLOLEDB")

      loConnProps.ADD("Data Source",tcSQLServer)
      loConnProps.ADD("Initial Catalog",tcDBName)

      loConnProps.ADD("User ID",tcUserID)

      ** check for dbl quote - change to chr(34)
      ** tcPswd = ScrubDblQuote(tcPswd)

      loConnProps.ADD("Password", tcPswd)
      IF "Proc(" $ lcLocation
         lcLocation = STRTRAN(lcLocation,"Proc(","")
         lcLocation = STRTRAN(lcLocation,")","")
      ENDIF
      .Location = tcDBName + ".dbo." + lcLocation

   ENDWITH
NEXT loTable

* Get a reference to the DatabaseTable object for table 1
oDBT = ocDBT.ITEM(1)

IF oRpt.HasSavedData
   oRpt.DiscardSavedData()
ENDIF

* Set the export options
loExportOptions = oRpt.ExportOptions
loExportOptions.DestinationType = 1    && crEDTDiskFile

loExportOptions.FormatType = 31
loExportOptions.DiskFileName    = "C:\Export.PDF"
** oRpt.DiscardSavedData()

oRpt.ReadRecords
oRpt.EXPORT(.F.)
Original