📄 ftable.class
字号:
tbvField[Row, 4].Refresh CASE 3 IF sData = ("unlimited") THEN hField.Length = 0 ELSE TRY iVal = CInt(sData) IF ERROR THEN Message.Warning(("Please enter a number.")) RETURN TRUE ENDIF IF iVal < 1 OR iVal > 255 THEN Message.Warning(("The length must be greater than 1 and lower than 255.")) RETURN TRUE ENDIF hField.Length = iVal ENDIF CASE 4 IF hField.Type <> gb.String THEN IF sData THEN vVal = Val(sData) IF hField.Type = gb.Float THEN IF TypeOf(vVal) = gb.Integer THEN vVal = CFloat(vVal) ENDIF ENDIF IF TypeOf(vVal) <> hField.Type THEN Message.Warning(("Incorrect value.")) RETURN TRUE ENDIF ENDIF ELSE vVal = sData ENDIF hField.DefaultValue = vVal END SELECT ModifyENDPUBLIC SUB btnNewField_Click() DIM hField AS CField DIM iInd AS Integer IF $bReadOnly THEN RETURN IF $hFieldEditor.Hide() THEN RETURN hField = NEW CField WITH hField FOR iInd = 1 TO 1000 .Name = ("Field") & CStr(iInd) IF NOT $cFieldName.Exist(.Name) THEN BREAK NEXT .Type = gb.Integer $cFieldName[.Name] = TRUE END WITH $aField.Add(hField, tbvField.Row + 1) INC tbvField.Rows.Count tbvField.MoveTo(tbvField.Row + 1, 1) ModifyENDPUBLIC SUB btnKillField_Click() DIM iRow AS Integer IF $bReadOnly THEN RETURN IF $aField.Count <= 1 THEN RETURN IF $hFieldEditor.Hide() THEN RETURN iRow = tbvField.Row IF IsFieldUsedInIndex($aField[iRow].Name) THEN Message.Warning(("This field is used in an index.")) RETURN ENDIF $cFieldName[$aField[iRow].Name] = NULL $aField.Remove(iRow) DEC tbvField.Rows.Count ModifyENDPUBLIC SUB btnDownField_Click() IF $bReadOnly THEN RETURN IF tbvField.Row = (tbvField.Rows.Count - 1) THEN RETURN SWAP $aField[tbvField.Row], $aField[tbvField.Row + 1] tbvField.Rows[tbvField.Row].Refresh tbvField.Rows[tbvField.Row + 1].Refresh INC tbvField.Row ModifyENDPUBLIC SUB btnUpField_Click() IF $bReadOnly THEN RETURN IF tbvField.Row = 0 THEN RETURN SWAP $aField[tbvField.Row], $aField[tbvField.Row - 1] tbvField.Rows[tbvField.Row].Refresh tbvField.Rows[tbvField.Row - 1].Refresh DEC tbvField.Row ModifyENDPUBLIC SUB btnKey_Click() IF $bReadOnly THEN RETURN WITH $aField[tbvField.Row] .Key = NOT .Key END WITH tbvField[tbvField.Row, 0].Refresh ModifyENDPUBLIC SUB btnCancelField_Click() IF tabTable.Index = 2 THEN frmData.btnRefresh_Click ELSE IF $bReadOnly THEN RETURN IF Message.Question(("Do you really want to reload the table definition ?"), ("Reload"), ("Cancel")) <> 1 THEN RETURN ReadTable ENDIFENDPUBLIC SUB tbvIndex_Data(Row AS Integer, Column AS Integer) DIM hIndexField AS CIndexField TRY hIndexField = $aIndexField[Row] IF NOT hIndexField THEN RETURN WITH tbvIndex.Data SELECT CASE Column CASE 0 .Text = hIndexField.Index CASE 1 IF hIndexField.Index THEN .Text = Str(hIndexField.Unique) CASE 2 .Text = hIndexField.Field END SELECT END WITHENDPRIVATE FUNCTION FindIndex(sName AS String) AS Boolean DIM hIndexField AS CIndexField FOR EACH hIndexField IN $aIndexField IF LCase(sName) = LCase(hIndexField.Index) THEN RETURN TRUE NEXTENDPRIVATE FUNCTION FreeIndexFields(OPTIONAL bExcept AS Boolean) AS String[] DIM iRow AS Integer DIM hField AS CField DIM cField AS NEW Collection DIM bVal AS Boolean DIM aField AS NEW String[] FOR EACH hField IN $aField cField[hField.Name] = TRUE NEXT iRow = tbvIndex.row DO IF $aIndexField[iRow].Index THEN BREAK DEC iRow LOOP DO IF NOT bExcept OR iRow <> tbvIndex.Row THEN cField[$aIndexField[iRow].Field] = NULL ENDIF INC iRow IF iRow >= $aIndexField.Count THEN BREAK IF $aIndexField[iRow].Index THEN BREAK LOOP FOR EACH bVal IN cField aField.Add(cField.Key) NEXT RETURN aFieldENDPRIVATE FUNCTION IsFieldUsedInIndex(sField AS String) AS Boolean DIM iRow AS Integer FOR iRow = 0 TO $aIndexField.Max IF UCase(sField) = UCase($aIndexField[iRow].Field) THEN RETURN TRUE NEXTENDPUBLIC SUB btnNewIndex_Click() DIM hIndexField AS CIndexField DIM iInd AS Integer IF $bReadOnly THEN RETURN hIndexField = NEW CIndexField WITH hIndexField FOR iInd = 1 TO 1000 .Index = $sTable & "_" & ("index") & CStr(iInd) IF NOT FindIndex(.Index) THEN BREAK NEXT .Field = $aField[0].Name END WITH $aIndexField.Add(hIndexField) INC tbvIndex.Rows.Count tbvIndex.MoveTo(tbvIndex.Rows.Count - 1, 0) ModifyENDPUBLIC SUB btnNewIndexField_Click() DIM hIndexField AS CIndexField DIM iRow AS Integer DIM aField AS String[] IF $bReadOnly THEN RETURN IF $aIndexField.Count = 0 THEN RETURN iRow = tbvIndex.Row IF iRow < 0 THEN RETURN aField = FreeIndexFields(FALSE) IF aField.Count = 0 THEN RETURN hIndexField = NEW CIndexField WITH hIndexField .Field = aField[0] END WITH DO INC iRow IF iRow >= tbvIndex.Rows.Count THEN BREAK IF $aIndexField[iRow].Index THEN BREAK LOOP $aIndexField.Add(hIndexField, iRow) INC tbvIndex.Rows.Count tbvIndex.MoveTo(iRow, 1) ModifyENDPUBLIC SUB btnKillIndex_Click() DIM sIndex AS String DIM bUnique AS Boolean DIM iRow AS Integer DIM hIndex AS CIndexField IF $bReadOnly THEN RETURN IF $aIndexField.Count = 0 THEN RETURN iRow = tbvIndex.Row IF iRow < 0 THEN RETURN $hIndexEditor.Hide WITH $aIndexField[iRow] sIndex = .Index bUnique = .Unique END WITH $aIndexField.Remove(iRow) IF iRow < $aIndexField.Count THEN WITH $aIndexField[iRow] IF NOT .Index THEN .Index = sIndex .Unique = bUnique ENDIF END WITH ENDIF DEC tbvIndex.Rows.Count tbvIndex.Refresh ModifyENDPUBLIC SUB btnDownIndex_Click() DIM iRow AS Integer IF $bReadOnly THEN RETURN iRow = tbvIndex.Row IF iRow < 0 THEN RETURN IF iRow = ($aIndexField.Count - 1) THEN RETURN IF $aIndexField[iRow + 1].Index THEN RETURN SWAP $aIndexField[iRow].Field, $aIndexField[iRow + 1].Field INC tbvIndex.Row tbvIndex.RefreshENDPUBLIC SUB btnUpIndex_Click() DIM iRow AS Integer IF $bReadOnly THEN RETURN iRow = tbvIndex.Row IF iRow < 0 THEN RETURN IF iRow = 0 THEN RETURN IF $aIndexField[iRow].Index THEN RETURN SWAP $aIndexField[iRow].Field, $aIndexField[iRow - 1].Field DEC tbvIndex.Row tbvIndex.RefreshENDPUBLIC SUB tbvIndex_Change() DIM hIndex AS CIndexField IF $bReadOnly THEN RETURN hIndex = $aIndexField[tbvIndex.Row] WITH $hIndexEditor SELECT CASE tbvIndex.Column CASE 0 IF hIndex.Index THEN .ShowTextBox(TRUE, TRUE) ELSE .Hide ENDIF CASE 1 IF hIndex.Index THEN .ShowComboBox("True\nFalse", TRUE) ELSE .Hide ENDIF CASE 2 .ShowComboBox(FreeIndexFields(TRUE).Join("\n"), TRUE, TRUE) END SELECT END WITHENDPUBLIC FUNCTION tbvIndex_Save(Row AS Integer, Column AS Integer, sData AS String) AS Boolean DIM hIndex AS CIndexField hIndex = $aIndexField[Row] SELECT Column CASE 0 IF FindIndex(sData) THEN Message.Warning(("This name already exists.")) RETURN TRUE ENDIF hIndex.Index = sData CASE 1 hIndex.Unique = sData = "True" CASE 2 hIndex.Field = sData END SELECT ModifyENDPUBLIC SUB btnSaveField_Click() SaveTableENDPUBLIC SUB Form_Close() DIM bCancel AS Boolean IF IsModified() THEN SELECT CASE Message.Question($hConn.Server.Name & " - " & $hConn.Name & "\n\n" & Subst(("The table '&1' has been modified.\nDo you want to save it ?"), $sTable), ("Save"), ("Do not save"), ("Cancel")) CASE 1 IF frmData THEN IF frmData.IsModified() THEN bCancel = frmData.WriteData() ENDIF ENDIF IF NOT bCancel THEN IF $bModify THEN bCancel = WriteTable() ENDIF ENDIF CASE 3 bCancel = TRUE END SELECT ENDIF' IF NOT bCancel THEN' 'Connection = NULL' '$hConn = NULL' ENDIF IF bCancel THEN STOP EVENT ELSE IF frmData THEN frmData.Close ENDIFENDPUBLIC SUB btnData_Click() $hConn.OpenTable($sTable, TRUE)ENDPUBLIC SUB btnRename_Click() DIM sNewName AS String DIM sOldName AS String IF $bReadOnly THEN RETURN IF FNewTable.Run($sName, $sType) THEN RETURN sNewName = FNewTable.Name IF NOT sNewName THEN RETURN IF sNewName = $sTable THEN RETURN IF Connection.Handle.Tables.Exist(sNewName) THEN Message.Warning(("This table name is already in use.")) RETURN ENDIF sOldName = $sName $sName = sNewName Modify IF SaveTable() THEN $sName = sOldName RETURN ENDIF TRY $hConn.DeleteTable(sOldName) $hConn.RefreshTreeENDPUBLIC SUB tabTable_Click() IF tabTable.Index = 2 THEN IF NOT frmData THEN frmData = NEW FData(ME, $hConn, $sTable, $bReadOnly, tabTable) Form_Resize ENDIF ENDIFENDPUBLIC SUB btnClose_Click() ME.CloseENDPUBLIC SUB btnRequest_Click() Connection.OpenRequestENDPRIVATE FUNCTION SaveTable() AS Boolean IF $bReadOnly THEN RETURN IF $hFieldEditor.Hide() THEN RETURN TRUE IF $hIndexEditor.Hide() THEN RETURN TRUE IF WriteTable() THEN RETURN TRUEEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -