Drew Wutka
DWUTKA at Marlow.com
Wed Oct 29 16:26:23 CDT 2008
Here ya go Fred. Mind you, there is custom error handling in this, which is part of the rest of the system, and the isfeDatabase is a global object that handles the database connection, so that just needs to be replaced with a standard ADO Connection initializing. Drew (And the resize event is what makes that form look that way color wise). Private Sub RunSQL() On Error GoTo ErrorHandler Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSQL As String Dim i As Long Dim itmX As ListItem strSQL = Me.txtSQL isfeDatabase.ISFEDBConnect cnn Me.lstResults.ListItems.Clear If UCase(Left(strSQL, 6)) = "SELECT" Then Set rs = New ADODB.Recordset rs.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly Me.lstResults.ColumnHeaders.Clear For i = 1 To rs.Fields.Count Me.lstResults.ColumnHeaders.Add i, rs.Fields(i - 1).Name, rs.Fields(i - 1).Name, rs.Fields(i - 1).ActualSize * 20 Next i If rs.EOF = False Then rs.MoveFirst Do Until rs.EOF = True Set itmX = Me.lstResults.ListItems.Add(, , rs.Fields(0).Value) For i = 1 To rs.Fields.Count - 1 If Not IsNull(rs.Fields(i).Value) Then itmX.SubItems(i) = rs.Fields(i).Value Next i rs.MoveNext Loop rs.Close Set rs = Nothing Else cnn.Execute strSQL, i Me.lstResults.ColumnHeaders.Clear Me.lstResults.ColumnHeaders.Add , , "Number of affected Records: " & i, 300 End If isfeDatabase.ReleaseISFEDBConnection Set cnn = Nothing Exit Sub ErrorHandler: MsgBox Err.Number & " - " & Err.Description Err.Clear End Sub Private Sub cmdExecute_Click() RunSQL End Sub Private Sub Form_Load() On Error GoTo ErrorHandler BuildTableList Exit Sub ErrorHandler: isfeErrorHandler.Module = "frmSQLWindow" isfeErrorHandler.Procedure = "Form_Load" isfeErrorHandler.ErrorDescription = Err.Description isfeErrorHandler.ErrorNumber = Err.Number isfeErrorHandler.RaiseError Err.Clear End Sub Private Sub Form_Resize() On Error GoTo ErrorHandler Dim y As Long AutoRedraw = True ScaleMode = vbPixels For y = 0 To ScaleHeight Line (-1, y - 1)-(ScaleWidth, y + 1), RGB(isfeFormGradientRed, isfeFormGradientGreen, isfeFormGradientBlue - (y * isfeFormGradientBlue) \ ScaleHeight), B Next y Exit Sub ErrorHandler: isfeErrorHandler.Module = "frmSQLWindow" isfeErrorHandler.Procedure = "Form_Resize" isfeErrorHandler.ErrorDescription = Err.Description isfeErrorHandler.ErrorNumber = Err.Number isfeErrorHandler.RaiseError Err.Clear End Sub Private Function BuildTableList() On Error GoTo ErrorHandler Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Me.lstTables.Clear isfeDatabase.ISFEDBConnect cnn Set rs = cnn.OpenSchema(adSchemaTables) If rs.EOF = False Then rs.MoveFirst Do Until rs.EOF = True If rs.Fields("TABLE_TYPE").Value = "TABLE" Then Me.lstTables.AddItem rs.Fields("TABLE_NAME").Value End If rs.MoveNext Loop rs.Close Set rs = Nothing isfeDatabase.ReleaseISFEDBConnection Set cnn = Nothing Exit Function ErrorHandler: isfeErrorHandler.Module = "frmSQLWindow" isfeErrorHandler.Procedure = "BuildTableList" isfeErrorHandler.ErrorDescription = Err.Description isfeErrorHandler.ErrorNumber = Err.Number isfeErrorHandler.RaiseError Err.Clear End Function Private Sub lstTables_Click() On Error GoTo ErrorHandler Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Long isfeDatabase.ISFEDBConnect cnn Set rs = New ADODB.Recordset rs.Open Me.lstTables.List(Me.lstTables.ListIndex), cnn, adOpenForwardOnly, adLockReadOnly, adCmdTableDirect Me.lstFields.Clear For i = 0 To rs.Fields.Count - 1 Me.lstFields.AddItem rs.Fields(i).Name Next i rs.Close Set rs = Nothing isfeDatabase.ReleaseISFEDBConnection Set cnn = Nothing If Me.chkTableSQL Then Me.txtSQL = "SELECT * FROM " & Me.lstTables.List(Me.lstTables.ListIndex) Exit Sub ErrorHandler: isfeErrorHandler.Module = "frmSQLWindow" isfeErrorHandler.Procedure = "lstTables_Click" isfeErrorHandler.ErrorDescription = Err.Description isfeErrorHandler.ErrorNumber = Err.Number isfeErrorHandler.RaiseError Err.Clear End Sub Private Function ExcelColumn(intColumn As Long) As String Dim intTemp As Long Dim intPart As Long If intColumn <= 26 Then ExcelColumn = Chr(64 + intColumn) Else intTemp = Fix(intColumn / 26) intPart = intColumn - (intTemp * 26) ExcelColumn = Chr(64 + intTemp) & Chr(65 + intPart) End If End Function Private Sub mnuDumpToExcel_Click() On Error GoTo ErrorHandler Dim ExlApp As Excel.Application Dim ExlWrkSht As Excel.Worksheet Dim i As Long Dim j As Long Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset If UCase(Left(Me.txtSQL, 6)) <> "SELECT" Then Exit Sub isfeDatabase.ISFEDBConnect cnn Set rs = New ADODB.Recordset rs.Open CStr(Me.txtSQL), cnn, adOpenForwardOnly, adLockReadOnly If rs.EOF = False Then rs.MoveFirst Set ExlApp = CreateObject("Excel.Application") Screen.MousePointer = vbHourglass ExlApp.Workbooks.Add ExlApp.Visible = True For i = 0 To ExlApp.Sheets.Count - 1 If i = 1 Then Set ExlWrkSht = ExlApp.Sheets(i) ExlWrkSht.Name = "ISFE SQL Dump" Else ExlApp.Sheets(2).Delete End If Next i For i = 1 To rs.Fields.Count ExlWrkSht.Columns(ExcelColumn(i) & ":" & ExcelColumn(i)).ColumnWidth = 20 'rs.Fields(i - 1).ActualSize ExlApp.Range(ExcelColumn(i) & 1).Font.Bold = True ExlApp.Range(ExcelColumn(i) & 1).Font.Size = 14 ExlApp.Range(ExcelColumn(i) & 1) = rs.Fields(i - 1).Name Next i j = 2 Do Until rs.EOF = True For i = 1 To rs.Fields.Count If Not IsNull(rs.Fields(i - 1).Value) Then ExlApp.Range(ExcelColumn(i) & j) = rs.Fields(i - 1).Value Next i j = j + 1 rs.MoveNext Loop rs.Close Set rs = Nothing isfeDatabase.ReleaseISFEDBConnection Set cnn = Nothing Screen.MousePointer = vbNormal Set ExlWrkSht = Nothing Set ExlApp = Nothing Exit Sub ErrorHandler: isfeErrorHandler.Module = "frmSQLWindow" isfeErrorHandler.Procedure = "mnuDumpToExcel_Click" isfeErrorHandler.ErrorDescription = Err.Description isfeErrorHandler.ErrorNumber = Err.Number isfeErrorHandler.RaiseError Err.Clear End Sub -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Fred Hooper Sent: Wednesday, October 29, 2008 3:24 PM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] My first use of the Listview Control Very neat! I, for one, would like to see the code behind it. Thanks, Fred The information contained in this transmission is intended only for the person or entity to which it is addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, copying, disclosure, dissemination, or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited.