PROCEDURE LogOnSQL This.FixUpTables() * look for subreports, update SQL Server logon info FOR EACH loSection IN This.oReport.Sections WITH loSection FOR EACH loReportObject IN .ReportObjects IF loReportObject.Kind = crSubreportObject loSubreport = This.oReport.OpenSubreport(loReportObject.SubreportName) WITH loSubreport STORE .F. TO .MorePrintEngineErrorMessages, .EnableParameterPrompting ENDWITH This.FixUpTables(loSubreport, lcSQLServer, lcDBName, lcUserID, lcPswd) loSubreport = .null. ENDIF NEXT loReportObject loReportObjects = .null. ENDWITH NEXT loSection ENDPROC ****************************************** PROCEDURE FixUpTables ****************************************** LPARAMETER toReport, tcSQLServer, tcDBName, tcUserID, tcPswd LOCAL loTable, lcLocation, lcUserID, lcPswd, sConnString FOR EACH loTable IN toReport.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 loTable = .null. ENDPROC