KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.62
System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64
User : www ( 80)
PHP Version : 8.3.8
Disable Function : NONE
Directory :  /domains/mguerinweb/Offline_Archive/DBAdmin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /domains/mguerinweb/Offline_Archive/DBAdmin/ocdGrid.asp
<%
'ocdGrid.asp - 1 Click DB SQL to ASP Grid Object
'copyright 1997-2002 David Kawliche, AccessHelp.net

'1 Click DB technology is fully protected by international
'laws and treaties.  Never use, distribute, or redistribute
'any software and/or source code in violation of its licensing.

'Use of this software and/or source code is strictly at your own risk.
'All warranties are specifically disclaimed except as required by law.

'IMPORTANT : THIS CODE USES PASS-THROUGH SECURITY !
'
'To enforce application security, set appropriate logins 
'and permissions for all web server and database users.
'
'Use object and configuration properties _only_ to customize 
'application appearance and interactions with other components. 

'For more information see : http://1ClickDB.com

Class ocdGrid
	Public GridID	'defaults To "A", alpha-numeric string To uniquely identify multiple grids on a page
	Public GridMode	'READ ONLY: 1 Click DB can be "BROWSE", "FILTER","SEARCH", "PROCESS" or "EXPORT", To Set .GridMode, use HTML syntax For links and form variables
	Public DatabaseType	'READ ONLY: identification of current database platform
	Public GridMaxURLLength 'try To intercept overly complex querystrings
	Public GridHideAutonumber	'If true, hide the autonumber field For display but include the name In .SQLSelect To enable editing
	Public GridOptimize 'bit mask with optimization options
	Public GridCompatibility 'If true, no javascript functionality will be generated by the grid
	Public GridFieldNames 'If true Then display grid header row
	Public GridFormatNumbers 'defaults To "" (database default) can also be "COMMAS"
	Public GridMaxMemo 'maximum number of characters To be displayed For a memo field
	Public ExportForceDownload 'If true, sets MIME header on export pages as an attachment
	Public SearchMultiSort 'If true, Order By's are additive
	Public SearchPersistKeyword 'remember criteria submitted on browse keyword search input, To avoid confusion, should only be used If ShowSearch and filter capabilities are off
	Public SearchCheckAll 'If true, all search fields are checked by default
	Public SearchSortSize 'number of order by fields To display In search form
	Public SearchShowKeyword 'If true, retain keywords submitted In Browse Search, recommend Set To False when ShowSearch is true
	Public SearchDefaultTextCompare 'Default operator selected For Text field searches
	Public ADOConnection 'active database connection For Grid
	Public ADORecordSet 'active database cursor For Grid
	Public ADORecordsetTimeout  'how long before giving up on a database request, In seconds
	Public ADOComputeTimeout
	Public ADOMaxRecords
	Public SQLConnect	'If ADOConnection is not Set prior To calling .Open , Then use this info To connect
	Public SQLUser	'database user name If using .SQLConnect
	Public SQLPass	'database password If using .SQLConnect
	Public SQLSelect	'comma delimited list of fields To retrieve, all fields mentioned In other SQLSelect... properties must be here
	Public SQLSelectHide 'comma delimited list of fields To retrieve but hide from display
	Public SQLSelectName 'comma delimited list of "Nice" field names To display In Header, must have exactly the same number of entries as defined In SQLSelect
	Public SQLSelectAliases 'comma delimited list of selected field names that are aliases, suppresses search and grid field controls that can cause syntax errors
	Public SQLSelectSearchDropDown 'comma delimited list of fields that should be created as dropdowns of existing values In a search page
	Public SQLSelectFilterHide 'comma delimited list of no filter fields 
	Public SQLSelectSortHide 'comma delimited list of no sort fields
	Public SQLSelectSearchHide 'comma delimited list of no search fields
	Public SQLSelectSearchUncheck 'comma delimited list of fields To display unchecked by default In search screen
	Public SQLSelectFormat 	'1 Click DB field formatting variables
	Public SQLSelectSum 'comma delimited list of fields For computed Grand Total
	Public SQLSelectAvg 'comma delimited list of fields For computed Group Average
	Public SQLSelectMin 'comma delimited list of fields For computed Smallest Value
	Public SQLSelectMax 'comma delimited list of fields For computed Largest Value
	Public QuoteSuffix
	Public QuotePrefix
	Public SQLFrom 'REQUIRED: table To be displayed, SQL Join clauses are supported but are generally not updateable
	Public SQLWhere 'SQL WHERE clause without the word WHERE restricting which records To display
	Public SQLWhereExtra 'SQL WHERE clause without the keyword WHERE Used To restrict what rows from a table are displayed In addition To any criteria specified by SQLWhere.  Good For securing subsets of records from certain users
	Public SQLHaving 'SQL HAVING clause without the word HAVING used For display of aggregate queries
	Public SQLGroupBy 'SQL GROUP BY clause without the words GROUP BY used For display of aggregate querieds
	Public SQLOrderBy 'SQL ORDER BY without the words ORDER BY clause used For determining display order of records
	Public SQLOrderByDefault 'If no other order by is specified, use this
	Public SQLPage 'what page of records To display, If number is invalid, the first page is shown
	Public SQLPageSize 'number of records To display per page, If hard coded, will use default or querystring values
	Public SQLPageSizeDefault 'default number of records To display per page
	Public SQLRecordCount 'READ ONLY: how many records In current recordset
	Public SQLPageCount	'READ ONLY: how many pages In current recordset
	Public SQLText 'READ ONLY: actual SQL used To create main recordset
	Public AllowEdit 'If true, show edit links, If recordSet keys are not available, setting this To True will have no effect
	Public AllowDelete 'If true, show delete links, If recordSet keys are not available, setting this To True will have no effect
	Public AllowSearch 'If true, allow search/filter form processing, can be enabled For one grid per page
	Public AllowExport 'If true,  allow print and other exports, can be enabled For one grid per page
	Public AllowDetail 'If true,  show detail links
	Public AllowAdd	'If true show Add record button
	Public AllowMultiDelete 'If true, show check boxes to select records to delete
	Public FormSearch 'ASP file For search requests, defaults To current page
	Public FormEdit	'ASP file For edit requests
	Public FormDetail 'ASP file For detail requests
	Public HTMLAttribGrid 'can be used To specify CELLPADDING and CELLSPACING attributes, CLASS is harcoded To "Grid"
	Public HTMLAttribButtonPanel
	Public HTMLAttribGridEven
	Public HTMLAttribGridOdd
	Public HTMLAttribBtnMultiDelete 'attributes for mulitdelete button
	Public HTMLAttribBtnMultiSelect
	Public HTMLGridButtons 'list of buttons To be displayed
	Public HTMLTextCompare 'list of valid text operators For search
	Public HTMLTrueValue 'If not set, grid will display database default representation
	Public HTMLFalseValue 'If not set, grid will display database default representation
	Public HTMLDetailLink 'customize detail links
	Public HTMLNullValue 'replace null values with this
	Public HTMLBinaryValue 'replace binary values with this
	Public HTMLSortASCLink 'customize sort ascending links
	Public HTMLSortDESCLink	'customize sort descending links
	Public HTMLFilterLink 'customize filter links
	Public HTMLEditLink 'customize edit links
	Public HTMLDeleteLink 'customize delete links
	Public HTMLAttribEditLink 'customize edit links
	Public HTMLAttribDeleteLink 'customize delete linkes
	Public HTMLMemoContinues 'what To show at end of long memo
	Public HTMLAttribFindBtn 'defines HTML tag attributes For Find Records button
	Public HTMLAttribCancelBtn 'defines HTML tag attributes For Cancel button
	Public AllowMultiSelect
	Public HTMLAttribGridCell
	Public HTMLExportStart 'in quick mode this starts export files
	Public HTMLGridVertical
	Public HTMLAfterFieldName
	Public HTMLExportEnd 'in quick mode this ends export forms
	Public HTMLAscText 'text displayed To select ASCending sort on search page
	Public HTMLDescText 'text displayed To select DESCending sort on search page
	Public HTMLSearchBetween 'text shown by default as between on date searches
	Public HTMLSearchBetweenAnd 'text shown between start and end inputs on date searches
	Public HTMLSearchAll 'text shown next To radio button To select "all" logic on searches
	Public HTMLSearchAny 'text shown next To radio button To select "any" logic on searches
	Public HTMLSearchAnd 'text shown next To radio button To add new restriction To current criteria
	Public HTMLSearchOr 'text shown next To radio button To add new match condition To current criteria
	Public HTMLSearchReSet 'text shown next To radio button To replace old criteria with new criteria
	Public HTMLSearchKeyword 'html For "Keyword" search field display 
	Public SearchKeywordTextFields
	Public SearchKeywordNumberFields
	Public FormSelect
'**Start Encode**
	'internal reserved variables
	Public SQLSelectID 
	Private GridUseGetRows 'If true .ADORecordSet will be discarded immediately after moving data To local arrays
	Private SQLSelectIDType	
	Private UseSP_ExecuteSQL
	Private SQLSelectIDPos
	Public SQLSelectPK 
	Private SQLSelectPKType
	Private SQLSelectPKPos
	Public arrSQLSelect
	Private arrSQLSelectType
	Private arrSQLSelectFormat
	Private arrSQLSelectName
	Private arrSQLSelectFilterHide
	Private arrSQLSelectSortHide
	Private arrSQLSelectPKType
	Private arrSQLSelectPKPos
	Private arrSQLSelectPK
	Private strSCRIPT_NAME
	Private intCurrentField
	Private strCData
	Private arrComputeData
	Private arrGridData
	Public SaferSQLServer
	Public Debug 'requires jscript getTime() server function To be defined on calling page
	Public GridCountRecords
Private Sub Class_Initialize 'Set default values
%><!--#INCLUDE FILE=ocdGrid_Lang.asp--><%
    HTMLAttribButtonPanel = " BORDER=0 CELLPADDING=2 CELLSPACING=2 "
	HTMLAfterFieldName = "<BR>"
	HTMLAttribGridCell = "VALIGN=""TOP""  NOWRAP "
	Debug = False
	SaferSQLServer = False
	AllowMultiSelect = False
	SearchKeywordTextFields = ""
	SearchKeywordNumberFields = ""
	HTMLGridVertical = False
	FormSelect = ""
	ADOMaxRecords = 10000
	ADOComputeTimeOut = 1
	GridCountRecords = False
	GridFieldNames = True
	SQLSelectSum = ""
	SQLSelectMin = ""
	AllowAdd = True
	AllowEdit = True
	AllowDelete = True
	UseSP_ExecuteSQL = False
	SQLSelectMax = ""
	SQLSelectAvg = ""
	ExportForceDownload = False
	SQLSelectSearchDropDown = ""
	SQLSelectSearchHide = ""
	ADORecordsetTimeout = 30
	SearchShowKeyword = True
	SQLSelectPK = ""
	SQLSelectSearchUncheck = ""
	FormSearch = ""
	GridFormatNumbers = ""
	SQLSelectAliases = ""
	GridMaxURLLength = 2000
	GRIDUseGetRows = True
	GridMaxMemo = 255
	SearchPersistKeyword = False
	SearchCheckAll = True
	AllowDetail = False
	SQLOrderByDefault = ""
	FormDetail = ""
	strSCRIPT_NAME = request.ServerVariables("SCRIPT_NAME")
	SearchSortSize = 3
	SearchMultiSort = False
	SQLPageSizeDefault = 10
	AllowMultiDelete = False
	SQLSelectHide = ""
	DatabaseType = ""
	GridID = "A"
	SQLWhereExtra = ""
	SQLPageSize = "" 
	SQLSelectName = ""
	SQLSelectID = -1
	GridMode = "Browse"
	QuoteSuffix =""""
	QuotePrefix =""""
	HTMLAttribEditLink = ""
	HTMLAttribDeleteLink = ""

	Select Case UCase(request.querystring("ocdGridMode_" & GRIDID))
		Case "FILTER"
			GridMode = "Filter"
		Case "SEARCH"
			GridMode = "Search"
		Case "EXPORT"
			GridMode = "Export"
		Case "PROCESS"
			GridMode = "Process"
	End Select
End Sub

Private Sub Class_Terminate 'clean up ADO objects
	On Error Resume Next
	ADORecordset.close
	Set ADORecordSet = nothing
	If SQLConnect <> "" Then 'disconnect If connection not Set by reference
		ADOConnection.close
		Set ADOConnection = nothing
	End If
	Err.clear
End Sub

public sub Open
	dim blnComputable, blnTemp, blnTemp2, rsIDX, rsCompute, intFieldCount, intTemp, strCSQL, strSQL, strTemp, strTemp2, eleTemp, eleTemp2, intRA, arrTemp, fldTemp, acot1, crot1, drot1, dmot1, kdot1
	blnComputable = False
	If SQLSelectFormat <> "" Then
		arrSQLSelectFormat = Split(SQLSelectFormat,",")
	End If
	If SQLSelectAliases <> "" Then
		If SQLSelectSearchHide <> "" Then
			SQLSelectSearchHide = SQLSelectSearchHide & "," & SQLSelectAliases
		Else
			SQLSelectSearchHide = SQLSelectAliases
		End If
		If SQLSelectSortHide <> "" Then
			SQLSelectSortHide = SQLSelectSortHide & "," & SQLSelectAliases
		Else
			SQLSelectSortHide = SQLSelectAliases
		End If
		If SQLSelectFilterHide <> "" Then
			SQLSelectFilterHide = SQLSelectFilterHide & "," & SQLSelectAliases
		Else
			SQLSelectFilterHide = SQLSelectAliases
		End If
	End If
	If SQLSelectFilterHide <> "" Then
		arrSQLSelectFilterHide = Split(SQLSelectFilterHide,",")
	End If
	If SQLSelectSortHide <> "" Then
		arrSQLSelectSortHide = Split(SQLSelectSortHide,",")
	End If
	If SQLSelect = "" Then
		SQLSelect = "*"
	End If
	If SQLPage = "" Then
		SQLPage = request.querystring("SQLPAGE_" & GRIDID)
	End If
	If IsNumeric(SQLPage) Then
		SQLPage = CInt(SQLPage)
		If SQLPage = 0 Then
			SQLPage = 1
		End If
	Else
		SQLPage = 1
	End If
	If SQLPageSize = "" Then
		If request.QueryString("sqlpagesize" & "_" & GridID) <> "" and IsNumeric(request.querystring("sqlPagesize" & "_" & GridID)) Then
			SQLPageSize = CLng(request.Querystring("sqlpagesize" & "_" & GridID))
		Else
			SQLPageSize = SQLPageSizeDefault
		End If
	Else
		If not isnumeric (SQLPageSize) Then
			SQLPageSize = SQLPageSizeDefault
		Else
			SQLPageSize = CLng(SQLPageSize)
		End If
	End If
	SQLGroupBy = Replace(SQLGROUPBY, ";","")
	SQLHaving = Replace(SQLHaving,";","")
	If SQLOrderBy = "" Then
		If request.Querystring("sqlorderby" & "_" & GridID) <> "" Then
			SQLOrderBy = Replace(request.Querystring("sqlorderby" & "_" & GridID),";","")
		Else
			SQLOrderBy = SQLOrderByDefault
		End If
	End If
	If not IsObject(ADOConnection) Then
		Set ADOConnection  = server.CreateObject("ADODB.Connection")
		ADOConnection.Mode = 1 'adModeRead
		Call ADOConnection.Open (SQLConnect, SQLUser, SQLPass)
	End If
	If DatabaseType = "" Then
		DatabaseType = getDatabaseType(ADOConnection)
	End If
	Select Case UCase(DatabaseType)
		Case "IXS","ADSI"
			AllowEdit = False
			AllowDelete = False
			AllowAdd = False
		Case "ACCESS","SQLSERVER"
			ADOConnection.CommandTimeout = ADORecordsetTimeout
	End Select
	If Not AllowEdit then 
		HTMLEditLink = ""
	End if
	If Not AllowDelete Then
		HTMLDeleteLink = ""
	end if
	If SQLWhere = "" Then
		'check For batched commands
		Select Case DatabaseType
			Case "SQLServer"
				SQLWhere = Replace(request.Querystring("sqlwhere" & "_" & GridID),";","' + ';' + '")
			Case "Access"
				SQLWhere = request.Querystring("sqlwhere" & "_" & GridID)
			Case Else
				SQLWhere = Replace(request.Querystring("sqlwhere" & "_" & GridID),";","")
		End Select
	End If
	Select Case UCase(GRIDMODE) 
		Case "FILTER"
			Exit Sub
	End Select
	If UCase(GRIDMode) = "BROWSE" Then
		If InStr(SQLSelect,")") = 0 and InStr(SQLSelect,"(") =0 and SQLGroupBy = "" and SQLHaving = "" and DatabaseType <> "IXS" and DatabaseType <> "ADSI" and ((Len(sqlselect) > 2) or (sqlselect = "*")) Then

			If UCase(Left(sqlselect,3)) <> "TOP" Then
				blnComputable = True
			End If
		End If
	End If
'	blnComputable = False
'response.write blncomputable
	If blnComputable Then
		If DatabaseType = "Access" Then
			strSQL = "SELECT TOP " & (SQLPageSize * SQLPage) & " " & SQLSelect 
		Else
			strSQL = "SELECT " & SQLSelect
		End If
	Else
		strSQL = "SELECT " & SQLSelect
		if UCASE(GRIDMODE) <> "EXPORT" Then
		GRIDUseGetRows = False
		End if
	End If
	
	strSQL = strSQL & " FROM "  
'response.write SQLFROM
	If InStr(1, SQLFrom ,",") = 0 and InStr(1, SQLFrom,"=") = 0 Then
		SQLFrom = FormatForSQL(SQLFrom, DatabaseType, "AddSQLIdentifier")
	End If
	strSQL = strSQL & SQLFrom
'	response.write strSQL
	If UCase(GRIDMODE) = "PROCESS" OR UCase(GRIDMODE) = "SEARCH" Then
		strSQL = strSQL & " WHERE 1=2"
	ElseIf SQLWhereExtra <> "" Then
		If SQLWhere = "" Then
			strSQL = strSQL & " WHERE " & SQLWhereExtra
		Else
			strSQL = strSQL & " WHERE " & SQLWhereExtra & " AND (" & SQLWHERE & ")"
		End If
	ElseIf (not SQLWhere = "") Then
		strSQL = strSQL & " WHERE " & SQLWhere & ""
	End If
	If not SQLGroupBy = "" Then 
		strSQL = strSQL & " GROUP BY " & SQLGroupBy 
	End If
	If not SQLHaving = "" Then 
		strSQL = strSQL & " HAVING " & SQLHaving 
	End If
	If not SQLOrderBy = "" Then 
		strSQL = strSQL & " ORDER BY " & SQLOrderBy 
	End If
'	response.write strSQL
	If SQLPage = "" Then
		SQLPage = request.querystring("sqlpage" & "_" & GridID)
	End If
		if UCASE(gridmode) <> "BROWSE" Then
'			response.write "X"
			blnComputable = False
		end if
	If blnComputable Then 
		strCSQL ="SELECT COUNT(*) AS " & FormatForSQL("Record Count", DatabaseType, "AddSQLIdentifier") & ","
		If SQLSelectSum <> "" Then
			arrTemp = Split(SQLSelectSum,",")
			For Each eleTemp In arrTemp
				strCSQL = strCSQL & "SUM(" & FormatForSQL(eleTemp, DatabaseType, "RemoveSQLIdentifier") & ") As " & FormatForSQL(FormatForSQL(Replace(eleTemp," ","") & " Sum", DatabaseType, "RemoveSQLIdentifier"),DatabaseType,"AddSQLIdentifier") & ","

			Next
		End If
		If SQLSelectAvg <> "" Then
			arrTemp = Split(SQLSelectAvg,",")
			For Each eleTemp In arrTemp
				strCSQL = strCSQL & "AVG(" & FormatForSQL(eleTemp, DatabaseType, "RemoveSQLIdentifier") & ") As " & FormatForSQL(FormatForSQL(Replace(eleTemp," ","") & " Avg", DatabaseType, "RemoveSQLIdentifier"),DatabaseType,"AddSQLIdentifier") & ","
			Next
		End If
		If SQLSelectMin <> "" Then	
			arrTemp = Split(SQLSelectMin,",")
			For Each eleTemp In arrTemp
				strCSQL = strCSQL & "MIN(" & FormatForSQL(eleTemp, DatabaseType, "RemoveSQLIdentifier") & ") As " & FormatForSQL(FormatForSQL(Replace(eleTemp," ","") & " Min", DatabaseType, "RemoveSQLIdentifier"),DatabaseType,"AddSQLIdentifier") & ","

			Next
		End If
		If SQLSelectMax <> "" Then
			arrTemp = Split(SQLSelectMax,",")
			For Each eleTemp In arrTemp
								strCSQL = strCSQL & "Max(" & FormatForSQL(eleTemp, DatabaseType, "RemoveSQLIdentifier") & ") As " & FormatForSQL(FormatForSQL(Replace(eleTemp," ","") & " Max", DatabaseType, "RemoveSQLIdentifier"),DatabaseType,"AddSQLIdentifier") & ","

			Next
		End If
		strCSQL = Left(strCSQL,Len(StrCSQL)-1)
		strCSQL = strCSQL & " FROM " & SQLFrom
		If SQLWhereExtra <> "" Then
			If SQLWhere = "" Then
				strCSQL = strCSQL &  " WHERE " & SQLWhereExtra
			Else
			strCSQL = strCSQL & " WHERE " & SQLWhereExtra & " AND (" & SQLWHERE & ")"

End If
		ElseIf (not SQLWhere = "") Then
			strCSQL = strCSQL & " WHERE " & SQLWhere & ""
		End If
		
		Set rsCompute = server.createobject("ADODB.Recordset")
		rsCompute.CursorLocation = 2 'adUseServer
		Select Case DatabaseType
			Case "Access","SQLServer"
				ADOConnection.CommandTimeout = ADOComputeTimeout
		End Select
		On Error Resume Next
		if DataBaseType = "SQLServer" and len(strCSQL) < 128 and USESP_EXECUTESQL Then
			Call rsCompute.open ("sp_executesql """ & Replace(strCSQL,"""","""""") & """", ADOConnection)
		Elseif DatabaseType = "SQLServer" and SaferSQLServer Then
			set rsCompute = ADOConnection.Execute(strCSQL,intRA)
		Else
		Call rsCompute.open (strCSQL, ADOConnection)
		End if
		If Err.Number <> 0 Then
			Err.clear
			On Error GoTo 0
			SQLRecordCount = "???"
			If SQLSelectMin <> "" or SQLSelectMax <>"" or SQLSelectAvg <> "" or SQLSelectSum <> "" Then
				strCData = "Timeout"
			End If
		Else	
			On Error GoTo 0
			if rsCompute.Fields.count > 1 Then
			strCData = "<TABLE>"
			End if
			For Each fldTemp In rsCompute.Fields
				If fldTemp.Name = "Record Count" Then
					SQLRecordCount = CLng(rsCompute(0))
				Else
					strCData = strCData & "<TR>"
					strCData = strCData & "<TD><SPAN CLASS=FieldName>" & fldTemp.Name & "</SPAN></TD>"
					strCData = strCData & "<TD ALIGN=RIGHT>" & fldTemp.Value & "</TD>"
					strCData = strCData & "</TR>"
				End If
			Next
			if rsCompute.Fields.count > 1 Then
			strCData = strCData & "</TABLE>"
			End if
			rsCompute.close
		End If
		Set rsCompute = nothing
		ADOConnection.CommandTimeout = ADORecordsetTimeout
		Set ADORecordSet = server.CreateObject("ADODB.Recordset")
		ADORecordset.Maxrecords = CLng(SQLPageSize * SQLPage)
		ADORecordset.CursorLocation =  2 'adUseServer 3 'adUseClient
'		SaferSQLServer = True
	if DataBaseType = "SQLServer" and len(strSQL) < 128 AND USESP_ExecuteSQL Then
		Call ADORecordset.Open ("sp_executesql """ & Replace(strSQL,"""","""""") & """", ADOConnection, 0, 1, &H0001) 
	Elseif  DatabaseTYpe="SQLServer" AND SaferSQLServer Then'Then 
		

		set ADORecordset = ADOCOnnection.execute (strSQL, intRA)
	Else
'		response.write strSQL
		Call ADORecordset.Open (strSQL , ADOConnection, 0, 1, &H0001) 'adOpenForwardOnly,  adLockReadOnly, adCmdText
	End if	
	Else
		Set ADORecordSet = server.CreateObject("ADODB.Recordset")
		ADORecordset.CursorLocation =  2 'adUseServer 3 'adUseClient
		if UCASE(GridMode) <> "EXPORT" Then
		ADORecordset.maxrecords = CLng(SQLPageSize * SQLPage)
		End if
		If DataBaseType = "SQLServer" and UCase(GRIDMODE) <> "PROCESS" and UCase(GRIDMODE) <> "SEARCH" and UCase(GRIDMODE) <> "EXPORT" and len(strSQL) < 128 and UseSP_ExecuteSQL Then
		Call ADORecordset.Open ("sp_executesql """ & Replace(strSQL,"""","""""") & """", ADOConnection , 3,  1, &H0001 )'adOpenStatic, adLockReadOnly, adCmdText
		ElseIf not SaferSQLServer Then '
'			response.write strSQL
			Call ADORecordset.Open (strSQL , ADOConnection , 3,  1, &H0001 )'adOpenStatic, adLockReadOnly, adCmdText
		ElseIF UCase(GridMOde) = "PROCESS" OR UCase(GridMOde) = "SEARCH" Then
			set ADORecordset = ADOCOnnection.execute (strSQL, intRA)
		Else
		'	response.write strSQL
			err.raise 17
		End if
		SQLRecordCount = ADORecordset.RecordCount
	End If
	If IsNumeric(SQLRecordCount) Then
		If SQLRecordCount > ADOMaxRecords Then
			SQLPageCount = CLng(Fix(CLng(ADOMaxRecords) / CLng(SQLPageSize)))
			If (CLng(ADOMaxRecords) / CLng(SQLPageSize)) <> Fix(CLng(ADOMaxRecords) / CLng(SQLPageSize)) Then
				SQLPageCount = SQLPageCount + 1
			End If
		Else
			SQLPageCount = CLng(Fix(CLng(SQLRecordCount) / CLng(SQLPageSize)))
			If (CLng(SQLRecordCount) / CLng(SQLPageSize)) <> Fix(CLng(SQLRecordCount) / CLng(SQLPageSize)) Then
				SQLPageCount = SQLPageCount + 1
			End If
		End If
	Else
		SQLPageCount = CLng(Fix(CLng(ADOMaxRecords) / CLng(SQLPageSize)))
		If (CLng(ADOMaxRecords) / CLng(SQLPageSize)) <> Fix(CLng(ADOMaxRecords) / CLng(SQLPageSize)) Then
			SQLPageCount = SQLPageCount + 1
		End If
	End If
	If 1 > SQLPage Then 
		SQLPage = 1
	ElseIf  SQLPage > SQLPageCount Then 
		SQLPage = SQLPageCount
	End If
	SQLText = strSQL
	strTemp = ""
	strTemp2 = "" 
	intFieldCount = 0
	
	For Each fldTemp In ADORecordset.Fields
		strTemp = strTemp & fldTemp.Name & ";;"
		strTemp2 = strTemp2 & Cstr(fldTemp.Type) & ","
		If SQLSelectID = -1 and UCase(GRIDMODE) = "BROWSE" Then 
			'check For autonumber
			Select Case DatabaseType
				Case "Access","SQLServer"
					If InStr(SQLSelect,")") = 0 and InStr(SQLSelect,"(") =0 and SQLGroupBy = "" and SQLHaving = "" Then
						If UCase(ADOConnection.provider)  = "MICROSOFT.JET.OLEDB.3.51" or DatabaseType = "IXS" Then
							'look out, field properties bomb with this provider
							SQLSelectID = -1 
						Else
							If fldTemp.Properties("ISAUTOINCREMENT") = "True" Then
								SQLSelectID = intFieldCount
								SQLSelectIDPos = intFieldCount
							End If
						End If
					End If
			End Select
		End If
		intFieldCount = intFieldCount  + 1
	Next
	If Len(strTemp) > 1 Then
		arrSQLSelect = Split(Left(strTemp,Len(strTemp)-2),";;")
		arrSQLSelectType = Split(Left(strTemp2,Len(strTemp2)-1),",")
	End If
	If UCASE(GRIDMODE) = "EXPORT" and UCase(request.querystring("ocdExportFormat_" & GRIDID)) = "XML" Then
		 response.ContentType = "text/xml"
		Call ADORecordset.Save (response, 1)
		Call Close()
		response.end
	End If 
	if GridUseGetRows Then
		If not ADORecordset.eof Then
			Select Case UCase(GRIDMODE)
				Case "PROCESS","SEARCH" 
					'no data To retrieve
				Case "BROWSE"
					
					'move To the right page	and retrieve data
					If not ADORecordset.EOF Then
						If not (SQLPage = 1 or  SQLPage = 0) Then
							on error resume next
							ADORecordset.move (CLng((SQLPage -1)*SQLPageSize))
							err.clear
						End If
					Else 
						SQLRecordCount = 0
					End If
					arrGridData = ADORecordset.GetRows(SQLPageSize)
				Case "EXPORT"
					Select Case UCase(request.querystring("ocdExportFormat_" & GRIDID))
					Case Else
						arrGridData = ADORecordset.GetRows()
					End Select
					SQLRecordcount = UBound(arrGridData,2) + 1
			End Select
			ADORecordset.Close
			Set ADORecordSet = nothing
		End If
	End If
	Select Case UCase(GRIDMODE)
		Case "PROCESS" 
			call ProcessSearch()
		Case "SEARCH"
			Exit Sub
		Case "EXPORT" 'Set Mime Headers as appropriate
			response.clear
			allowmultidelete = false
			allowmultiselect = false
			Select Case UCase(request.Querystring("ocdExportFormat_" & GRIDID))
				Case "EXCEL","TEXT"
					response.ContentType = "application/vnd.ms-excel"
					If ExportForceDownload Then
						Select Case UCase(request.Querystring("ocdExportFormat_" & GRIDID))
							Case "EXCEL"
								Call response.AddHeader ("content-disposition","attachment; filename=export.xls")
							Case "TEXT"
								Call response.AddHeader ("content-disposition","attachment; filename=export.txt")
						End Select
					Else
						Select Case UCase(request.Querystring("ocdExportFormat_" & GRIDID))
							Case "EXCEL"
								Call response.AddHeader ("content-disposition","inline;filename=export.xls")
							Case "TEXT"
								Call response.AddHeader ("content-disposition","inline;filename=export.txt")
						End Select
					End If
				response.write (HTMLExportStart)
				Case "TSV"
					response.contenttype = ("application/tab-separated-values")
					If ExportForceDownload Then
						Call response.AddHeader ("content-disposition","attachment; filename=export.txt")
					Else
						Call response.AddHeader ("content-disposition","inline;filename=export.txt")
					End If
				Case "PRINT"
					response.write (HTMLExportStart)
			End Select
			Exit Sub
		Case "BROWSE"
			'If no key information required but still not defined, Then attempt To autodetect
			If SQLSelectID = -1 and SQLSelectPK = "" and (AllowEdit or AllowDetail or AllowDelete) Then 'try To determine pk fields
				SQLSelectPK = getPKFields(ADOConnection, DatabaseType, SQLFrom,QuoteSuffix,QUotePrefix)
				If SQLSelectPK <> "" Then
					'from field list determin other props on rs
					arrSQLSelectPK = Split(SQLSelectPK,",")
					blnTemp = false
					For Each eleTemp2 In arrSQLSelectPK
						intTemp = 0
						blnTemp2 = false
						For Each eleTemp In arrSQLSelect
							If UCase(eleTemp) = UCase(eleTemp2) Then
								SQLSelectPKPos = SQLSelectPKPos & intTemp & ","
								strTemp2 = arrSQLSelectType(intTemp)
								SQLSelectPKType = SQLSelectPKType & Cstr(strTemp2) & ","
								If strTemp2 = "135" Then
									blntemp2 = False
									SQLSelectPKType = ""
									SQLSelectPKPos = ""
									SQLSelectPK = ""
									exit for
								end if
								blntemp2 = true
								Exit For
							End If
							intTemp = intTemp + 1
						Next
						If not blnTemp2 Then
							blnTemp = true
							SQLSelectPK = ""
						End If
					Next
				End If
				If SQLSelectPK <> "" Then
					SQLSelectPKType = Left(SQLSelectPKType,Len(SQLSelectPKType)-1)
					arrSQLSelectPKType = Split(SQLSelectPKType,",")
					SQLSelectPKPos = Left(SQLSelectPKPos,Len(SQLSelectPKPos)-1)
					arrSQLSelectPKPos = Split(SQLSelectPKPos,",")
				End If
			End If
			If SQLSelectID = -1 or not AllowDelete or not GridUseGetRows or UCASE(GRIDMODE) <> "BROWSE" then
				AllowMultiDelete = False
			End if
			If SQLSelectID = -1 and SQLSelectPK = "" Then
				'no key To identify individual records is available
				AllowAdd = False
				AllowEdit = False
				AllowDelete = False
				AllowDetail = False
			End If
	End Select
	if CINT(SQLPageSize) = 1 Then
		AllowMultiDelete = False
	End if
End Sub

Public sub Display (byVal strTemplate)
	
	dim qstTemp, intRowCount, intSPFC, intLoopSize, strTemp, strCDp, strFname, strInfqstTemp,strPKqstTemp, arrSQLSelectPK, arrSQLSelectHide, tmpSQLPKString, varPKFieldType, fldTemp, blnTemp, eleTemp, arrTemp, arrTemp2
	If Err.number <> 0 Then
		Exit Sub
	End If
	Select Case Trim(UCase((strTemplate)))
		Case "QUICK",""
			Call Open
			If UCase(GRIDMode) = "FILTER" Then
				Call DisplayFilter(GRIDID)
				Exit Sub
			End If
		Case "FILTER"
			If UCase(GRIDMode) = "FILTER" Then
				Call DisplayFilter(GRIDID)
				Exit Sub
			End If
	End Select
	Select Case UCase((strTemplate))
		Case "QUICK","","SEARCH"
			If UCase(GRIDMODE) = "SEARCH" Then
				Call DisplaySearch(GRIDID)
				Exit Sub
			End If
	End Select
	GridID = UCase(GridID)
	If SQLSelectHide = "" Then
		SQLSelectHide = request.querystring("SQLSELECTHIDE_" & GRIDID)
	End If
	If Not UCase(GRIDMODE) = "EXPORT" Then
		Select Case UCase(strTemplate)
			Case "QUICK","","BUTTONS"
				If UCase(GRIDMODE) <> "EXPORT" Then
					Call DisplayGridButtons
				End If
		End Select
	End If
	If SQLSelectHide <> "" Then
		arrSQLSelectHide = Split(SQLSelectHide,",")
	End If
	intCurrentField = 0
	Select Case UCase(strTemplate)
		Case "QUICK","","GRID"
			dim strName, varValue, intType
			If SQLSelectName <> "" Then
				ArrSQLSelectName =Split(SQLSelectName,",")
			End If
			Select Case UCase(GRIDMODE)
				Case "EXPORT"
					AllowAdd = False
					AllowEdit = False
					AllowDetail = False
					AllowDelete = False
					select case UCase(request.querystring("ocdExportFormat_" & GRIDID))
					Case "PRINT","EXCEL"
						response.write (HTMLExportStart)
					End SElect
			End Select
			'Start Building results table
			if AllowMultiDelete Then
				Response.write ("<FORM METHOD=GET ACTION=""" & FormEdit & """>")
			ElseIf AllowMultiSelect Then
				Response.write ("<FORM METHOD=GET ACTION=""" & FormSelect & """>")
			end if
			if not HTMLGridVertical THen
			response.write  ("<TABLE CLASS=""Grid"" " & HTMLAttribGrid & ">")
			End if
			If GridFieldNames and not HTMLGridVertical Then
				response.write  ("<TR " & "CLASS=""GridHeader""" & "><TH >")

if AllowMultiSelect Then
				Response.write ("<INPUT Name=OCDMULTISELECT " & HTMLAttribBtnMultiSelect & ">")	
Else
				Response.write "&nbsp;"

				End if
				
				Response.write ("</TH>")
				For Each fldTemp In arrSQLSelect
					blnTemp = True
					If (Cint(intCurrentField  ) = Cint(SQLSelectID) ) and GridHideAutonumber Then
					Else
					If SQLSelectHide <> "" Then
						For eleTemp = 0 To UBound(arrSQLSelectHide)
							If UCase(arrSQLSelect(intCurrentField)) = UCase(arrSQLSelectHide(eleTemp)) Then
								blnTemp = false
								Exit For
							End If
						next
					End If
					
					If blnTemp Then
						If SQLSelectName = "" Then
							Call DisplayFieldName(ArrSQLSelect(intCurrentField), ArrSQLSelectType(intCurrentField), 50, "")
						Else
							Call DisplayFieldName(ArrSQLSelect(intCurrentField), ArrSQLSelectType(intCurrentField), 50, ArrSQLSelectName(intCurrentField))
						End If
					End If
					End if
					intCurrentField = intCurrentField + 1
				Next 
				response.write ("<TH>")
				
				if AllowMultiDelete and IsNumeric(SQLRecordCount) then
				if SQLRecordCount <> 0 THen 
					Response.write ("<INPUT Name=OCDEDITDELETE " & HTMLAttribBtnMultiDelete & ">")	
				End if
				end if
				
				for each qstTemp in Request.Querystring
				Select Case UCase(qstTemp)
					Case "OCDEDITDELETE","SQLID"
					Case "SQLFROM"
				Response.write ("<INPUT TYPE=Hidden Name=SQLFrom VALUE=""" & server.urlencode(FormatForSQL(SQLFrom,DatabaseType,"REMOVESQLIDENTIFIER")) & """>")
					Case Else
				Response.write ("<INPUT TYPE=Hidden Name=""" & qstTemp & """ VALUE=""" & server.htmlencode(Request.QUerystring(qstTemp)) & """>")
				End Select
				next
				Response.write ("</TH></TR>")

			End If
			intRowCount = 1
			Select Case UCase(FormEdit)
			Case "EDIT.ASP", "FREEEDIT.ASP"
				strInfqstTemp =  "&amp;"
				strInfqstTemp = strInfqstTemp & "sqlfrom=" & server.urlencode(SQLFrom)
			End Select
			For Each qstTemp In request.Querystring
				Select Case UCase(qstTemp)
					Case  "SQLID", "SQLWHERE", "SQLFROM", "OCDACTION" & "_" & GridID 
					Case Else
						strInfqstTemp = strInfqstTemp & "&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))	
				End Select
			next
			If IsNumeric(SQLRecordCount) Then
				If SQLRecordCount = 0  Then
						intLoopSize = 0
				Else
					If GridUseGetRows Then
						intLoopSize = UBound(arrGridData,2) + 1
					Else
						If UCase(GRIDMODE) = "EXPORT" Then
							If IsNumeric(SQLRecordCount) Then
								intLoopSize = SQLRecordCount
							Else
								intLoopSize = ADOMaxRecords
							End If
						Else
							intLoopSize = SQLPageSize
						End If	
					End If
				End If
			Else
				If GridUseGetRows Then
					intLoopSize = UBound(arrGridData,2) + 1
				Else
					If UCase(GRIDMODE) = "EXPORT" Then
						If IsNumeric(SQLRecordCount) Then
							intLoopSize = SQLRecordCount
						Else
							intLoopSize = ADOMaxRecords
						End If
					Else
						intLoopSize = SQLPageSize
					End If	
				End If
			End If
		If SQLSelectPK <> "" Then
			arrSQLSelectPK = Split(SQLSelectPK,",")
		End If
		if not GridUseGetrows then
			if not ADORecordset.eof Then
				If SQLPage > 1 Then
				ADORecordset.move Clng(SQLPageSize   * (SQLPage -1))
				End if
			End if
		End if
		For intRowCount = 1 To CInt(intLoopSize)
			if HTMLGridVertical Then
				Response.write ("<TABLE><TR>")
			Else
			response.write  ("<TR ")
			If intRowCount mod 2 = 0 Then
				response.write  (HTMLAttribGridEven) 
			Else
			response.write  (HTMLAttribGridOdd)
			End If
			response.write  (">")
			End if
			If HTMLGridVertical Then
				Response.write ("<TD COLSPAN=2>")
			Else
				Response.write ("<TD >")
			End if
			If (SQLSelectID <> -1 or SQLSelectPK <> "") and (AllowEdit or AllowDetail or AllowDelete or AllowMultiSelect or AllowMultiDelete) Then
				strPKqstTemp = ""
				'response.write sqlselectid
				if sqlselectid = -1 Then
'					sqlselectid = ""
				End if
				If SQLSelectID <> -1 Then
					'Response.write SQLSelectID
					If not  isnull(arrGridData(SQLSelectID,intRowCount-1)) Then
					If not GridUseGetRows Then
						strPKqstTemp = strPKqstTemp &  "sqlid=" & server.URLEncode( ADORecordset.Fields( SQLSelectIDPos ).Value) 
					Else
						
						strPKqstTemp = strPKqstTemp &  "sqlid=" & server.URLEncode( arrGridData(SQLSelectID,intRowCount-1)) 
					End If
					Else
						AllowEdit=False
						AllowDelete=False
					End if
				ElseIf SQLSelectPK <> "" Then
					strPKqstTemp = strPKqstTemp &  "sqlwhere="
					strCDp = ""
					tmpSQLPKString = ""
					For intSPFC = 0 To UBound(arrSQLSelectPK) 
						tmpSQLPKString = tmpSQLPKString & FormatForSQL(arrSQLSelectPK(intSPFC), DatabaseType, "AddSQLIdentifier") & "="
						arrTemp = arrSQLSelectPKPos(intSPFC)
						arrTemp = CInt(arrTemp2)
						arrTemp2 = arrSQLSelectPKType(intSPFC)
						arrTemp2 = CInt(arrTemp2)
						Select Case arrTemp2
							Case 2, 3, 4, 5, 14, 16, 17, 18, 19, 20, 21, 128, 131, 204, 6, 11 'adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, adVarBinary, adLongVarBinary, adCurrency, adBoolean
								strCDp = ""
							Case 135, 7, 133, 134 'adDBTimeStamp, adDate, adDBDate,  adDBTime
								If DatabaseType = "Access" Then
									strCDp = "#"
							 	Else
			 						strCDp = "'"
								End If
							Case 8, 129, 130, 200, 201, 202, 203 'adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar						
								strCDp = "'"
						End Select
						If GridUseGetRows Then
							Select Case arrTemp2
								Case 8, 129, 130, 200, 201, 202, 203 'adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar		
									tmpSQLPKString = tmpSQLPKString & strCDp & Replace(arrGridData(arrSQLSelectPKPos(intSPFC),intRowCount-1),"'","''") & strCDp & " AND "
								Case 135, 7, 133, 134 'adDBTimeStamp, adDate, adDBDate,  adDBTime
									tmpSQLPKString = tmpSQLPKString & strCDp & FormatForSQL(Cstr(arrGridData(arrSQLSelectPKPos(intSPFC),intRowCount-1)),DatabaseType,"SafeDate") & strCDp & " AND "
								Case Else
									tmpSQLPKString = tmpSQLPKString & strCDp & arrGridData(arrSQLSelectPKPos(intSPFC),intRowCount-1) & strCDp & " AND "
								End Select
						Else
							Select Case arrTemp2
							Case 8, 129, 130, 200, 201, 202, 203 'adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar		
								tmpSQLPKString = tmpSQLPKString & strCDp & Replace(ADORecordset.Fields(arrSQLSelectPK(intSPFC)).Value,"'","''") & strCDp & " AND "
							Case 135, 7, 133, 134 'adDBTimeStamp, adDate, adDBDate,  adDBTime
								tmpSQLPKString = tmpSQLPKString & strCDp & FormatForSQL(Cstr(ADORecordset.Fields(arrSQLSelectPK(intSPFC)).Value),DatabaseType,"SafeDate") & strCDp & " AND "
							Case Else
								tmpSQLPKString = tmpSQLPKString & strCDp & ADORecordset.Fields(arrSQLSelectPK(intSPFC)).Value & strCDp & " AND "
						End Select
						End If
					next
					If tmpSQLPKString <> "" Then
						tmpSQLPKString = Left(tmpSQLPKString,Len(tmpSQLPKString)-5)
						strPKqstTemp = strPKqstTemp & server.urlencode(tmpSQLPKString)
					End If
				End If
				strPKqstTemp = strPKqstTemp & strInfqstTemp
				'response.write allowedit
				If (AllowEdit or AllowDelete) AND (SQLSelectID <> -1 or ((SQLSelectPK <> "") )) Then
					
					response.write ("<A HREF=""" & FormEdit & "?" & strPKqstTemp & "&"" " & HTMLAttribEditLink & " >" & HTMLEditLink & "</A>")
				End If
				If AllowDetail and AllowEdit Then
					response.write ("&nbsp;")
				End If
				If AllowDetail and (SQLSelectID <> -1 or ((SQLSelectPK <> "") )) Then
					response.write  ("<A HREF=""" & FormDetail & "?" & strPKqstTemp & """>" &  HTMLDetailLink & "</A>")
				End If
				if AllowMultiSelect THen
				
					response.write ("<INPUT TYPE=CheckBox Name=SQLID VALUE=""" & server.URLEncode( arrGridData(SQLSelectIDPos,intRowCount-1)) & """>")
				end if

			End If
			If HTMLGridVertical Then
				Response.write ("</TD></TR>")
			Else
			response.write ("</TD>")
			
			End if
			response.write vbCRLF
			intCurrentField = 0
			
			If SQLSelectName = "" Then
			strFName =arrSQLSelect(intCurrentField)
			Else
			strFName =  arrSQLSelectName(intCurrentField)
			End If
			For Each fldTemp In arrSQLSelect 'ADORecordset.Fields
'response.write GridUseGetRows
				If SQLSelectHide = "" Then
					If GridUseGetRows Then
						strName = ArrSQLSelect(intCurrentField)
						varValue = arrGridData(intCurrentField,intRowCount-1)
						intType = arrSQLSelectType(intCurrentField)
					Else
						strName = ArrSQLSelect(intCurrentField)
						varValue = ADORecordset.Fields(intCurrentField)
						intType = arrSQLSelectType(intCurrentField)
					End If
				Else
					blnTemp = true
					For eleTemp = 0 To UBound(arrSQLSelectHide)
						If UCase(ArrSQLSelect(intCurrentField)) = UCase(arrSQLSelectHide(eleTemp)) Then
							blnTemp = false
							Exit For
						End If
					next
					If blnTemp Then
						If GridUseGetRows Then
							
							strName = ArrSQLSelect(intCurrentField)
							varValue = arrGridData(intCurrentField,intRowCount-1)
							intType = arrSQLSelectType(intCurrentField)
						Else
						
						strName = ArrSQLSelect(intCurrentField)
							varValue = ADORecordset.Fields(intCurrentField).Value
							intType = arrSQLSelectType(intCurrentField)
						End If
					End If
				End If
				'display field value
					dim arrHyperLink, strCD
	if strName <> "" THen
		If SQLSelectID = -1 Then
			SQLSelectID = -1
		End if
	If (Cint(intCurrentField  )= Cint(SQLSelectID) ) and GridHideAutonumber Then
	Else
	If HTMLGridVertical Then
		Response.write ("<TR>")
		if SQLSelectName = "" Then
			call DisplayFieldName (arrSQLSelect(intCurrentField), arrSQLSelectType(intCurrentField), 50, arrSQLSelect(intCurrentField))
		Else
			call DisplayFieldName (arrSQLSelect(intCurrentField), arrSQLSelectType(intCurrentField), 50, arrSQLSelectName(intCurrentField))
		End if
		Response.write ("<TD VALIGN=TOP>")
	Else
	response.write ("<TD " & HTMLAttribGridCell & " ")
	Select Case intType
		Case 11 'adBoolean
			response.write ("ALIGN=""CENTER""")
		Case 2, 3, 4, 5, 14, 16, 17, 18, 19, 20, 21, 128, 131, 204, 6 'adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, adVarBinary, adLongVarBinary, adCurrency, 
			response.write ("ALIGN=""RIGHT""")
		Case Else
			response.write ("ALIGN=""LEFT""")
	End Select
	response.write (" >")
	End if
	
	Select Case intType 'Check For fields that can't be displayed
		Case 128, 204, 205 'adBinary, adVarBinary, adLongVarBinary  Then Don't touch binary fields
			response.write (HTMLBinaryValue)
		Case Else 'retrieve value and check For null
			'varvalue = fldTemp.Value
'			Response.write varvalue = ""
			If IsNull(varvalue) Then 
				response.write (HTMLNullValue)
			ElseIf  varvalue = "" Then
				response.write (HTMLNullValue)
			ElseIf VarType( varvalue)= vbNull Then
				response.write  (HTMLNullValue)
			Else
				Select Case intType 'Check For fields that don't support drilldown
					Case 11 'adBoolean
						If HTMLTrueValue <> "" Then
							If varValue Then
								response.write (HTMLTrueValue)
							Else
								response.write (HTMLFalseValue)
							End If
						Else
							response.write (varValue)
						End If
					Case 203, 201, 135, 7, 133, 134 'adLongVarChar 
' 					Response.write "X"
						If SQLSelectFormat = "" Then
							
							If Len( varvalue) > GridMaxMemo Then
								
								response.write  (server.HTMLEncode(Left( varvalue,GridMaxMemo)) & HTMLMemoContinues)
							Else
								response.write (server.HTMLEncode(varvalue))
							End If
						Else
							Select Case UCase(arrSQLSelectFormat(intCurrentField))
								Case "LINEBREAKS"	
									response.write (Replace(server.HTMLEncode(varValue),vbCRLF,"<BR>"))
								Case "HYPERLINK"
									arrHyperlink = Split(varValue,"#")
									If arrHyperLink(0) = "" Then
										response.write ("<A HREF=""" & arrHyperLink(1) & """ target=_blank>" & arrHyperLink(1) & "</A>")
									Else
										response.write ("<A HREF=""" & arrHyperLink(1) & """ target=_blank>" & arrHyperLink(0) & "</A>")
									End If
								Case "HTML"
									response.write (varValue)
								Case Else
									If Len( varvalue) > GridMaxMemo Then
										response.write  (server.HTMLEncode(Left( varvalue,GridMaxMemo)) & HTMLMemoContinues)
									Else
										response.write (server.HTMLEncode(varvalue))
									End If
							End Select
						End If
					Case Else 'Fields eligible For drilldown
						If UCASE(GRIDMODE) = "BROWSE" AND ( request.Querystring("drilldown" & "_" & GridID) = "yes" and UCase(strName) <> UCase(SQLSelectID))  Then
							' These Set the drill down values 
							response.write  ("<A HREF=""" & strSCRIPT_NAME)
							Select Case intType
								Case 2, 3, 4, 5, 14, 16, 17, 18, 19, 20, 21, 128, 131, 204, 6, 11 'adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, adVarBinary, adLongVarBinary, adCurrency, adBoolean
									strCD = ""
								Case 135, 7, 133, 134 'adDBTimeStamp, adDate, adDBDate,  adDBTime
									If DatabaseType = "Access" Then
										strCD = "#"
								 	Else
			 							strCD = "'"
									End If
								Case 8, 129, 130, 200, 201, 202, 203 'adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar						
									strCD = "'"
							End Select
							Select Case intType
								Case 135, 7, 133, 134 'adDBTimeStamp, adDate, adDBDate,  adDBTime
									If SQLWhere = "" Then
										response.write ("?sqlwhere" & "_" & GridID & "=" & server.URLEncode(  FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " = " & strCD & FormatForSQL( Cstr(varvalue),DatabaseType,"SafeDate") & strCD  ))
									Else
										response.write ("?sqlwhere" & "_" & GridID & "=" & server.URLEncode( "(" & SQLWhere & ") AND (" & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " = " & strCD & FormatForSQL( Cstr(varvalue), DatabaseType, "SafeDate") & strCD & ")"))
									End If
								Case Else
									If SQLWhere = "" Then
										response.write ("?sqlwhere" & "_" & GridID & "=" & server.URLEncode(  FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " = " & strCD & Replace( varvalue,"'","''") & strCD  ))
									Else
										response.write ("?sqlwhere" & "_" & GridID & "=" & server.URLEncode( "(" & SQLWhere & ") AND (" & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " = " & strCD & Replace( varvalue,"'","''") & strCD & ")"))
									End If
							End Select
							For Each qstTemp In request.Querystring
								If UCase(qstTemp) <> "SQLWHERE" & "_" & GridID AND UCase(qstTemp) <> "OCDACTION" & "_" & GridID Then
									response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
								End If
							next
							response.write (""">")
						End If
						Select Case intType
							Case 6 'adCurrency 
								response.write (server.HTMLEncode( FormatCurrency(varvalue)))
							Case 8, 129, 130, 200, 201, 202, 203 'adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar	
								If SQLSelectFormat <> "" Then
									Select Case UCase(arrSQLSelectFormat(intCurrentField))
										Case "HTML"
											response.write  (varValue)
										Case Else
											response.write (server.HTMLEncode( varvalue))
									End Select
								Else
									response.write (server.HTMLEncode( varvalue))
								End If
							Case 2, 3, 4, 5, 14, 16, 17, 18, 19, 20, 21, 128'adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, 
								If SQLSelectFormat <> "" Then
									Select Case UCase(arrSQLSelectFormat(intCurrentField))
										Case "PERCENT"
											response.write (formatpercent(varValue,0,0,0,0))
										Case "COMMAS"
											response.write (FormatNumber( varvalue,0,0,0,-1))
										Case Else
											response.write (server.HTMLEncode(varValue))
									End Select	
								Else
									response.write (server.HTMLEncode(varValue))
								End If
							Case Else
								response.write (server.HTMLEncode(varValue))
						End Select
						If (request.Querystring("drilldown" & "_" & GridID) = "yes" and UCase(strName) <> UCase(SQLSelectID))  Then
							response.write ("</A>")
						End If
				End Select
			End If
	End Select
	response.write ("</TD>" )
	if HTMLGridVertical Then
		Response.write ("</TR>")
	End if
	End if
'end display field value
				strName = ""
				End if
				intCurrentField = intCurrentField + 1
			Next 
			response.write ("<TD >")
			If AllowDelete AND (SQLSelectID <> -1 or ((SQLSelectPK <> "") )) Then
				tmpSQLPKString = ""
				response.write  ("<A HREF=""" & FormEdit & "?" & strPKqstTemp & "&amp;ocdEditDelete=delete"" " & HTMLAttribDeleteLink & " >" & HTMLDeleteLink & "</A>")
				if AllowMultiDelete THen
				
					response.write ("<INPUT TYPE=CheckBox Name=SQLID VALUE=""" & server.URLEncode( arrGridData(SQLSelectIDPos,intRowCount-1)) & """>")
				end if
			Else
				response.write ("&nbsp;")
			End If
			response.write ("</TD></TR>" )
			If not response.IsClientConnected Then 
				Call Close
				response.clear
				response.end
			End If
			If not GridUseGetRows Then
				ADORecordset.MoveNext
				If ADORecordset.eof Then
					Exit For
				End If
			End If
		Next
		response.write ("</TABLE>")
		if AllowMultiDelete or AllowMultiSelect Then
			Response.write ("</FORM>")
		End if
	End Select
	Select Case UCase(strTemplate)
		Case "QUICK","","TOTALS","EXPORT"
			response.write (strCData)
			Select Case UCase(request.Querystring("ocdExportFormat_" & GRIDID))
				Case "EXCEL"
				'	response.write ("</TABLE>" )
				Case "PRINT"
					response.write ("</BODY></HTML>")
			End Select
	End Select
	Select Case UCase(strTemplate)
		Case "QUICK",""
			If UCase(GRIDMODE) = "EXPORT" Then
			'	response.end
			End If
	End Select
	Select Case UCase(strTemplate)
		Case "KEYWORD"
			call DisplayKeywordSearch()
	End Select
End Sub
public sub Close
	On Error Resume Next
	ADORecordset.close
	Set ADORecordSet = nothing
	ADOConnection.close
	Set ADOConnection = nothing
	Err.clear
End Sub

Private Sub DisplayFieldName (byVal strFieldName, byVal intFieldType, byVal intFieldSize, byVal strDisplayName)
	dim qstTemp, blnTemp, eleTemp, strTemp
	If strFieldName = SQLSelectID and GridHideAutonumber = True Then
		Exit Sub
	End If
	If HTMLGridVertical Then
		response.write ("<TD VALIGN=TOP NOWRAP ALIGN=LEFT><SPAN CLASS=FieldName>")
	Else
	response.write ("<TH VALIGN=TOP NOWRAP ALIGN=LEFT CLASS=GridHeader>")
	End if
	Select Case intFieldType
		Case 128,204, 205 'adBinary, adVarBinary, adLongVarBinary 
			If strDisplayName = "" Then
				response.write (Replace(strFieldName," ","&nbsp;"))
			Else
				response.write (strDisplayName )
			End If
			response.write HTMLAfterFieldName 
		Case Else
			' Make sorting links
			response.write ("" )
			If SQLSelectName = "" Then
				response.write (Replace(strFieldName," ","&nbsp;"))
			Else
				response.write (ArrSQLSelectName(intCurrentField))
			End If
			response.write HTMLAfterFieldName 
			If HTMLSortASCLink <> "" and UCase(GRIDMODE) <> "EXPORT" Then
				blnTemp = true
				If SQLSelectSortHide <> "" Then
					For Each eleTemp In arrSQLSelectSortHide
						If UCase(strFieldName) = UCase(eleTemp) Then
							blnTemp = false
							Exit For
						End If
					next
				End If
				If blnTemp Then
					strTemp = ""
					For Each qstTemp In request.Querystring
						If UCase(qstTemp) <> "SQLORDERBY" & "_" & GridID AND UCase(qstTemp) <> "OCDACTION" & "_" & GridID Then
							strTemp = strTemp &  "&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))
						End If
					next
					Select Case intFieldType
						Case 128, 205, 204, 201, 203 'adLongVarChar
							'don't build sort links For a memo or binary
						Case Else
							'Ascending
						  	response.write ("<A HREF=""" & strSCRIPT_NAME & "?sqlorderby" & "_" & GridID & "=")
							If request.querystring("sqlorderby" & "_" & GridID) = "" or not SearchMultiSort Then
								response.write (server.URLEncode( FormatForSQL(strFieldName, DatabaseType, "AddSQLIdentifier") & " ASC"))
							Else
								response.write (server.URLEncode(request.Querystring("sqlorderby" & "_" & GridID)) & ",+" & server.URLEncode( FormatForSQL(strFieldName, DatabaseType, "AddSQLIdentifier") & " ASC"))
							End If
							response.write (strTemp & """>" & HTMLSortASCLink & "</A>")
							'Create descending sort link
							response.write ("&nbsp;<A HREF=""" & strSCRIPT_NAME & "?sqlorderby" & "_" & GridID & "=" )
							If request.querystring("sqlorderby" & "_" & GridID) = "" or not SearchMultiSort Then
								response.write (server.URLEncode(FormatForSQL(strFieldName, DatabaseType, "AddSQLIdentifier") & " DESC"))
							Else
								response.write (server.URLEncode(request.Querystring("sqlorderby" & "_" & GridID)) & ",+" & server.URLEncode(FormatForSQL(strFieldName, DatabaseType, "AddSQLIdentifier") & " DESC"))
							End If
							response.write (strTemp & """>" & HTMLSortDESCLink & "</A>")
					End Select	
				End If		
			End If
			If HTMLFilterLink <> "" and UCase(GRIDMODE) <> "EXPORT" Then
				blnTemp = true
				If SQLSelectFilterHide <> "" Then
					For Each eleTemp In arrSQLSelectFilterHide
						If UCase(strFieldName) = UCase(eleTemp) Then
							blnTemp = false
							Exit For
						End If
					next
				End If
				If blnTemp Then
					response.write ("&nbsp;<A HREF=""" & strSCRIPT_NAME & "?ocdGridMode_" & GRIDID & "=Filter&amp;ocdFilterFieldName_" & GRIDID & "=" & server.URLEncode(strFieldName))
					If SQLSelectName <> "" Then
						response.write ("&amp;ocdFilterFieldDisplayName_" & GRIDID & "=" & server.URLEncode(ArrSQLSelectName(intCurrentField)))
					End If
					response.write ("&amp;ocdFilterFieldtype_" & GRIDID & "=" & server.Urlencode(intFieldType) & "&amp;ocdFilterFieldSize_" & GRIDID & "=" & server.urlencode(intFieldSize))
					For Each qstTemp In request.Querystring
						Select Case UCase(qstTemp) 
							Case "GRIDID", UCase("OCDGRIDMODE_" & GridID), UCase("OCDFILTERFIELDNAME_" & GridID), UCase("OCDFILTERFIELDDISPLAYNAME_" & GridID), "OCDACTION_" & GridID,"OCDFILTERFIELDTYPE_" & GridID, "OCDFILTERFIELDSIZE_" & GridID,"DatabaseType_" & GridID,"SCRIPT_" & GridID
							Case Else
								response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
						End Select
					next
					response.write  (""">" & HTMLFilterLink & "</a>")
				End If
			End If
			response.write (" ")
	End Select
	if HTMLGridVertical Then
		response.write ("</SPAN></TD>")
	Else
	response.write ("</TH>")
	End if
	response.write vbCRLF
End Sub
Public Sub DisplayKeywordSearch ()
	dim qstTemp
	response.write ("<FORM method=""Post"" action=""" &  strSCRIPT_NAME &  "?ocdGridMode_" & GRIDID & "=Process&amp;")
	For Each qstTemp In request.querystring
		If UCase(qstTemp) <> UCase(("OCDGRIDMODE_" & GRIDID)) AND  UCase(qstTemp) <> UCase("OCDFILTERFIELD_" & GRIDID)  AND UCase(qstTemp) <> UCase("OCDACTION_" & GRIDID) AND UCase(qstTemp) <> UCase("OCDKEYWORD_" & GRIDID) Then
			response.write  (qstTemp  &  "=" &  server.urlencode(request.querystring(qstTemp)) &  "&amp;")
		End If
	next
	response.write  (""" >")
	response.write ("<INPUT name=""ocdSearchExistslogic_" & GRIDID & """ value=""NEITHER"" type=""hidden"">")
	response.write ("<INPUT name=""ocdSearchlogic_" & GRIDID & """ value=""AND"" type=""hidden"">")
	response.write ("<TABLE BORDER=0><TR>" & "<TD NOWRAP>" & HTMLSearchKeyword & "<INPUT name=""ocdKeyword_" & GRIDID & """ VALUE=""" & server.htmlencode(request.querystring("ocdKeyword_" & GRIDID)) & """ size=30 MAXLENGTH=255>  " & "<INPUT name=""ocdFind_" & GRIDID & """" & HTMLAttribFindBtn & ">" & "<INPUT name='ocdFindBrowse' TYPE=Hidden Value=yes>" & "</TD></TR></TABLE>")
	response.write ("</FORM>")
End Sub
Private Sub DisplayGridButtons ()
	dim qstTemp, arrShowGridButtons, eleShowGridButtons, tmpExportqstTemp, tmpstrPageLinkqstTemp, arrGRIDBE
	If HTMLGridButtons = "" Then
		Exit Sub
	End If
	If FormSearch = "" Then
		FormSearch = strSCRIPT_NAME
	End If
	tmpstrPageLinkqstTemp = ""
	For Each qstTemp In request.Querystring
		If UCase(qstTemp) <> "SQLPAGE_" & GridID AND UCase(qstTemp) <> "OCDACTION_" & GridID  Then
			tmpstrPageLinkqstTemp = tmpstrPageLinkqstTemp & "&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))
		End If
	next
	tmpExportqstTemp = "&amp;sqlselect_" & GridID &"=" & server.urlencode(SQLSelect) & "&amp;sqlfrom_" & GridID &"=" & server.urlencode(request.QUerystring("SQLFrom_" & GRIDID))& "&amp;sqlwhere_" & GridID &"=" & server.urlencode(SQLWhere) & "&amp;sqlorderby_" & GridID &"=" & server.urlencode(SQLOrderBy)& "&amp;sqlselecthide_" & GridID &"=" & server.urlencode(SQLSelectHide)
	For Each qstTemp In request.Querystring
		Select Case UCase(qstTemp) 
			Case "SQLWHERE_" & GridID, "SQLORDERBY_" & GridID, "SQLSELECT_" & GridID, "OCDACTION_" & GridID, "SQLFROM_" & GridID , "SQLSELECTHIDE_" & GridID 
			Case Else
				tmpExportqstTemp = tmpExportqstTemp & "&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))
		End Select
	next
	arrShowGRIDButtons = Split(HTMLGridButtons,";;")
	Response.write ("<TABLE " & HTMLAttribButtonPanel & " ><TR>")
	For Each eleShowGridButtons In arrShowGridButtons
		Response.write ("<TD ALIGN=CENTER VALIGN=TOP NOWRAP>")
		arrGRIDBE = Split(eleShowGridButtons,"|")
		response.write (" " )
		Select Case UCase(arrGRIDBE(0)) 
			Case "SEARCH"
				response.write (" <A HREF=""" & FormSearch & "?ocdGridMode_" & GRIDID & "=Search")
				For Each qstTemp In request.Querystring
					If UCase(qstTemp) <> ("OCDGRIDMODE_" & UCase(GRIDID))  AND UCase(qstTemp) <> "OCDACTION_" & GridID  Then
						response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
					End If
				next
				response.write  (""">")
				If UBound(arrGridBE) > 0 Then
					response.write (arrGridBE(1))
				Else
					response.write (arrGridBE(0))
				End If
				response.write ("</a> ")
			Case "DRILLDOWN"
				If UCase(request.QueryString("DrillDown" & "_" & GridID))="YES" Then
					response.write (" <A HREF=""" & strSCRIPT_NAME & "?DrillDown" & "_" & GridID & "=")
					For Each qstTemp In request.Querystring
						If  UCase(qstTemp) <> "OCDACTION_" & GridID AND UCase(qstTemp) <> "DRILLDOWN_" & GridID Then
							response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
						End If
					next
					response.write (""">" & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A>")
				Else
					response.write ("<A HREF=""" & strSCRIPT_NAME & "?DrillDown_" & GridID & "=yes")
					For Each qstTemp In request.Querystring
						If  UCase(qstTemp) <> "OCDACTION_" & GridID AND UCase(qstTemp) <> "DRILLDOWN_" & GridID Then
							response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
						End If
					next
					response.write ("""> " & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A>")
				End If
			Case "RESET"
				If request.querystring("SQLORDERBY_" & GRIDID) <> "" or request.querystring("SQLWHERE_" & GRIDID) <> "" Then
					response.write (" <A HREF=""" & FormSearch & "?sqlorderby_" & GRIDID & "=&amp;sqlwhere_" & GRIDID & "=")
					For Each qstTemp In request.Querystring
						If UCase(qstTemp) <> "SQLORDERBY_" & GRIDID AND UCase(qstTemp) <> "SQLWHERE_" & GridID  AND UCase(qstTemp) <> "OCDACTION_" & GridID  Then
							response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
						End If
					next
					response.write  ("""> " )
				End If
				response.write  (mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
				If request.querystring("SQLORDERBY_" & GRIDID) <> "" or request.querystring("SQLWHERE_" & GRIDID) <> "" Then
					response.write ( "</a>")
				End If
			Case "FIRST"
				If SQLPage > 1 Then
					response.write (" <A HREF=""" & strSCRIPT_NAME & "?sqlpage" & "_" & GridID & "=" & "1" & tmpstrPageLinkqstTemp &  """>")
				End If
				response.write (mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
				If SQLPage > 1 Then
					response.write ("</A>")
				End If
				response.write (" ")
			Case "PREV"
				response.write (" ")
				If SQLPage > 1 Then
					response.write ("<A HREF=""" & strSCRIPT_NAME & "?sqlpage_" & GridID & "=" &  Cstr( SQLPage - 1) & tmpstrPageLinkqstTemp & """>")
				End If
				response.write (mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
				If SQLPage > 1 Then
					response.write ("</A>")
				End If
			Case "CUSTOM"
				response.write ( mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
			Case "NEXT"
				If SQLPage < SQLPageCount Then
					response.write (" <A HREF=""" & strSCRIPT_NAME	)
					response.write ("?sqlpage_" & GridID & "=" & Cstr( SQLPage + 1) & tmpstrPageLinkqstTemp & """>")
				End If
				response.write (mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
				If SQLPage < SQLPageCount Then
					response.write ("</A> ")
				End If
			Case "LAST"
				If SQLPage < SQLPageCount Then
					response.write (" <A HREF=""" & strSCRIPT_NAME & "?sqlpage_" & GridID & "=" & Cstr( SQLPageCount) & tmpstrPageLinkqstTemp & """>")
				End If
				response.write (mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))
				If SQLPage < SQLPageCount Then
					response.write ("</A>")
				End If
			Case "PRINT"
				response.write (" <A HREF=""" & strSCRIPT_NAME & "?ocdGridMode_" & GRIDID & "=Export&amp;ocdExportFormat_" & GRIDID & "=PRINT" & tmpExportqstTemp & """ target=_blank>" & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A> ")
			Case "PAGING"
			 If UCase((mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))) = "SMBUTTON" THen
				Response.write (" <TABLE WIDTH=26 HEIGHT=18 BORDER=1 CELLSPACING=0 CELLPADDING=2><TR><TD HEIGHT=12 NOWRAP ALIGN=CENTER VALIGN=MIDDLE  ><FONT  SIZE=1>")
ElseIf UCase((mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))) = "BUTTON" THen

			Response.write (" <TABLE WIDTH=26 HEIGHT=26 BORDER=1 CELLSPACING=0 CELLPADDING=3><TR><TD HEIGHT=12 NOWRAP ALIGN=CENTER BGCOLOR=Silver VALIGN=MIDDLE  ><FONT SIZE=2 COLOR=BLACK >")
			End if
		if IsNumeric(SQLRecordCount) Then
			If SQLRecordCount > 0 Then
				
				Response.write (" ")
				Response.write (SQLPageSize * (SQLPage -1 ) + 1)
				If SQLPageSize > 1 Then
					Response.write (" - ")
					if SQLRecordCount < (SQLPageSize * (SQLPage)) Then
						Response.write (SQLRecordCount)
					Else
						Response.write (SQLPageSize * (SQLPage))
					End if
				End if		
				Response.write (" : ")
				Response.write (SQLRecordCount)
			Else
				Response.write ("0 : 0")
			End if
		Else
				Response.write (" ")
				Response.write ((SQLPageSize * (SQLPage -1)) + 1)
				Response.write (" - ")
				Response.write (SQLPageSize * (SQLPage))
				Response.write (" : ")
'				Response.write (ADOMaxRecords)
				Response.write (server.htmlencode("???"))
		End if
		 If UCase((mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))) = "BUTTON" or UCase((mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1))) = "SMBUTTON" Then
				Response.write ("</FONT></TD></TR></TABLE> ")
			End if
			Case "TEXT"
				response.write (" <A HREF=""" & strSCRIPT_NAME & "?ocdGridMode_" & GRIDID & "=Export&amp;ocdExportFormat_" & GRIDID & "=text" & tmpExportqstTemp & """ ")
				If not ExportForceDownload Then
					response.write ("target=_blank")
				End If
				response.write (">" & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A> ")
			Case "XML"
				Select Case Cstr(request.servervariables("server_software"))
				Case "Microsoft-IIS/5.0","Microsoft-IIS/5.1"
				response.write (" <A HREF=""" & strSCRIPT_NAME & "?ocdGridMode_" & GRIDID & "=Export&amp;ocdExportFormat_" & GRIDID & "=xml" & tmpExportqstTemp & """ ")
				If not ExportForceDownload Then
					response.write ("target=_blank")
				End If
				response.write (">" & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A> ")
				End Select
			Case "EXCEL"
				response.write (" <A HREF=""" & strSCRIPT_NAME & "?ocdGridMode_" & GridID & "=Export&amp;ocdExportFormat_" & GRIDID & "=excel" & tmpExportqstTemp & """ ")
				If not ExportForceDownload Then
					response.write ("target=_blank")
				End If
				response.write (">" &  mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A> ")
			Case "NEW"
				If (SQLSelectID <> -1 or SQLSelectPK <> "") and AllowAdd Then
				If UCase(FormEdit) = "EDIT.ASP" or UCase(FormEdit) = "FREEEDIT.ASP" Then
					response.write (" <A HREF=""" & FormEdit & "?sqlfrom=" & server.urlencode(sqlfrom))
				Else
					response.write (" <A HREF=""" & FormEdit & "?sqlid=")
	
				End if
					For Each qstTemp In request.Querystring
						If  UCase(qstTemp) <> "SQLWHERE" AND UCase(qstTemp) <> "SQLID" AND UCase(qstTemp) <> "OCDACTION_" & GridID and UCase(qstTemp) <> "SQLFROM" Then
							response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
						End If
					next
					response.write ("""> " & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A>")
				End If
			Case "GRAPH"
				response.write (" <A HREF=""" & "GraphIt.asp" & "?GraphType=3&amp;GridID=" & GRIDID & "&amp;" & "sqlselect_" & GridID &"=" & server.urlencode(SQLSelect) & "&amp;sqlfrom_" & GridID &"=" & server.urlencode(SQLFrom)& "&amp;sqlwhere_" & GridID &"=" & server.urlencode(SQLWhere) & "&amp;sqlorderby_" & GridID &"=" & server.urlencode(SQLOrderBy)& "&amp;sqlselecthide_" & GridID &"=" & server.urlencode(SQLSelectHide))
				For Each qstTemp In request.Querystring
					Select Case UCase(qstTemp) 
						Case "GRIDID", "SQLWHERE_" & GridID, "SQLORDERBY_" & GridID , "SQLSELECT_" & GridID , "OCDACTION_" & GridID , "SQLFROM_" & GridID , "SQLSELECTHIDE" & "_" & GridID 
						Case Else
							response.write ("&amp;" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp)))
					End Select
				next
				response.write  (""" > " & mid(eleShowGridButtons, InStr(eleShowGridButtons,"|")+1) & "</A>")
		End Select		
		Response.write (" </TD>")
	Next
	Response.write ("</TR></TABLE>")
End Sub
Private Sub ProcessSearch()

	dim strRedirect, strKeywordNumberFields, strKeywordTextFields, strSQLSearchWhere, strKeyword, strSQLSearchFrom, qstTemp, intTemp, intFieldType, intTemp2, arrTemp, fmTemp, eleTemp, strKeywordCurrencyFields
	strKeywordCurrencyFields = ""
	If request.form("ocdCancel_" & GRIDID) <> "" Then
		strRedirect = strSCRIPT_NAME & "?sqlfrom_" & GRIDID & "=" & request.querystring("sqlfrom_" & GRIDID)
		'strip out any unwanted querystrings
		For Each qstTemp In request.Querystring
			If UCase(qstTemp) <> UCase("sqlfrom_" & GRIDID) And UCase(qstTemp) <> UCase("OCDFILTERFIELDNAME_" & GRIDID) AND UCase(qstTemp) <> UCase("OCDGRIDMODE_" & GRIDID) AND UCase(qstTemp) <> UCASE("OCDFILTERFIELDTYPE_" & GRIDID) AND UCase(qstTemp) <> "OCDFILTERSIZE" AND UCase(qstTemp) <> "DATABASETYPE" AND UCase(qstTemp) <> "GRIDID" AND UCase(qstTemp) <>  "SCRIPT" AND UCase(qstTemp) <>  "OCDACTION_" & GRIDID AND UCase(qstTemp) <> "OCDFILTERDISPLAYNAME" Then
				strRedirect = strRedirect  & "&" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))
			End If
		next
		Call Close
'		response.write strRedirect
'		response.end
		response.redirect (strRedirect)
	End If
	strSQLSearchWhere = ""
	
	If request.form("ocdKeyword_" & GRIDID) <> "" Then
		if SearchKeywordTextFields <> "" or SearchKeywordNumberFields <> "" Then
			strKeywordTextFields = SearchKeywordTextFields & ","
			strKeywordNumberFields = SearchKeywordNumberFields & ","
		Else
			strKeywordTextFields = ""
			strKeywordNumberFields = ""
			strKeywordCurrencyFields = ""
		'create list of keyword fields
			intTemp = 0
			For Each eleTemp In arrSQLSelect
				Select Case CInt(arrSQLSelectType(intTemp))
					Case 129, 200, 201, 130, 202, 203 'adChar, adVarChar, adLongVarChar, adWChar, adVarWChar, adLongVarWChar 
						strKeywordTextFields = strKeywordTextFields & eleTemp & ","
					Case 2, 3, 4, 5, 14, 16, 17, 18, 19, 20, 21, 131, 6, 11, 135, 7, 133, 134  'adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, adVarBinary, adLongVarBinary, adCurrency, adBoolean'adDBTimeStamp, adDate, adDBDate,  adDBTime
						strKeywordNumberFields = strKeywordNumberFields & eleTemp & ","

					if CInt(arrSQLSelectType(intTemp)) = 6 then
					IF DatabaseType = "SQLServer" then
					
				strKeywordCurrencyFields = strKeywordCurrencyFields & eleTemp & ","	
				
					
					end if
					End if
				End Select
				intTemp = intTemp + 1
			next
		End if
				
		If strKeywordTextFields <> "" or strKeywordNumberFields <> "" Then
			strKeyword = request.form("ocdKeyword_" & GRIDID)
			If strKeywordTextFields <> "" Then
				strKeywordTextFields = Left(strKeywordTextFields,Len(strKeywordTextFields)-1)
				arrTemp= Split(strKeywordTextFields,",")
				For intTemp2 = 0 To UBound(arrTemp)
					strSQLSearchWhere = strSQLSearchWhere &  FormatForSQL(arrTemp(intTemp2), DatabaseType, "AddSQLIdentifier") & " LIKE '%" & strKeyword & "%' OR "
				next
			End If
			dim arrCF, eleCF, blnISC
				arrCF= Split(strKeywordCurrencyFields,",")

			Select Case DatabaseType
				Case "Access","SQLServer"
					If strKeywordNumberFields <> "" Then
						strKeywordNumberFields = Left(strKeywordNumberFields,Len(strKeywordNumberFields)-1)
						arrTemp= Split(strKeywordNumberFields,",")
						If IsNumeric(strKeyword) Then	
							For intTemp2 = 0 To UBound(arrTemp)
								If DatabaseType = "Access" Then
									strSQLSearchWhere = strSQLSearchWhere &  "IIf(isnull(" & FormatForSQL(arrTemp(intTemp2), DatabaseType, "AddSQLIdentifier") & "),'',CStr(" & FormatForSQL(arrTemp(intTemp2), DatabaseType, "AddSQLIdentifier") & ")) LIKE '%" & strKeyword & "%' OR "
								Else
									blnIsC = False
									for each eleCF in arrCF
										if UCase(eleCF) = UCase(arrTemp(intTemp2)) Then
											blnIsC = True
											exit for
										end if
									next		
									if blnIsC then
												strSQLSearchWhere = strSQLSearchWhere & "CONVERT(varchar(255)," & FormatForSQL(arrTemp(intTemp2), DatabaseType, "AddSQLIdentifier") & ") LIKE '%" & strKeyword & "%' OR "	
									Else
									
										strSQLSearchWhere = strSQLSearchWhere & "" & FormatForSQL(arrTemp(intTemp2), DatabaseType, "AddSQLIdentifier") & " LIKE '%" & strKeyword & "%' OR "								End if
								End If
							next
						End If
					End If
			End Select
			If right(strSQLSearchWhere,1) <> "(" and strSQLSearchWhere <> "" Then
				strSQLSearchWhere = Left(strSQLSearchWhere,Len(strSQLSearchWhere)-4)
			End If
		Else 'no keyword fields found
		End If
	Else 'no keyword submitted
	End If
	dim strSFieldName, intLenIdent
	For Each fmTemp In request.Form
		Response.write fmTemp
		response.write " - "
		response.write server.htmlencode(request.Form(fmTemp))
		Response.write "<BR>"
		If Len(fmTemp) > (14 + Len(GRIDID)) Then
		strSFieldName = mid(fmTemp,(14+ Len(GRIDID)))
		If UCase(Left(fmTemp,(13 + Len(GRIDID)))) = UCase("OCDSEARCHTXT_" & GRIDID) Then
			If (not request.Form( fmTemp ) = "") or (UCase(request.Form("ocdSearchSec_" & GRIDID & strSFieldName)) = "IS NULL" OR UCase(request.Form("sec" & mid( fmTemp ,4))) = "IS NOT NULL") Then
				strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchlogic_" & GRIDID) &" " 
			  	strSQLSearchWhere = strSQLSearchWhere & " " & FormatForSQL(strSFieldName, DatabaseType, "AddSQLIdentifier") & " "
				intTemp = 0
				For Each eleTemp In arrSQLSelect
					If UCase(arrSQLSelect(intTemp)) = UCase(strSFieldName) Then
						Exit For
					End If
					intTemp = intTemp + 1
				next
				Select Case CInt(arrSQLSelectType(intTemp))
					Case 16, 2, 3, 20, 17, 18, 19, 21, 4, 5, 6, 14, 131, 11'adTinyInt, adSmallInt, adInteger,adBigInt,adUnsignedTinyInt, adUnsignedSmallInt,adCurrency,adSingle,adDouble,adDecimal,adNumeric
						strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchsec_" & GRIDID & strSFieldName) & " " & request.Form( fmTemp ) & " "
					Case 7, 133, 134, 135 'adDBTimeStamp, adDate, adDBDate,  adDBTime
						If UCase(request.Form("ocdSearchtxt_" & GRIDID & strSFieldName)) = "NULL" Then
							strSQLSearchWhere = strSQLSearchWhere & " Is " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " Null"
						ElseIf UCase(request.Form("ocdSearchtxt_" & GRIDID & strSFieldName)) = "NOT NULL" Then
							strSQLSearchWhere = strSQLSearchWhere & " Is Not Null"
						Else	
							If DatabaseType="Access" Then
								If request.Form("ocdSearchtx2_" & GRIDID & strSFieldName) = "" Then
									strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " = #" & request.Form( fmTemp ) & "#"
								Else
									strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " BETWEEN #" & request.Form( fmTemp ) & "# AND #" & request.Form("ocdSearchtx2_" & GRIDID & strSFieldName) & "#"
								End If
							Else
								If request.Form("ocdSearchtx2_" & GRIDID & strSFieldName) = "" Then
									strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " = '" & request.Form( fmTemp ) & "'"
								Else
									strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " BETWEEN '" & request.Form( fmTemp ) & "' AND '" & request.Form("ocdSearchtx2_" & GRIDID & strSFieldName) & "'"
								End If
							End If
						End If
					Case Else
						If UCase(request.Form("ocdSearchsec_" & GRIDID & strSFieldName)) = "IS NULL" Then
		 					strSQLSearchWhere = strSQLSearchWhere & " Is "  & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " Null"
						ElseIf UCase(request.Form("ocdSearchsec_" & GRIDID & strSFieldName)) = "IN" Then
					 		strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " In (" & request.Form( fmTemp ) & ")"
						ElseIf UCase(request.Form("ocdSearchsec_" & GRIDID & strSFieldName)) = "IS" Then
			 				strSQLSearchWhere = strSQLSearchWhere & " Is "  & request.Form("ocdSearchslg_" & GRIDID & strSFieldName) & " " & Replace(request.Form( fmTemp ),"'", "''") & ""
						ElseIf UCase(request.Form("ocdSearchsec_" & GRIDID & strSFieldName)) = "CONTAINS" Then
				 			strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSEarchslg_" & GRIDID & strSFieldName) & " Like '%" & Replace(request.Form( fmTemp ),"'", "''") & "%'"
						ElseIf UCase(request.Form("ocdSEarchsec_" & GRIDID & strSFieldName)) = "STARTS WITH" Then
				 			strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_"  & GRIDID & strSFieldName) & " Like '" & Replace(request.Form( fmTemp ),"'", "''") & "%'"
						ElseIf UCase(request.Form("ocdSEarchsec_" & GRIDID & strSFieldName)) = "LIKE" Then
				 			strSQLSearchWhere = strSQLSearchWhere & " " & request.Form("ocdSearchslg_"  & GRIDID & strSFieldName) & " Like '" & Replace(request.Form( fmTemp ),"'", "''") & "'"

						Else
							If request.Form("ocdSearchslg_" & GRIDID & strSFieldName) <> "" Then
								strSQLSearchWhere = strSQLSearchWhere  & " <> '" & Replace(request.Form( fmTemp ),"'", "''") & "'"
							Else
								strSQLSearchWhere = strSQLSearchWhere  & " = '" & Replace(request.Form( fmTemp ),"'", "''") & "'"
							End If
						End If
				End Select
			End If
		End If
		End If
	next
	Select Case Left(strSQLSearchWhere, 4)
		Case " AND", " OR "
			If Request("ocdSearchlogic_" & GRIDID) = "AND" Then
				strSQLSearchWhere = mid( strSQLSearchWhere ,7)
			Else
				strSQLSearchWhere = mid( strSQLSearchWhere ,6)
			End If
	End Select
	strSQLSearchWhere = trim(strSQLSearchWhere)
	strSQLSearchFrom = ""
	intTemp = 0
	For Each eleTemp In arrSQLSelect
		If request.Form("ocdSearchexischk_" & GRIDID & UCase(eleTemp))<> "" AND request.Form("ocdSearchshowchk_" & GRIDID &  UCase(eleTemp)) = "" Then 
			strSQLSearchFrom = strSQLSearchFrom & eleTemp & ","
		End If
		intTemp = intTemp + 1
	next
	If strSQLSearchFrom <> "" Then
		strSQLSearchFrom = Left(strSQLSearchFrom,Len(strSQLSearchFrom)-1)
	End If
	strRedirect = strSCRIPT_NAME  & "?"
	strRedirect = strRedirect & "sqlorderby_" & GRIDID & "=" 
	
	If request.form("ocdSearchOrderBy_" & GRIDID) <> "" Then
		If DatabaseType = "Access" Then
			strRedirect = strRedirect & server.urlencodE("[")
		Else
			strRedirect = strRedirect & server.urlencodE("""")
		End If
		strRedirect = strRedirect & server.URLEncode(request.form("ocdSearchOrderBy_" & GRIDID))
		If DatabaseType = "Access" Then
			strRedirect = strRedirect & server.urlencodE("]")
		Else
			strRedirect = strRedirect & server.urlencodE("""")
		End If
		strRedirect = strRedirect & server.URLEncode(" " & request.form("ocdSearchOrderByOrder_" & GRIDID))
		If SearchSortSize > 1 Then
			For intTemp = 2 To SearchSortSize
				If request.form("ocdSearchOrderBy_" & GRIDID  & Cstr(intTemp)) <> "" Then
					If DatabaseType = "Access" Then
						strRedirect = strRedirect & server.urlencodE(", [")
					Else
						strRedirect = strRedirect & server.urlencodE(", """)
					End If
					strRedirect = strRedirect & server.URLEncode(request.form("ocdSearchOrderBy_" & GRIDID & Cstr(intTemp)))
					If DatabaseType = "Access" Then
						strRedirect = strRedirect & server.urlencode("]")
					Else
						strRedirect = strRedirect & server.urlencode("""")
					End If
					strRedirect = strRedirect & server.URLEncode(" " & request.form("ocdSearchOrderByOrder_" & GRIDID &  Cstr(intTemp)))
				End If
			Next
		End If
	Else
		strRedirect = strRedirect & server.urlencode(request.querystring("sqlorderby_" & GRIDID))
	End If
	
	strRedirect = strRedirect & "&sqlwhere_" & GRIDID & "="
	If request.Querystring("sqlWhere_" & GRIDID) <> "" Then
	
		If request("ocdSearchexistslogic_" & GRIDID) = "NEITHER" Then
			If request.form("ocdFindBrowse_" & GRIDID) = "" Then
			
 				If strSQLSearchWhere <> "" Then
					strRedirect = strRedirect & "(" &  server.URLEncode( Trim(strSQLSearchWhere) ) & ")"
				End If
			Else
				If strSQLSearchWhere <> "" Then
					strRedirect = strRedirect &  " (" &  server.URLEncode( Trim(strSQLSearchWhere) ) & ")"
					If SearchPersistKeyword Then
						strRedirect = strRedirect & "&ocdKeyword_" & GRIDID & "=" & server.urlencode(request.form("ocdKeyword_" & GRIDID))
					End If
				Else
					strRedirect = strRedirect & ""
				End If
			End If
		Else
			If request.form("ocdFindBrowse_" & GRIDID) = "" Then
 				If strSQLSearchWhere <> "" Then
 					
					strRedirect = strRedirect & "((" & server.URLEncode(request.QUeryString("sqlwhere_" & GRIDID)) & ") " & Request("ocdSearchExistslogic_" & GRIDID) & " (" &  server.URLEncode( Trim(strSQLSearchWhere) ) & "))"
				Else
					strRedirect = strRedirect &  server.URLEncode(request.QUeryString("sqlwhere_" & GRIDID)) 
				End If
				If SearchPersistKeyword Then
					strRedirect = strRedirect & "&ocdKeyword_" & GRIDID & "=" & server.urlencode(request.form("ocdKeyword_" & GRIDID))
				End If
			Else
				If strSQLSearchWhere <> "" Then
					strRedirect = strRedirect &  " (" &  server.URLEncode( Trim(strSQLSearchWhere) ) & ")"
					If SearchPersistKeyword Then
						strRedirect = strRedirect & "&ocdKeyword_" & GRIDID & "=" & server.urlencode(request.form("ocdKeyword_" & GRIDID))
					End If
				End If
			End If
		End If
	Else
		If strSQLSearchWhere <> "" Then
			strRedirect = strRedirect  &  "(" & server.URLEncode( Trim(strSQLSearchWhere) ) & ")"
			If SearchPersistKeyword Then
				strRedirect = strRedirect & "&ocdKeyword_" & GRIDID & "=" & server.urlencode(request.form("ocdKeyword_" & GRIDID))
			End If
		End If
	End If
 	strRedirect = strRedirect & "&sqlselecthide_" & UCase(GRIDID) & "=" & server.urlencode(strSQLSearchFrom)
	strRedirect = strRedirect &  "&sqlpagesize_" & GRIDID & "=" & server.urlencode(request.form("ocdSearchPageSize_" & GRIDID))
	For Each qstTemp In request.Querystring
		Select Case UCase(qstTemp)
			Case  UCase("OCDGRIDMODE_" & GRIDID), UCase("OCDFILTERFIELDNAME_" & GRIDID), "SQLWHERE_" & UCase(GRIDID),  "SQLSELECTHIDE_" & UCase(GRIDID), "SQLORDERBY_" & UCase(GRIDID), "SQLPAGESIZE_" & UCase(GRIDID), "OCDFILTERFIELDTYPE_" & UCase(GRIDID), "OCDFILTERFIELDSIZE_" & UCase(GRIDID), "DATABASETYPE_" & UCase(GRIDID), "OCDACTION_" & UCase(GRIDID), "OCDKEYWORD_" & GRIDID, "SCRIPT_" & UCase(GRIDID)
			Case Else
				strRedirect = strRedirect  & "&" & qstTemp  & "=" & server.URLEncode(request.Querystring(qstTemp))
		End Select
	next
	Call Close
	If Len(strRedirect) > GridMaxURLLength Then
		Err.raise (1030)
		Exit Sub
		response.end
	End If
	response.clear
	response.redirect (strRedirect)
End Sub

Private Sub DisplayFilter(byVal strGridID)
	dim intSize, intType, strName, qstTemp, arrFilterDropDownFields, eleFilterDropDownFields, showdropdown
	response.write  ("<FORM method=""Post"" action=""" & strSCRIPT_NAME & "?ocdGridMode_" & GRIDID & "=Process&amp;" )
	For Each qstTemp In request.querystring
		Select Case UCase(qstTemp)
		case UCase("OCDFILTERFIELDTYPE_" & GRIDID ), UCase("OCDFILTERFIELDNAME_" & GRIDID), UCase("OCDFILTERFIELDDISPLAYNAME_" & GRIDID), UCase("OCDGRIDMODE_" & GRIDID), UCase("OCDFILTERFIELDSIZE_" & GRIDID)
		Case Else
			response.write (qstTemp & "=" & server.URLEncode(request.querystring(qstTemp)) & "&amp;")
		End Select
	next
	response.write (""">")
	' format each field according To its type
	strName = request.querystring("ocdFilterFieldName_" & GRIDID)
	intSize = CLng(request.querystring("ocdFiltersize_" & GRIDID))
	intType = CInt(request.querystring("ocdFilterFieldtype_" & GRIDID))
	Select Case intType
		Case 128, 205, 204'adBinary adVarBinary adLongVarBinary
			'do nothing
		Case Else
			If request.querystring("ocdFilterFielddisplayname_" & GRIDID) <> "" Then
			'no html encode
				response.write ("<SPAN CLASS=FieldName>" & (request.querystring("ocdFilterFielddisplayname_" & GRIDID)) & "</SPAN>")
			Else
			response.write ("<span class=""FieldName"">")
			If SQLSelectName <> "" Then
				response.write	(strName)
			Else
				response.write (server.htmlencode(strName))
			End If

			Response.write ("</span>")
			End If
			response.write ("&nbsp;")
			showdropdown = false
			call DisplaySearchItem(strName, intType, intSize, showdropdown)
	End Select	
	response.write ("<p>")
	If SQLWhere <> "" Then
		response.write ("<input name=""ocdSearchexistslogic_" & GRIDID & """ value=""AND"" type=""radio"" checked >" & HTMLSearchAnd & "<input name=""ocdSearchexistslogic_" & GRIDID & """ value=""OR"" type=""radio"" >" & HTMLSearchOr )
		response.write ("<input name=""ocdSearchexistslogic_" & GRIDID & """ value=""NEITHER"" type=""radio"" checked >" & HTMLSearchReSet & "&nbsp;&nbsp;&nbsp;&nbsp;" )
		response.write (SQLWhere & "<P>")
	End If
	response.write ("<input name=""ocdFind_" & GRIDID & """" & HTMLAttribFindBtn & ">&nbsp;")
	response.write ("<input name=""ocdCancel_" & GRIDID & """" & HTMLAttribCancelBtn & ">")
	response.write ( "</FORM>")
End Sub

Private Sub DisplaySearch(byVal strGridID)
	dim intSize, fldtype, strName, qstTemp, arrSQLSelectSearchHide, searchfieldcount, arrSQLSelectSearchDropDown, eleSQLSelectSearchDropDown, elesearchfieldhide, eleshowcheck, arrSQLSelectHideFields, eleSQLSelectHideFields, intOBLoo, intTemp, eleTemp, blnTemp, arrSQLSelectSearchUncheck
	If SQLSelectSearchUncheck <> "" Then
		arrSQLSelectSearchUncheck = Split(SQLSelectSearchUncheck,",")
	End If
	If SQLSelectName <> "" Then
		ArrSQLSelectName =Split(SQLSelectName,",")
	End If
	response.write  ("<FORM method=""Post"" action=""" & strSCRIPT_NAME & "?ocdGridMode_" & GridID & "=Process&amp;")
	For Each qstTemp In request.querystring
		If UCase(qstTemp) <> UCase("OCDGRIDMODE_" & GRIDID) Then
			response.write (qstTemp & "=" & server.urlencode(request.querystring(qstTemp)) & "&amp;")
		End If
	Next
	response.write (""" >")
	If SQLSelectSearchUncheck <> "" Then
		arrSQLSelectSearchUncheck = Split(SQLSelectSearchUncheck,",")
	End If
	If SQLSelectSearchHide <> "" Then
		arrSQLSelectSearchHide = Split(SQLSelectSearchHide,",")
	End If
	response.write ("<TABLE >")
	If SearchShowKeyword and UBound(arrSQLSelect) > 0 Then
		response.write ("<TR><TD ALIGN=Right NOWRAP>" & HTMLSearchKeyword & "</TD><TD COLSPAN=3><INPUT name=""ocdKeyword_" & GRIDID & """ size=30></TD></TR>")
	End If
	If SQLSelectName <> "" Then
		ArrSQLSelectName =Split(SQLSelectName,",")
	End If
	If request.querystring("sqlselecthide_" & GRIDID) <> "" Then
		arrSQLSelectHideFields = Split(CSTR(request.querystring("sqlselecthide_" & GRIDID)),",")
	End If
	searchfieldcount = 0
	If SQLSelectSearchDropDown <> "" Then
		arrSQLSelectSearchDropDown = Split(SQLSelectSearchDropDown,",")
	End If
	intTemp = 0
	For Each eleTemp In arrSQLSelect
		blnTemp = True
		strName = eleTemp
		intSize = 50 'FldF.DefinedSize
		fldtype = CInt(arrSQLSelectType(intTemp))
		If SQLSelectSearchHide <> "" Then
			For Each elesearchfieldhide In arrSQLSelectSearchHide
				If UCase(strName) = UCase(elesearchfieldhide) Then
						blnTemp = False
				End If
			Next
		End If
		If fldtype = 128 or fldtype = 205 or fldtype = 204 or not blnTemp Then 'adBinary adVarBinary adLongVarBinary
			'do nothing
		ElseIf GridHideAutonumber and UCase(strName) = UCase(SQLSelectID) Then	
			'do nothing
		Else
			response.write ("<TR><TD NOWRAP valign=MIDDLE align=right><SPAN CLASS=FieldName>")
			If SQLSelectName <> "" Then
				response.write	(ArrSQLSelectName(searchfieldcount))
			Else
				response.write (server.htmlencode(strName))
			End If
			response.write (":</SPAN></TD><TD NOWRAP><INPUT TYPE=CHECKBOX NAME=""ocdSearchshowchk_" & GRIDID & server.htmlencode(strName) & """ ")
			If request.querystring("sqlselecthide_" & GRIDID) = "" Then
				If SearchCheckAll Then
					If SQLSelectSearchUncheck = "" Then
						response.write (" CHECKED ")
					Else
						blnTemp = True
						For Each eleshowcheck In arrSQLSelectSearchUncheck
							If UCase(eleshowcheck) = UCase(strName) Then
								blnTemp = False
							End If
						next
						If blnTemp Then
							response.write (" CHECKED ")
						End If
					End If
				End If 
			Else
				blnTemp = false
				For Each eleSQLSelectHideFields In arrSQLSelectHideFields
					If UCase(eleSQLSelectHideFields) = UCase(strName) Then
						blnTemp = true
					End If
				Next
				If not blnTemp Then
					response.write (" CHECKED ")
				End If
			End If
			response.write (" > <INPUT TYPE=HIDDEN NAME=""ocdSearchexischk_" & GRIDID & server.htmlencode(strName) & """ VALUE=""Exists"" > </td><TD align=left valign=MIDDLE NOWRAP>")
			blnTemp = false
			If SQLSelectSearchDropDown <> "" Then
'				response.write Trim(UCase(strName))
				For Each eleSQLSelectSearchDropDown In arrSQLSelectSearchDropDown
					If Trim(UCase(eleSQLSelectSearchDropDown)) = Trim(UCase(strName)) Then
						blnTemp = true
					End If
				next		
			End If
			call DisplaySearchItem(strName, fldType, intSize, blnTemp)
			response.write ("</TD></TR>")
		End If
		searchfieldcount = searchfieldcount + 1
		intTemp = intTemp + 1
	next
	response.write ("</TABLE>")
	response.write ("<P><INPUT name=""ocdFind_" & GRIDID & """" & HTMLAttribFindBtn & ">&nbsp;")
	If UBound(arrSQLSelect) > 0 Then
		response.write ("<INPUT name=""ocdSearchlogic_" & GRIDID & """ value=""AND"" type=""radio"" checked >" & HTMLSearchAll & "<INPUT name=""ocdSearchlogic_" & GRIDID & """ value=""OR"" type=""radio"" >" & HTMLSearchAny & "")
	End if	
	If SQLWhere <> "" Then
		response.write ("<BR><INPUT name=""ocdSearchexistslogic_" & GRIDID & """ value=""AND"" type=""radio"" checked >" & HTMLSearchAnd & "<INPUT name=""ocdSearchexistslogic_" & GRIDID & """ value=""OR"" type=""radio"" >" & HTMLSearchOr)
		
		response.write (SQLWhere)
		response.write ("&nbsp;&nbsp;&nbsp;&nbsp;<INPUT name=""ocdSearchexistslogic_" & GRIDID & """ value=""NEITHER"" type=""radio"" checked >Reset" )
	End If
	If UBound(arrSQLSelect) < (SearchSortSize -1) Then
		SearchSortSize = UBound(arrSQLSelect) + 1
	End if
	response.write ("<P><TABLE>")
	response.write ("<TR><TD ALIGN=Right VALIGN=TOP NOWRAP>")
	response.write ("<SPAN CLASS=FieldName>Order By:</SPAN></TD><TD VALIGN=TOP NOWRAP COLSPAN=3>")
	For intOBLoo = 1 To SearchSortSize
		If intOBLoo > 1 Then
			response.write ("<BR>")
		End If
		response.write ("<SELECT NAME=""ocdSearchOrderBy_" & GRIDID)
		If intOBLoo > 1 Then
			response.write (intOBLoo)
		End If
		response.write ("""><OPTION VALUE=""""></OPTION>")
		intTemp = 0
		For Each eleTemp In arrSQLSelect
			Select Case CInt(arrSQLSelectType(intTemp)) 
				Case 128, 205, 204, 201, 203
				Case Else
					response.write ("<OPTION VALUE=""" & server.htmlencode(eleTemp) & """>" & eletemp & "</OPTION>")
			End Select
			intTemp = intTemp + 1
		next
		response.write ("</SELECT> <SELECT NAME=""ocdSearchOrderByOrder_" & GRIDID)
		If intOBLoo > 1 Then
			response.write (intOBLoo)
		End If
		response.write ("""><OPTION VALUE=""ASC"" SELECTED>" & HTMLAscText & "</OPTION><OPTION VALUE=""DESC"">" & HTMLDescText & "</OPTION></SELECT>")
	Next
	response.write ("</TD></TR>")
	response.write ("<TR><TD ALIGN=Right NOWRAP>")
	response.write ("<SPAN CLASS=FieldName>Page Size:</SPAN> ")
	response.write ("</TD><TD NOWRAP COLSPAN=3>")
	response.write ("<INPUT NAME=""ocdSearchPageSize_" & GRIDID & """ SIZE=5  VALUE=""" & server.htmlencode(SQLPageSize) & """> ")
	response.write ("</TR>")
	response.write ("</TABLE>")
	response.write ("</FORM>")
End Sub
Private Sub DisplaySearchItem(byVal strName, byVal fldType, byVal fldSize, byVal blnUseDropDown)
	dim strSearchSQL
	dim stintI
	dim strsConstraint
	dim starrGetRows	
	dim eleTcomps
	dim arrTComps
'	response.write blnUseDropDown
	If blnUseDropDown and not SaferSQLServer Then
		Set strsConstraint = server.CreateObject("ADODB.Recordset")
		strSearchSQL = "SELECT DISTINCT" & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier")
		strSearchSQL = strSearchSQL & " FROM "  
		If InStr(1, SQLFrom ,",") = 0 and InStr(1, SQLFrom,"=") = 0 Then
			SQLFrom = FormatForSQL(SQLFrom, DatabaseType, "AddSQLIdentifier")
		End If
		strSearchSQL = strSearchSQL & SQLFrom
		If SQLWhereExtra <> "" Then
			strSearchSQL = strSearchSQL & " WHERE " & SQLWHEREEXTRA & " AND (" & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " Is Not Null)"
		Else
			strSearchSQL = strSearchSQL & " WHERE " & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier") & " Is Not Null"
		End If
		strSearchSQL = strSearchSQL & " ORDER BY " & FormatForSQL(strName, DatabaseType, "AddSQLIdentifier")
'response.write strSearchSQL
'response.write err.number
		Call strsConstraint.open (strSearchSQL, ADOConnection)

		if  strsConstraint.eof Then
		strsConstraint.close
		Set strsConstraint = nothing
		Response.write " -- "
		Else
		starrGetRows = strsConstraint.getrows
		strsConstraint.close
		Set strsConstraint = nothing
		response.write (" = <SELECT name=""ocdSearchtxt_" & GRIDID & server.HTMLEncode(strName) & """>")
		response.write ("<OPTION VALUE="""" SELECTED></OPTION>")
		For stintI = 0 To UBound(starrGetRows,2)
			response.write ("<OPTION VALUE=""")
			response.write (server.HTMLEncode(starrGetRows(0,stIntI)))
			response.write (""" >")
			response.write (server.HTMLEncode(starrGetRows(0,stIntI)))
			response.write ("</OPTION>")
		Next
		response.write ("</select>")
		end if
	Else
		Select Case fldtype
			Case 7, 133, 134, 135 'adDBTimeStamp, adDate, adDBDate,  adDBTime
				response.write ("<SELECT NAME=""ocdSearchslg_" & GRIDID & server.HTMLEncode(strName) & """><OPTION VALUE="""" SELECTED></OPTION><OPTION VALUE=""NOT"">NOT</OPTION></SELECT> " & HTMLSearchBetween & " <INPUT type=""text"" Size=12 Maxlength=50 name=""ocdSearchtxt_" & GRIDID & server.HTMLEncode(strName) & """ > " & HTMLSearchBetweenAnd &" <INPUT type=""text""  Size=12 Maxlength=50 name=""ocdSearchtx2_" & GRIDID  & server.HTMLEncode(strName ) &  """ >" )
			Case 11 'adBoolean
				response.write ("<SELECT NAME=""ocdSearchsec_" & GRIDID & server.HTMLEncode(strName) & """><OPTION VALUE=""="" selected>=</OPTION></select>")
				if DatabaseType = "SQLServer" Then
				response.write ("<SELECT name=""ocdSearchtxt_" & GRIDID & server.HTMLEncode(strName) & """ ><OPTION VALUE=""""></OPTION><OPTION VALUE=""1"">True</OPTION><OPTION VALUE=""0"">False</OPTION></SELECT>" )
				
				Else
				response.write ("<SELECT name=""ocdSearchtxt_" & GRIDID & server.HTMLEncode(strName) & """ ><OPTION VALUE=""""></OPTION><OPTION VALUE=""True"">True</OPTION><OPTION VALUE=""False"">False</OPTION></SELECT>" )
				End if
			Case 16, 2, 3, 20, 17, 18, 19, 21, 4, 5, 6, 14, 131'adTinyInt, adSmallInt, adInteger,adBigInt,adUnsignedTinyInt, adUnsignedSmallInt,adCurrency,adSingle,adDouble,adDecimal,adNumeric
				response.write ("<SELECT NAME=""ocdSearchsec_" & GRIDID & server.HTMLEncode(strName) & """ ><OPTION VALUE=""="" selected>=<OPTION VALUE=""&gt;"">&gt;<OPTION VALUE=""&lt;"">&lt;<OPTION VALUE=""&lt;="">&lt;=<OPTION VALUE=""&gt;="">&gt;=<OPTION VALUE=""&lt;&gt;"">&lt;&gt;<OPTION VALUE=""Is Null"">Is Null<OPTION VALUE=""Is Not Null"">Is Not Null</select><INPUT type=""text""  name=""ocdSearchtxt_" & GRIDID   & server.HTMLEncode(strName) & """ >")
			Case Else
				arrTcomps = Split(HTMLTextCompare,";;")
				response.write ("<SELECT NAME=""ocdSearchslg_" & GRIDID & server.HTMLEncode(strName) & """ ><OPTION VALUE="""" SELECTED></OPTION><OPTION VALUE=""NOT"">NOT</OPTION></SELECT> <SELECT NAME=""ocdSearchsec_" & GRIDID &  server.HTMLEncode(strName) & """>")
				For Each eleTcomps In arrTComps
					If not ((Left(eleTcomps,InStr(eleTcomps,"|")-1) = "=" or UCase(Left(eleTcomps,InStr(eleTcomps,"|")-1)) = "IN") and (DatabaseType = "SQLServer" and (fldType = 201 or fldType = 203))) Then
						response.write ("<OPTION VALUE=""" & Left(eleTcomps,InStr(eleTcomps,"|")-1) & """")
						If UCase(SearchDefaultTextCompare) = UCase(Left(eleTcomps,InStr(eleTcomps,"|")-1)) Then
							response.write (" SELECTED")
						End If
						response.write (">" & mid(eleTcomps,InStr(eleTcomps,"|")+1) & "</OPTION>")
					End If
				Next
				response.write ("</SELECT>")
				response.write ("<INPUT TYPE=""TEXT"" NAME=""ocdSearchtxt_" & GRIDID & server.HTMLEncode(strName) & """>" )
		End Select
	End If
End Sub
End Class
%>

Anon7 - 2021