⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftable.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
📖 第 1 页 / 共 2 页
字号:
      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 + -