gambas-source-code/app/examples/Database/MySQLExample/.src/FTables.class

1187 lines
39 KiB
Text
Raw Normal View History

' Gambas class file
Private $sColumnSort As String
Public Procedure _new()
'tvwTables definition
tvwTables.Columns.Count = 7
tvwTables.Columns[0].Title = ("Name")
tvwTables.Columns[1].Title = ("Rows")
tvwTables.Columns[2].Title = ("Engine")
tvwTables.Columns[3].Title = ("Charset")
tvwTables.Columns[4].Title = ("Collation")
tvwTables.Columns[5].Title = ("Size")
tvwTables.Columns[6].Title = ("Update Time")
'tvwViews definition
tvwViews.Columns.Count = 7
tvwViews.Columns[0].Title = ("Name")
tvwViews.Columns[1].Title = ("Updatable")
tvwViews.Columns[2].Title = ("Definer")
tvwViews.Columns[3].Title = ("Security")
tvwViews.Columns[4].Title = ("Check")
tvwViews.Columns[5].Title = ("Charset")
tvwViews.Columns[6].Title = ("Collation")
'tvwIndex definition
tvwIndexes.Columns.Count = 4
tvwIndexes.Columns[0].Title = ("Name")
tvwIndexes.Columns[1].Title = ("Column")
tvwIndexes.Columns[2].Title = ("Collation")
tvwIndexes.Columns[3].Title = ("Type")
'tvwProcedures definition
tvwProcedures.Columns.Count = 8
tvwProcedures.Columns[0].Width = 30
tvwProcedures.Columns[1].Title = ("Name")
tvwProcedures.Columns[2].Title = ("Returns")
tvwProcedures.Columns[3].Title = ("Creation Time")
tvwProcedures.Columns[4].Title = ("Update Time")
tvwProcedures.Columns[5].Title = ("Type")
tvwProcedures.Columns[6].Title = ("Definer")
tvwProcedures.Columns[7].Title = ("Comment")
'tvwFields definition
tvwFields.Columns.Count = 10
tvwFields.Columns[0].Width = 30
tvwFields.Columns[1].Title = ("Name")
tvwFields.Columns[2].Title = ("Default")
tvwFields.Columns[3].Title = ("Nullable")
tvwFields.Columns[4].Title = ("DataType")
tvwFields.Columns[5].Title = ("Key")
tvwFields.Columns[6].Title = ("Extra")
tvwFields.Columns[7].Title = ("Charset")
tvwFields.Columns[8].Title = ("Collation")
tvwFields.Columns[9].Title = ("Comment")
'tvwTrigger definition
tvwTriggers.Columns.Count = 5
tvwTriggers.Columns[0].Title = ("Name")
tvwTriggers.Columns[1].Title = ("Event")
tvwTriggers.Columns[2].Title = ("Table")
tvwTriggers.Columns[3].Title = ("Timing")
tvwTriggers.Columns[4].Title = ("Definer")
'tvwEvents definition
tvwEvents.Columns.Count = 19
tvwEvents.Columns[0].Title = ("Name")
tvwEvents.Columns[1].Title = ("Definer")
tvwEvents.Columns[2].Title = ("Time Zone")
tvwEvents.Columns[3].Title = ("Type")
tvwEvents.Columns[4].Title = ("Execute At")
tvwEvents.Columns[5].Title = ("Interval Value")
tvwEvents.Columns[6].Title = ("Interval Field")
tvwEvents.Columns[7].Title = ("SQL Mode")
tvwEvents.Columns[8].Title = ("Starts")
tvwEvents.Columns[9].Title = ("Ends")
tvwEvents.Columns[10].Title = ("On Completion")
tvwEvents.Columns[11].Title = ("Created")
tvwEvents.Columns[12].Title = ("Last Altered")
tvwEvents.Columns[13].Title = ("Last Executed")
tvwEvents.Columns[14].Title = ("Originator")
tvwEvents.Columns[15].Title = ("Charset")
tvwEvents.Columns[16].Title = ("Collation")
tvwEvents.Columns[17].Title = ("Database Collation")
tvwEvents.Columns[18].Title = ("Comment")
Catch
modMain.Error()
End
Public Procedure SearchInfo() 'Search for the info in the database
Inc Application.Busy
tvwTables.Clear()
tvwTables.Rows.Count = 0
tvwViews.Clear()
tvwViews.Rows.Count = 0
tvwIndexes.Clear()
tvwIndexes.Rows.Count = 0
tvwFields.Clear()
tvwFields.Rows.Count = 0
tvwProcedures.Clear()
tvwProcedures.Rows.Count = 0
tvwTriggers.Clear()
tvwTriggers.Rows.Count = 0
tvwEvents.Clear()
tvwEvents.Rows.Count = 0
tabData[2].Text = ("Indexes")
tabData[3].Text = ("Fields")
'Database's info
textResult.Text = modMain.$Connection.MySQL.DataBase.Info(modMain.$Connection.Name)
TableInfo()
'Returns if the database is information_schema
If modMain.$Connection.Name = "information_schema" Then
Dec Application.Busy
Return
Endif
ViewInfo()
IndexInfo()
RoutinesInfo()
TriggersInfo()
If modMain.$bSchemaOk Then EventInfo()
Dec Application.Busy
Catch
modMain.Error()
End
Public Procedure FieldInfo(Optional Column As Integer) 'Field's Info
Dim iCounter As Integer
If tvwTables.Rows.Count = 0 Or tvwTables.Row = -1 Then Return 'Empty set or not table selected
tabData[3].Text = ("Fields on:") & " " & tvwTables[tvwTables.Row, 0].Text
Select (Column)
Case 1
$sColumnSort = "COLUMN_NAME"
Case 2
$sColumnSort = "COLUMN_DEFAULT"
Case 3
$sColumnSort = "IS_NULLABLE"
Case 4
$sColumnSort = "COLUMN_TYPE"
Case 5
$sColumnSort = "COLUMN_KEY"
Case 6
$sColumnSort = "EXTRA"
Case 7
$sColumnSort = "CHARACTER_SET_NAME"
Case 8
$sColumnSort = "COLLATION_NAME"
Case 9
$sColumnSort = "COLUMN_COMMENT"
Default
$sColumnSort = "COLUMN_NAME"
End Select
modMain.$hResult = modMain.$Connection.Exec("SELECT `COLUMN_KEY`, `DATA_TYPE`, `EXTRA`, `COLUMN_NAME`, `COLUMN_DEFAULT`, `IS_NULLABLE`, `COLUMN_TYPE`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, `COLUMN_COMMENT` FROM `information_schema`.`COLUMNS` WHERE `TABLE_NAME` = '" & tvwTables[tvwTables.Row, 0].Text & "' AND `TABLE_SCHEMA` = '" & modMain.$Connection.Name & "' ORDER BY `" & $sColumnSort & "`")
tvwFields.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
Select (Upper(modMain.$hResult!DATA_TYPE))
Case "INT", "MEDIUMINT", "TINYINT", "BOOL", "BOOLEAN", "SMALLINT", "INTEGER", "FLOAT", "BIGINT", "SERIAL", "DOUBLE", "DOUBLEPRECISION", "DECIMAL", "DEC"
tvwFields[iCounter, 0].Picture = Picture["icons/16/Numeric.png"]
Case "VARCHAR", "CHAR", "BIT", "BINARY", "VARBINARY", "TINYTEXT", "TEXT", "MEDIUMTEXT", "LONGTEXT", "SET", "ENUM"
tvwFields[iCounter, 0].Picture = Picture["icons/16/String.png"]
Case "DATE", "DATETIME", "TIME", "TIMESTAMP", "YEAR"
tvwFields[iCounter, 0].Picture = Picture["icons/16/Datetime.png"]
Case "TINYBLOB", "MEDIUMBLOB", "LONGBLOB", "BLOB"
tvwFields[iCounter, 0].Picture = Picture["icons/16/Blob.png"]
Default
tvwFields[iCounter, 0].Picture = Picture["icons/16/Field.png"]
End Select
Select (Upper(modMain.$hResult!COLUMN_KEY))
Case "PRI"
tvwFields[iCounter, 0].Picture = Picture["icons/16/Primarykey.png"]
Case "MUL"
tvwFields[iCounter, 0].Picture = Picture["icons/16/Column_FK.png"]
Default
End Select
tvwFields[iCounter, 0].Alignment = Align.Center
tvwFields[iCounter, 1].Text = modMain.$hResult!COLUMN_NAME
tvwFields[iCounter, 2].Text = modMain.$hResult!COLUMN_DEFAULT
tvwFields[iCounter, 3].Text = modMain.$hResult!IS_NULLABLE
tvwFields[iCounter, 4].Text = modMain.$hResult!COLUMN_TYPE
tvwFields[iCounter, 5].Text = modMain.$hResult!COLUMN_KEY
tvwFields[iCounter, 6].Text = modMain.$hResult!EXTRA
tvwFields[iCounter, 7].Text = modMain.$hResult!CHARACTER_SET_NAME
tvwFields[iCounter, 8].Text = modMain.$hResult!COLLATION_NAME
tvwFields[iCounter, 9].Text = modMain.$hResult!COLUMN_COMMENT
If (iCounter Mod 2) = 0 Then
tvwFields[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 4].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 5].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 6].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 7].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 8].Background = Color.RGB(239, 243, 247)
tvwFields[iCounter, 9].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
tvwFields.Columns[0].Width = -1
tvwFields.Columns[1].Width = -1
tvwFields.Columns[2].Width = -1
tvwFields.Columns[3].Width = -1
tvwFields.Columns[4].Width = -1
tvwFields.Columns[5].Width = -1
tvwFields.Columns[6].Width = -1
tvwFields.Columns[7].Width = -1
tvwFields.Columns[8].Width = -1
tvwFields.Columns[9].Width = -1
Catch
modMain.Error()
End
Public Procedure TableInfo(Optional Column As Integer) 'Table's Info
Dim iCounter As Integer
tvwTables.Clear()
Select (Column)
Case 0
$sColumnSort = "TABLE_NAME"
Case 1
$sColumnSort = "TABLE_ROWS"
Case 2
$sColumnSort = "ENGINE"
Case 3
$sColumnSort = "CHARSET"
Case 4
$sColumnSort = "TABLE_COLLATION"
Case 5
$sColumnSort = "DATA_LENGTH"
Case 6
$sColumnSort = "UPDATE_TIME"
Default
$sColumnSort = "TABLE_NAME"
End Select
modMain.$hResult = modMain.$Connection.Exec("SELECT `a`.`TABLE_NAME` AS `TABLE_NAME`, `a`.`ENGINE` AS ENGINE, `a`.`TABLE_ROWS` AS TABLE_ROWS, `a`.`UPDATE_TIME` AS UPDATE_TIME, `b`.`CHARACTER_SET_NAME` AS CHARSET, `a`.`TABLE_COLLATION` AS TABLE_COLLATION FROM `information_schema`.`TABLES` `a`, `information_schema`.`COLLATIONS` `b` WHERE `a`.`TABLE_SCHEMA` = '" & modMain.$Connection.Name & "' AND `a`.`TABLE_COLLATION` = `b`.`COLLATION_NAME` ORDER BY `" & $sColumnSort & "`")
tvwTables.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
tvwTables[iCounter, 0].Text = modMain.$hResult!TABLE_NAME
If modMain.$hResult!TABLE_ROWS <> Null Then tvwTables[iCounter, 1].Text = Format(modMain.$hResult!TABLE_ROWS, "#,#")
tvwTables[iCounter, 1].Alignment = Align.Right
tvwTables[iCounter, 2].Text = modMain.$hResult!ENGINE
tvwTables[iCounter, 3].Text = modMain.$hResult!CHARSET
tvwTables[iCounter, 4].Text = modMain.$hResult!TABLE_COLLATION
If modMain.$hResult!UPDATE_TIME = Null
tvwTables[iCounter, 6].Picture = Picture["icons/24/Null.png"]
Else
tvwTables[iCounter, 6].Text = modMain.$hResult!UPDATE_TIME
Endif
tvwTables[iCounter, 5].Text = Format((modMain.$Connection.Exec("SELECT `DATA_LENGTH` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '" & modMain.$Connection.Name & "' AND `TABLE_NAME` = '" & modMain.$hResult!TABLE_NAME & "'")!DATA_LENGTH / 1024), "#,#.00 KB")
tvwTables[iCounter, 5].Alignment = Align.Right
If (iCounter Mod 2) = 0 Then
tvwTables[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 4].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 5].Background = Color.RGB(239, 243, 247)
tvwTables[iCounter, 6].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
tvwTables.Columns[0].Width = -1
tvwTables.Columns[1].Width = -1
tvwTables.Columns[2].Width = -1
tvwTables.Columns[3].Width = -1
tvwTables.Columns[4].Width = -1
tvwTables.Columns[5].Width = -1
tvwTables.Columns[6].Width = -1
Catch
modMain.Error()
End
Public Procedure ViewInfo(Optional Column As Integer) 'View's Info
Dim iCounter As Integer
Select (Column)
Case 0
$sColumnSort = "TABLE_NAME"
Case 1
$sColumnSort = "IS_UPDATABLE"
Case 2
$sColumnSort = "DEFINER"
Case 3
$sColumnSort = "SECURITY_TYPE"
Case 4
$sColumnSort = "CHECK_OPTION"
Case 5
$sColumnSort = "CHARACTER_SET_CLIENT"
Case 6
$sColumnSort = "COLLATION_CONNECTION"
Default
$sColumnSort = "TABLE_NAME"
End Select
modMain.$hResult = modMain.$Connection.Exec("SELECT * FROM `information_schema`.`VIEWS` WHERE `TABLE_SCHEMA` = '" & modMain.$Connection.Name & "' ORDER BY `" & $sColumnSort & "`")
tvwViews.Rows.Count = modMain.$hResult.Count
If modMain.$hResult.Available Then
tvwViews.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
tvwViews[iCounter, 0].Text = modMain.$hResult!TABLE_NAME
tvwViews[iCounter, 1].Text = modMain.$hResult!IS_UPDATABLE
tvwViews[iCounter, 2].Text = modMain.$hResult!DEFINER
tvwViews[iCounter, 3].Text = modMain.$hResult!SECURITY_TYPE
tvwViews[iCounter, 4].Text = modMain.$hResult!CHECK_OPTION
If modMain.$bSchemaOk Then
tvwViews[iCounter, 5].Text = modMain.$hResult!CHARACTER_SET_CLIENT
tvwViews[iCounter, 6].Text = modMain.$hResult!COLLATION_CONNECTION
Else
tvwViews[iCounter, 5].Text = ("Not aviable")
tvwViews[iCounter, 6].Text = ("Not aviable")
Endif
If (iCounter Mod 2) = 0 Then
tvwViews[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 4].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 5].Background = Color.RGB(239, 243, 247)
tvwViews[iCounter, 6].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
Endif
tvwViews.Columns[0].Width = -1
tvwViews.Columns[1].Width = -1
tvwViews.Columns[2].Width = -1
tvwViews.Columns[3].Width = -1
tvwViews.Columns[4].Width = -1
tvwViews.Columns[5].Width = -1
tvwViews.Columns[6].Width = -1
Catch
modMain.Error()
End
Public Procedure IndexInfo(Optional Column As Integer) 'Index's Info
Dim iCounter As Integer
If tvwTables.Rows.Count = 0 Or tvwTables.Row = -1 Then Return 'Empty set or not table selected
tabData[2].Text = ("Indexes on:") & " " & tvwTables[tvwTables.Row, 0].Text
tvwIndexes.Clear()
' Select (Column)
' Case 0
' $sColumnSort = "Key_name"
' Case 1
' $sColumnSort = "Column_name"
' Case 2
' $sColumnSort = "Collation"
' Case 3
' $sColumnSort = "Index_type"
' Default
' $sColumnSort = "Key_name"
' End Select
modMain.$hResult = modMain.$Connection.Exec("SHOW INDEX FROM `" & modMain.$Connection.Name & "`.`" & tvwTables[tvwTables.Row, 0].Text & "`")
If modMain.$hResult.Available Then
tvwIndexes.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
tvwIndexes[iCounter, 0].Text = modMain.$hResult!Key_name
tvwIndexes[iCounter, 1].Text = modMain.$hResult!Column_name
tvwIndexes[iCounter, 2].Text = modMain.$hResult!Collation
tvwIndexes[iCounter, 3].Text = modMain.$hResult!Index_type
If (iCounter Mod 2) = 0 Then
tvwIndexes[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwIndexes[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwIndexes[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwIndexes[iCounter, 3].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
Endif
tvwIndexes.Columns[0].Width = -1
tvwIndexes.Columns[1].Width = -1
tvwIndexes.Columns[2].Width = -1
tvwIndexes.Columns[3].Width = -1
Catch
modMain.Error()
End
Public Procedure RoutinesInfo(Optional Column As Integer) 'Rotines's Info
Dim iCounter As Integer
tvwProcedures.Clear()
Select (Column)
Case 0
$sColumnSort = "ROUTINE_TYPE"
Case 1
$sColumnSort = "ROUTINE_NAME"
Case 2
$sColumnSort = "DTD_IDENTIFIER"
Case 3
$sColumnSort = "CREATED"
Case 4
$sColumnSort = "LAST_ALTERED"
Case 5
$sColumnSort = "ROUTINE_TYPE"
Case 6
$sColumnSort = "DEFINER"
Case 7
$sColumnSort = "ROUTINE_COMMENT"
Default
$sColumnSort = "ROUTINE_NAME"
End Select
modMain.$hResult = modMain.$Connection.Exec("SELECT * FROM `information_schema`.`ROUTINES` WHERE `ROUTINE_SCHEMA` = '" & modMain.$Connection.Name & "' ORDER BY `" & $sColumnSort & "`")
If modMain.$hResult.Available Then
tvwProcedures.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
If modMain.$hResult!ROUTINE_TYPE = "FUNCTION" Then
tvwProcedures[iCounter, 0].Picture = Picture["icons/16/Function.png"]
Else
tvwProcedures[iCounter, 0].Picture = Picture["icons/16/Routine.png"]
Endif
tvwProcedures[iCounter, 0].Alignment = Align.Center
tvwProcedures[iCounter, 1].Text = modMain.$hResult!ROUTINE_NAME
tvwProcedures[iCounter, 2].Text = modMain.$hResult!DTD_IDENTIFIER
tvwProcedures[iCounter, 3].Text = modMain.$hResult!CREATED
tvwProcedures[iCounter, 4].Text = modMain.$hResult!LAST_ALTERED
tvwProcedures[iCounter, 5].Text = modMain.$hResult!ROUTINE_TYPE
tvwProcedures[iCounter, 6].Text = modMain.$hResult!DEFINER
tvwProcedures[iCounter, 7].Text = modMain.$hResult!ROUTINE_COMMENT
If (iCounter Mod 2) = 0 Then
tvwProcedures[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 4].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 5].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 6].Background = Color.RGB(239, 243, 247)
tvwProcedures[iCounter, 7].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
Endif
tvwProcedures.Columns[0].Width = -1
tvwProcedures.Columns[1].Width = -1
tvwProcedures.Columns[2].Width = -1
tvwProcedures.Columns[3].Width = -1
tvwProcedures.Columns[4].Width = -1
tvwProcedures.Columns[5].Width = -1
tvwProcedures.Columns[6].Width = -1
tvwProcedures.Columns[7].Width = -1
Catch
modMain.Error()
End
Public Procedure EventInfo(Optional Column As Integer) 'Event's Info
Dim iCounter As Integer
tvwEvents.Clear()
Select (Column)
Case 0
$sColumnSort = "EVENT_NAME"
Case 1
$sColumnSort = "DEFINER"
Case 2
$sColumnSort = "TIME_ZONE"
Case 3
$sColumnSort = "EVENT_TYPE"
Case 4
$sColumnSort = "EXECUTE_AT"
Case 5
$sColumnSort = "INTERVAL_VALUE"
Case 6
$sColumnSort = "INTERVAL_FIELD"
Case 7
$sColumnSort = "SQL_MODE"
Case 8
$sColumnSort = "STARTS"
Case 9
$sColumnSort = "ENDS"
Case 10
$sColumnSort = "ON_COMPLETION"
Case 11
$sColumnSort = "CREATED"
Case 12
$sColumnSort = "LAST_ALTERED"
Case 13
$sColumnSort = "LAST_EXECUTED"
Case 14
$sColumnSort = "ORIGINATOR"
Case 15
$sColumnSort = "CHARACTER_SET_CLIENT"
Case 16
$sColumnSort = "COLLATION_CONNECTION"
Case 17
$sColumnSort = "DATABASE_COLLATION"
Case 18
$sColumnSort = "EVENT_COMMENT"
Default
$sColumnSort = "EVENT_NAME"
End Select
modMain.$hResult = modMain.$Connection.Exec("SELECT * FROM `information_schema`.`EVENTS` WHERE `EVENT_SCHEMA` = '" & modMain.$Connection.Name & "' ORDER BY `" & $sColumnSort & "`")
If modMain.$hResult.Available Then
tvwEvents.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
tvwEvents[iCounter, 0].Text = modMain.$hResult!EVENT_NAME
tvwEvents[iCounter, 1].Text = modMain.$hResult!DEFINER
tvwEvents[iCounter, 2].Text = modMain.$hResult!TIME_ZONE
tvwEvents[iCounter, 3].Text = modMain.$hResult!EVENT_TYPE
tvwEvents[iCounter, 4].Text = modMain.$hResult!EXECUTE_AT
tvwEvents[iCounter, 5].Text = modMain.$hResult!INTERVAL_VALUE
tvwEvents[iCounter, 6].Text = modMain.$hResult!INTERVAL_FIELD
tvwEvents[iCounter, 7].Text = modMain.$hResult!SQL_MODE
tvwEvents[iCounter, 8].Text = modMain.$hResult!STARTS
tvwEvents[iCounter, 9].Text = modMain.$hResult!ENDS
tvwEvents[iCounter, 10].Text = modMain.$hResult!ON_COMPLETION
tvwEvents[iCounter, 11].Text = modMain.$hResult!CREATED
tvwEvents[iCounter, 12].Text = modMain.$hResult!LAST_ALTERED
tvwEvents[iCounter, 13].Text = modMain.$hResult!LAST_EXECUTED
tvwEvents[iCounter, 14].Text = modMain.$hResult!ORIGINATOR
tvwEvents[iCounter, 15].Text = modMain.$hResult!CHARACTER_SET_CLIENT
tvwEvents[iCounter, 16].Text = modMain.$hResult!COLLATION_CONNECTION
tvwEvents[iCounter, 17].Text = modMain.$hResult!DATABASE_COLLATION
tvwEvents[iCounter, 18].Text = modMain.$hResult!EVENT_COMMENT
If (iCounter Mod 2) = 0 Then
tvwEvents[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 4].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 5].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 6].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 7].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 8].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 9].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 10].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 11].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 12].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 13].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 14].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 15].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 16].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 17].Background = Color.RGB(239, 243, 247)
tvwEvents[iCounter, 18].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
Endif
tvwEvents.Columns[0].Width = -1
tvwEvents.Columns[1].Width = -1
tvwEvents.Columns[2].Width = -1
tvwEvents.Columns[3].Width = -1
tvwEvents.Columns[4].Width = -1
tvwEvents.Columns[5].Width = -1
tvwEvents.Columns[6].Width = -1
tvwEvents.Columns[7].Width = -1
tvwEvents.Columns[8].Width = -1
tvwEvents.Columns[9].Width = -1
tvwEvents.Columns[10].Width = -1
tvwEvents.Columns[11].Width = -1
tvwEvents.Columns[12].Width = -1
tvwEvents.Columns[13].Width = -1
tvwEvents.Columns[14].Width = -1
tvwEvents.Columns[15].Width = -1
tvwEvents.Columns[16].Width = -1
tvwEvents.Columns[17].Width = -1
tvwEvents.Columns[18].Width = -1
Catch
modMain.Error()
End
Public Procedure TriggersInfo(Optional Column As Integer) 'Table's Info
Dim iCounter As Integer
tvwTriggers.Clear()
Select (Column)
Case 0
$sColumnSort = "TRIGGER_NAME"
Case 1
$sColumnSort = "EVENT_MANIPULATION"
Case 2
$sColumnSort = "EVENT_OBJECT_TABLE"
Case 3
$sColumnSort = "ACTION_TIMING"
Case 4
$sColumnSort = "DEFINER"
Default
$sColumnSort = "TRIGGER_NAME"
End Select
'Triggers Info
modMain.$hResult = modMain.$Connection.Exec("SELECT `TRIGGER_NAME`, `EVENT_MANIPULATION`, `EVENT_OBJECT_TABLE`, `ACTION_TIMING`, `DEFINER` FROM `information_schema`.`TRIGGERS` WHERE `TRIGGER_SCHEMA` = '" & modMain.$Connection.Name & "' ORDER BY `" & $sColumnSort & "`")
If modMain.$hResult.Available Then
tvwTriggers.Rows.Count = modMain.$hResult.Count
For iCounter = 0 To modMain.$hResult.Max
tvwTriggers[iCounter, 0].Text = modMain.$hResult!TRIGGER_NAME
tvwTriggers[iCounter, 1].Text = modMain.$hResult!EVENT_MANIPULATION
tvwTriggers[iCounter, 2].Text = modMain.$hResult!EVENT_OBJECT_TABLE
tvwTriggers[iCounter, 3].Text = modMain.$hResult!ACTION_TIMING
tvwTriggers[iCounter, 4].Text = modMain.$hResult!DEFINER
If (iCounter Mod 2) = 0 Then
tvwTriggers[iCounter, 0].Background = Color.RGB(239, 243, 247)
tvwTriggers[iCounter, 1].Background = Color.RGB(239, 243, 247)
tvwTriggers[iCounter, 2].Background = Color.RGB(239, 243, 247)
tvwTriggers[iCounter, 3].Background = Color.RGB(239, 243, 247)
tvwTriggers[iCounter, 4].Background = Color.RGB(239, 243, 247)
Endif
modMain.$hResult.MoveNext()
Next
Endif
tvwTriggers.Columns[0].Width = -1
tvwTriggers.Columns[1].Width = -1
tvwTriggers.Columns[2].Width = -1
tvwTriggers.Columns[3].Width = -1
tvwTriggers.Columns[4].Width = -1
Catch
modMain.Error()
End
Public Sub Form_Open()
Me.Text = "mysql://" & modMain.$Connection.User & "@" & modMain.$Connection.Host & "/" & modMain.$Connection.Name
cmbDatabases.List = modMain.$Connection.MySQL.Databases
cmbDatabases.Index = cmbDatabases.Find(modMain.$Connection.Name)
SearchInfo()
End
'***************************** Procedures for tables **************************
Public Sub tvwTables_Select()
If tvwTables.Row = -1 Then Return
textResult.Clear()
textResult.Text = modMain.$Connection.MySQL.Table.Info(tvwTables[tvwTables.Row, 0].Text)
FieldInfo()
IndexInfo()
Select (tvwTables.Column)
Case 0
tvwTables.Edit()
Case 1, 5
Return
Case 2
tvwTables.Edit(modMain.$Connection.MySQL.Engines, True)
Case 3
tvwTables.Edit(modMain.$Connection.MySQL.Charsets, True)
Case 4
tvwTables.Edit(modMain.$Connection.MySQL.Collations, True)
Default
tvwTables.Edit()
End Select
Catch
modMain.Error()
End
Public Sub tvwTables_Save(Row As Integer, Column As Integer, Value As String)
'Alters the table definition, the value is never saved into the TableView, it is used to make the update
If tbtLock.Value Then Return
Select (Column)
Case 0
modMain.$Connection.MySQL.Table.Rename(tvwTables[Row, 0].Text, Value)
Case 1, 5
Return
Case 2
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[Row, 0].Text, "ENGINE",, Value)
Case 3
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[Row, 0].Text, "CHARACTER SET",, Value & " COLLATE " & Value & "_bin")
Case 4
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[Row, 0].Text, "CHARACTER SET",, tvwTables[Row, 3].Text & " COLLATE " & Value)
Default
End Select
RefreshData(tvwTables.Row, tabData.Index)
Catch
modMain.Error()
End
Public Sub tvwTables_DblClick()
tabData.Index = 3 'Fields
End
'***************************** End of Procedures for tables *******************
'***************************** Procedures for views ***************************
Public Sub tvwViews_Click()
If tvwViews.Row = -1 Then Return
textResult.Text = modMain.$Connection.MySQL.View.Info(tvwViews[tvwViews.Row, 0].Text)
ViewInfo()
Catch
modMain.Error()
End
Public Sub tvwViews_DblClick()
modMain.$hFNewView = New FNewView(Null, tvwViews[tvwViews.Row, 0].Text)
modMain.$hFNewView.ShowModal()
Catch
modMain.Error()
End
Public Sub tvwViews_Select()
tvwViews_Click()
End
'***************************** End of Procedures for views ********************
'***************************** Procedures for fields *********************
Public Sub tvwFields_Click()
'If the tbtLock is true then the change is not made
If tbtLock.Value Then Return
Select (tvwFields.Column)
Case 0, 5, 6
Return
Case 1, 2, 9
tvwFields.Edit()
Case 3
tvwFields.Edit(["YES", "NO"], True)
Case 7
tvwFields.Edit(modMain.$Connection.MySQL.Charsets, True)
Case 8
tvwFields.Edit(modMain.$Connection.MySQL.Collations, True)
Default
tvwFields.Edit()
End Select
Catch
modMain.Error()
End
Public Sub tvwFields_DblClick()
'If the tbtLock is true then the change is not made
If tbtLock.Value Then Return
If ValidateTableSelected() Then
modMain.$hFNewField = New FNewField(tvwTables[tvwTables.Row, 0].Text, Null, tvwFields[tvwFields.Row, 1].Text)
modMain.$hFNewField.ShowModal()
Endif
FieldInfo()
Catch
modMain.Error()
End
Public Sub tvwFields_Save(Row As Integer, Column As Integer, Value As String)
Dim sDefinition As String
Select (Column)
Case 0, 5, 6, 7, 8
Return
Case 1 'Field name
modMain.$Connection.MySQL.Field.Rename(tvwTables[tvwTables.Row, 0].Text, tvwFields[Row, Column].Text, Value)
Case 2 'Default
If Value = "" Then
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "ALTER", tvwFields[Row, 1].Text, "DROP DEFAULT")
Else
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "ALTER", tvwFields[Row, 1].Text, "SET DEFAULT '" & Value & "'")
Endif
Case 3 'Nullable
sDefinition = tvwFields[Row, 4].Text
If Value = "NO" Then sDefinition &= " NOT NULL"
If tvwFields[Row, 2].Text <> "" Then sDefinition &= " DEFAULT '" & tvwFields[Row, 2].Text & "'"
If tvwFields[Row, 9].Text <> "" Then sDefinition &= " COMMENT '" & tvwFields[Row, 2].Text & "'"
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "MODIFY", tvwFields[Row, 1].Text, sDefinition)
Case 4 'Datatype
sDefinition = Value
If tvwFields[Row, 3].Text = "NO" Then sDefinition &= " NOT NULL"
If tvwFields[Row, 2].Text <> "" Then sDefinition &= " DEFAULT '" & tvwFields[Row, 2].Text & "'"
If tvwFields[Row, 9].Text <> "" Then sDefinition &= " COMMENT '" & tvwFields[Row, 2].Text & "'"
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "MODIFY", tvwFields[Row, 1].Text, sDefinition)
Case 9 'Comment
sDefinition = tvwFields[Row, 4].Text
If tvwFields[Row, 3].Text = "NO" Then sDefinition &= " NOT NULL"
If tvwFields[Row, 2].Text <> "" Then sDefinition &= " DEFAULT '" & tvwFields[Row, 2].Text & "'"
If Value <> "" Then sDefinition &= " COMMENT '" & Value & "'"
modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "MODIFY", tvwFields[Row, 1].Text, sDefinition)
Default
End Select
RefreshData(tvwTables.Row, tabData.Index)
Catch
modMain.Error()
End
'***************************** End of Procedures for fields ********************
'***************************** Procedures for procedures ***********************
Public Sub tvwProcedures_Click()
If tvwProcedures.Row = -1 Then Return
textResult.Text = modMain.$Connection.MySQL.Routines.Info(tvwProcedures[tvwProcedures.Row, 1].Text, modMain.$Connection.Name)
Catch
modMain.Error()
End
Public Sub tvwProcedures_DblClick()
modMain.$hFNewRoutine = New FNewRoutine(Null, tvwProcedures[tvwProcedures.Row, 1].Text)
modMain.$hFNewRoutine.ShowModal()
RoutinesInfo()
Catch
modMain.Error()
End
Public Sub tvwProcedures_Select()
tvwProcedures_Click()
End
'***************************** End of Procedures for procedures ****************
'***************************** Procedures for triggers *************************
Public Sub tvwTriggers_Click()
If tvwTriggers.Row = -1 Then Return
textResult.Text = modMain.$Connection.MySQL.Trigger.Info(tvwTriggers[tvwTriggers.Row, 0].Text, modMain.$Connection.Name)
Catch
modMain.Error()
End
Public Sub tvwTriggers_DblClick()
modMain.$hFNewTrigger = New FNewTrigger(tvwTables[tvwTables.Row, 0].Text, Null, tvwTriggers[tvwTriggers.Row, 0].Text)
modMain.$hFNewTrigger.ShowModal()
TriggersInfo()
Catch
modMain.Error()
End
Public Sub tvwTriggers_Select()
tvwTriggers_Click()
End
'***************************** End of Procedures for triggers ******************
Public Sub tabData_Click()
Select (tabData.Index)
Case 0 'Tables
tbtNew.ToolTip = ("New Table")
tbtDelete.ToolTip = ("Delete Table")
Case 1 'Views
tbtNew.ToolTip = ("New View")
tbtDelete.ToolTip = ("Delete View")
Case 2 'Indexes
tbtNew.ToolTip = ("New Index")
tbtDelete.ToolTip = ("Delete Index")
Case 3 'Fileds
tbtNew.ToolTip = ("New Field")
tbtDelete.ToolTip = ("Delete Field")
Case 4 'Routines
tbtNew.ToolTip = ("New Routine")
tbtDelete.ToolTip = ("Delete Routine")
Case 5 'Triggers
tbtNew.ToolTip = ("New Trigger")
tbtDelete.ToolTip = ("Delete Trigger")
Case 6 'Events
tbtNew.ToolTip = ("New Event")
tbtDelete.ToolTip = ("Delete Event")
Default
End Select
Catch
modMain.Error()
End
Public Sub Action_Activate(Name As String) As Boolean
Select (Name)
Case "NewItem" 'tbtNew, F2
If tbtLock.Value Then Return
NewItem()
RefreshData(tvwTables.Row, tabData.Index)
Case "EditItem" 'tbtNew, Ctrl + E
If tbtLock.Value Then Return
EditItem()
RefreshData(tvwTables.Row, tabData.Index)
Case "DeleteItem" 'tbtDelete, Del
If tbtLock.Value Then Return
DeleteItem()
RefreshData(tvwTables.Row, tabData.Index)
Case "Refresh" 'F5, tbtRefresh
RefreshData(tvwTables.Row, tabData.Index)
Case "NewDatabase" 'tbtNewDatabase
modMain.$hFNewDatabase = New FNewDatabase
modMain.$hFNewDatabase.ShowModal()
RefreshData(tvwTables.Row, tabData.Index)
Form_Open()
Case "DeleteDatabase" 'tbtDeleteDatabase
If Message.Question(Subst(("Do you realy want to delete the database: <b>&1</b>?"), modMain.$Connection.Name), ("&Yes"), ("&No")) = 1 Then
modMain.$Connection.MySQL.DataBase.Delete(modMain.$Connection.Name, False)
modMain.$Connection.MySQL.Use("mysql")
Form_Open()
Endif
RefreshData(tvwTables.Row, tabData.Index)
Case "Lock"
tbtDeleteDatabase.Enabled = Not tbtDeleteDatabase.Enabled
tbtNewDatabase.Enabled = Not tbtNewDatabase.Enabled
tbtNew.Enabled = Not tbtNew.Enabled
tbtDelete.Enabled = Not tbtDelete.Enabled
Default
End Select
Catch
modMain.Error()
End
Private Function ValidateTableSelected() As Boolean
If tvwTables.Row = -1 Then Return False
Return True
End
Public Procedure NewItem()
'Add the item
Select (tabData.Index)
Case 0 'Tables
modMain.$hFNewTable = New FNewTable
modMain.$hFNewTable.ShowModal()
Case 1 'Views
modMain.$hFNewView = New FNewView(Null)
modMain.$hFNewView.ShowModal()
Case 2 'Indexes
If ValidateTableSelected() Then
modMain.$hFNewIndex = New FNewIndex(tvwTables[tvwTables.Row, 0].Text)
modMain.$hFNewIndex.ShowModal()
Endif
Case 3 'Fileds
If ValidateTableSelected() Then
modMain.$hFNewField = New FNewField(tvwTables[tvwTables.Row, 0].Text)
modMain.$hFNewField.ShowModal()
Endif
Case 4 'Routines
modMain.$hFNewRoutine = New FNewRoutine
modMain.$hFNewRoutine.ShowModal()
Case 5 'Triggers
If ValidateTableSelected() Then
modMain.$hFNewTrigger = New FNewTrigger(tvwTables[tvwTables.Row, 0].Text)
modMain.$hFNewTrigger.ShowModal()
Endif
Case 6 'Events
modMain.$hFNewEvent = New FNewEvent
modMain.$hFNewEvent.ShowModal()
Default
End Select
RefreshData(tvwTables.Row, tabData.Index)
End
Public Procedure EditItem()
Select (tabData.Index)
Case 0 'Tables
modMain.$hFNewTable = New FNewTable(Null, tvwTables[tvwTables.Row, 0].Text)
modMain.$hFNewTable.ShowModal()
TableInfo()
Case 1 'Views
tvwViews_DblClick()
Case 2 'Indexes
tvwIndexes_DblClick()
Case 3 'Fileds
tvwFields_DblClick()
Case 4 'Routines
tvwProcedures_DblClick()
Case 5 'Triggers
tvwTriggers_DblClick()
Case 6 'Events
tvwEvents_DblClick()
Default
End Select
Catch
modMain.Error()
End
Public Procedure DeleteItem()
Select (tabData.Index)
Case 0 'Tables
If Message.Question(Subst(("Do you realy want to delete the table: <b>&1</b>?"), tvwTables[tvwTables.Row, 0].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Table.Delete([tvwTables[tvwTables.Row, 0].Text], False)
Case 1 'Views
If Message.Question(Subst(("Do you realy want to delete the view: <b>&1</b>?"), tvwViews[tvwViews.Row, 0].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.View.Delete([tvwViews[tvwViews.Row, 0].Text], False)
Case 2 'Indexes
If Message.Question(Subst(("Do you realy want to delete the index: <b>&1</b>?"), tvwIndexes[tvwIndexes.Row, 0].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Index.Delete(tvwTables[tvwTables.Row, 0].Text, tvwIndexes[tvwIndexes.Row, 0].Text)
Case 3 'Fileds
If Message.Question(Subst(("Do you realy want to delete the field: <b>&1</b>?"), tvwFields[tvwFields.Row, 1].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Table.ModifyColumn(tvwTables[tvwTables.Row, 0].Text, "DROP", tvwFields[tvwFields.Row, 1].Text)
Case 4 'Routines
If Message.Question(Subst(("Do you realy want to delete the routine: <b>&1</b>?"), tvwProcedures[tvwProcedures.Row, 1].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Routines.Delete(tvwProcedures[tvwProcedures.Row, 1].Text, False)
Case 5 'Triggers
If Message.Question(Subst(("Do you realy want to delete the trigger: <b>&1</b>?"), tvwTriggers[tvwTriggers.Row, 0].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Trigger.Delete(tvwTriggers[tvwTriggers.Row, 0].Text, False)
Case 6 'Events
If Message.Question(Subst(("Do you realy want to delete the event: <b>&1</b>?"), tvwEvents[tvwEvents.Row, 0].Text), ("&Yes"), ("&No")) = 1 Then modMain.$Connection.MySQL.Event.Delete(tvwEvents[tvwEvents.Row, 0].Text, False)
Default
End Select
modMain.$hFBrowser.SetMessage(("Item deleted."), 1)
End
Public Procedure RefreshData(Table As Integer, Tab As Integer)
textResult.Clear()
SearchInfo()
If Table = -1 Then Table = 0
tvwTables.Row = Table
FieldInfo()
IndexInfo()
tabData.Index = Tab
End
Public Procedure SetEditor()
textResult.SetStyle()
End
'***************************** Procedures for events *************************
Public Sub tvwEvents_Click()
textResult.Text = modMain.$Connection.MySQL.Event.Info(tvwEvents[tvwEvents.Row, 0].Text, modMain.$Connection.Name)
Catch
modMain.Error()
End
Public Sub tvwEvents_DblClick()
If Not modMain.$bSchemaOk Then Return
modMain.$hFNewEvent = New FNewEvent(Null, tvwEvents[tvwEvents.Row, 0].Text)
modMain.$hFNewEvent.ShowModal()
EventInfo()
Catch
modMain.Error()
End
Public Sub tvwEvents_Select()
tvwEvents_Click()
End
'***************************** Procedures for indexes *************************
Public Sub tvwIndexes_DblClick()
modMain.$hFNewIndex = New FNewIndex(tvwTables[tvwTables.Row, 0].Text, Null, tvwIndexes[tvwIndexes.Row, 0].Text)
modMain.$hFNewIndex.ShowModal()
IndexInfo()
Catch
modMain.Error()
End
'***************************** End of Procedures for indexes *************************
'**************************** Procedures for sorting info ********************
Public Sub tvwFields_ColumnClick(Column As Integer)
FieldInfo(Column)
End
Public Sub tvwTables_ColumnClick(Column As Integer)
TableInfo(Column)
End
Public Sub tvwViews_ColumnClick(Column As Integer)
ViewInfo(Column)
End
Public Sub tvwIndexes_ColumnClick(Column As Integer)
IndexInfo(Column)
End
Public Sub tvwProcedures_ColumnClick(Column As Integer)
RoutinesInfo(Column)
End
Public Sub tvwTriggers_ColumnClick(Column As Integer)
TriggersInfo(Column)
End
Public Sub tvwEvents_ColumnClick(Column As Integer)
EventInfo(Column)
End
'**************************** End of Procedures for sorting info **************
Public Sub tvwTables_Menu()
mnuItem.Popup()
End
Public Sub tvwViews_Menu()
mnuItem.Popup()
End
Public Sub tvwIndexes_Menu()
mnuItem.Popup()
End
Public Sub tvwFields_Menu()
mnuItem.Popup()
End
Public Sub tvwProcedures_Menu()
mnuItem.Popup()
End
Public Sub tvwTriggers_Menu()
mnuItem.Popup()
End
Public Sub tvwEvents_Menu()
mnuItem.Popup()
End
Public Sub cmbDatabases_Click()
modMain.$Connection.MySQL.Use(cmbDatabases.Text)
Me.Text = "mysql://" & modMain.$Connection.User & "@" & modMain.$Connection.Host & "/" & modMain.$Connection.Name
SearchInfo()
End