home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
vb_code1
/
db_print
/
browse.frm
< prev
next >
Wrap
Text File
|
1993-07-31
|
11KB
|
322 lines
VERSION 2.00
Begin Form Form1
BackColor = &H00C0C0C0&
Caption = "Database Table Structure Printer"
ClientHeight = 2670
ClientLeft = 1875
ClientTop = 2640
ClientWidth = 4125
Height = 3360
Left = 1815
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 2670
ScaleWidth = 4125
Top = 2010
Width = 4245
Begin ListBox lst_Tables
Height = 1980
Left = 120
TabIndex = 0
Top = 252
Width = 3855
End
Begin CommonDialog CMDialog1
DefaultExt = "mdb"
DialogTitle = "Open Database"
Filter = "Access Database|*.mdb"
Left = -360
Top = 0
End
Begin Label Label1
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "Print Which Table?"
Height = 195
Left = 120
TabIndex = 1
Top = 30
Width = 1650
End
Begin Menu mnu_File
Caption = "&File"
Begin Menu mnu_OpenDB
Caption = "&Open"
End
Begin Menu mnu_Print
Caption = "&Print"
Enabled = 0 'False
End
Begin Menu mnu_Line
Caption = "-"
End
Begin Menu mnu_Exit
Caption = "E&xit"
End
End
Begin Menu mnu_Help
Caption = "&Help"
Begin Menu mnu_About
Caption = "&About"
End
End
End
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
Dim db As DataBase
Dim td As TableDefs
Sub ChooseDatabase ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
'************************************************************
' Maintenance Header
' Version Date Coder Action
' 1 07/13/93 C. Gallo(74020,3224) Initial keyin
' Calls:Nothing
' Is Called By:Form_Load, mnu_OpenDB
' Purpose:To Choose and open a database and add it's tables to
' the listbox
'************************************************************
'Call the Common Dialog Routine to get the database name
On Error Resume Next 'This is here if there is no DB Open
db.Close
On Error GoTo 0
lst_Tables.Clear 'clear the listbox
mnu_Print.Enabled = False
Retrydatabase:
On Error GoTo DatabaseError
CmDialog1.CancelError = True
CmDialog1.Flags = OFN_FILEMUSTEXIST + OFN_HIDEREADONLY
CmDialog1.Action = 1
'Open the database
Set db = OpenDatabase(CmDialog1.Filetitle)
On Error GoTo 0
Dim snap As Snapshot
'Take a snapshot of the tables (And Queries in the database)
Set snap = db.ListTables()
lst_Tables.AddItem "--TABLES--"
'loop thru the tables in the database
'first add all the NON query objects
While Not snap.EOF
If (snap!Attributes And DB_SYSTEMOBJECT) = 0 Then
If (snap!TableType = DB_TABLE) Then
lst_Tables.AddItem snap!Name
mnu_Print.Enabled = True 'there is something in the listbox so enable print
End If
End If
snap.MoveNext
Wend
'yes I KNOW this is slower, but it gives better output
snap.MoveFirst
lst_Tables.AddItem "--QUERIES--"
While Not snap.EOF
If (snap!Attributes And DB_SYSTEMOBJECT) = 0 Then
If (snap!TableType = DB_QUERYDEF) And (snap!Attributes And 5) = 0 Then
lst_Tables.AddItem snap!Name
mnu_Print.Enabled = True 'there is something in the listbox so enable print
End If
End If
snap.MoveNext
Wend
snap.Close
Exit Sub
DatabaseError:
If Err = 32755 Then 'The user pressed cancel in the cmdialog box
Exit Sub
End If
MsgBox "This is Not a Valid Access Database, or the Database is Corrupt!", MB_ICONEXCLAMATION, "Cagney Systems Inc."
Resume Retrydatabase
End Sub
Sub Form_Load ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
Call Formcenter(Me)
Me.Show
x% = DoEvents()
Call ChooseDatabase
End Sub
Sub Formcenter (dummy As Form)
Move (screen.Width - dummy.Width) \ 2, (screen.Height - dummy.Height) \ 2
End Sub
Sub lst_Tables_DblClick ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
mnu_Print_Click
End Sub
Sub mnu_About_Click ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
Temp$ = "Access Database Table Structure Printer" + Chr$(13) + Chr$(10)
Temp$ = Temp$ + "Copyright⌐ by 1993 Charles Gallo. All Rights Reserved" + Chr$(13) + Chr$(10)
Temp$ = Temp$ + "Charles Gallo (CIS ID 74020,3224)" + Chr$(13) + Chr$(10)
Temp$ = Temp$ + "This program may be distributed without charge" + Chr$(13) + Chr$(10)
Temp$ = Temp$ + "As long as the source code, and this statement" + Chr$(13) + Chr$(10)
Temp$ = Temp$ + "are included"
MsgBox Temp$, MB_ICONEXCLAMATION, "Cagney Systems Inc."
End Sub
Sub mnu_Exit_Click ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
End
End Sub
Sub mnu_OpenDB_Click ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
Call ChooseDatabase
End Sub
Sub mnu_Print_Click ()
'Copyright⌐ 1993 by Charles Gallo. All Rights Reserved
'************************************************************
' Maintenance Header
' Version Date Coder Action
' 1 07/13/93 C. Gallo(74020,3224) Initial keyin
' 2 07/27/93 C. Gallo(74020,3224) Added code to print Queries
' Calls:QueryPrint
' Is Called By:mnu_Print
' Purpose:To print the stucture of an Access database table or call the Query print routine
'************************************************************
'First Make sure the user did'nt pick the tables or Queries header
If (lst_Tables.Text = "--TABLES--") Or (lst_Tables.Text = "--QUERIES--") Then
'Yep, the user selected one of the headers
MsgBox "You Have selected one of the message headers, Please select one of the Tables or Queries", MB_ICONEXCLAMATION
Exit Sub
End If
'get the tabledef object of the open database
Set td = db.TableDefs
On Error GoTo PrintError
'Put a line label here because if the user selects a query we'll get an error in the next line
QueryError:
td(lst_Tables.Text).Fields.Refresh
Temp$ = "Table = " + lst_Tables.Text
'setup the printer and print the header info
Printer.FontName = "Arial"
Printer.FontBold = True
Printer.Print Tab(40 - Len(Temp$) / 2); Temp$
Printer.FontBold = False
Printer.Print
Printer.Print "Date = "; Format$(Now, "MM/DD/YYYY")
Printer.Print
Printer.Print "Field Name"; Tab(40); "Field Type"; Tab(60); "Field Size"
Printer.Print
For i% = 0 To td(lst_Tables.Text).Fields.Count - 1 'for all the fields in this table (The table name is form the listbox)
Printer.Print td(lst_Tables.Text).Fields(i%).Name; 'Print the field name
Printer.Print Tab(40); 'tab to the type column
'print the field type
Select Case td(lst_Tables.Text).Fields(i%).Type
Case DB_BOOLEAN
Printer.Print "Boolean";
Case DB_BYTE
Printer.Print "Byte";
Case DB_INTEGER
Printer.Print "Integer";
Case DB_LONG
Printer.Print "Long";
Case DB_CURRENCY
Printer.Print "Currency";
Case DB_SINGLE
Printer.Print "Single";
Case DB_DOUBLE
Printer.Print "Double";
Case DB_DATE
Printer.Print "Date";
Case DB_Binary
Printer.Print "Binary";
Case DB_TEXT
Printer.Print "Text";
Case DB_LONGBINARY
Printer.Print "BLOB";
Case DB_MEMO
Printer.Print "Memo";
Case Else
Printer.Print "Error";
End Select
Printer.Print Tab(60); 'tab to the field size column
Printer.Print td(lst_Tables.Text).Fields(i%).Size 'and print the field size
Next
Printer.Print
Printer.Print "Primary Key"
'Print the primary key
Printer.Print
On Error Resume Next
Printer.Print td(lst_Tables.Text).Indexes("PrimaryKey").Fields
On Error GoTo 0
Printer.EndDoc 'end the printer doc
'Note: It would be VERY easy to add screen display to this app.
'Just add a second form, put a grid control on the form, and stuff the grid in the loop!
Exit Sub
PrintError:
If Err = 3265 Then
'we are trying to print a Query
Temp$ = lst_Tables.Text
Call PrintQuery(Temp$)
Exit Sub
End If
End Sub
Sub PrintQuery (WhichQuery$)
'******************************************************
' Maintenance Header
' Version Date Coder Action
' 1 07/27/93 C. Gallo Initial keyin
' Calls:
' Is Called By:
' Purpose:To print the SQL string of the defined query
'*******************************************************
Dim qd As Querydef
'setup the printer and print the header info
Printer.FontName = "Arial"
Printer.FontBold = True
Printer.Print Tab(40 - Len(WhichQuery$) / 2); WhichQuery$
Printer.FontBold = False
Printer.Print
Printer.Print "Date = "; Format$(Now, "MM/DD/YYYY")
Printer.Print
Printer.Print "Query Name = ";
Printer.Print WhichQuery$
Printer.Print
Debug.Print Printer.FontSize
Printer.FontSize = 10
Set qd = db.OpenQueryDef(WhichQuery$)
Temp$ = qd.SQL
qd.Close
For StringPointer% = 1 To Len(Temp$)
Printer.Print Mid$(Temp$, StringPointer%, 1);
If (Printer.CurrentX >= Printer.ScaleWidth * .7) And (Mid$(Temp$, StringPointer%, 1) = " ") Then
'if we're more than 70% of the way accross the printer
Printer.Print
End If
Next
Printer.EndDoc 'end the printer doc
End Sub