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

📄 fpastetable.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
字号:
' Gambas class fileSTATIC PUBLIC SrcKey AS StringSTATIC PUBLIC SrcName AS StringSTATIC PUBLIC SrcDatabase AS StringSTATIC PUBLIC SrcTable AS StringSTATIC PUBLIC DestKey AS StringSTATIC PUBLIC DestName AS StringSTATIC PUBLIC DestDatabase AS StringSTATIC PUBLIC DestTable AS StringSTATIC PRIVATE $bData AS BooleanSTATIC PRIVATE $iCpt AS IntegerSTATIC PRIVATE $iTotal AS IntegerSTATIC PRIVATE $eTimer AS FloatPUBLIC SUB Form_Open()  DIM sText AS String  DIM iInd AS Integer  DIM hServer AS CServer  DIM hConn AS CConnection  lblSrcServer.Text = SrcName  lblSrcDatabase.Text = SrcDatabase  lblSrcTable.Text = SrcTable  lblDstServer.Text = DestName  lblDstDatabase.Text = DestDatabase  hServer = CServer.All[DestKey]  hConn = CConnection.Get(hServer, DestDatabase)  FOR iInd = 0 TO 99    sText = SrcTable    IF iInd THEN sText = sText & CStr(iInd + 1)    IF NOT hConn.Handle.Tables.Exist(sText) THEN BREAK  NEXT  txtName.Text = sText  txtName.SetFocus  txtName.SelectENDPUBLIC SUB btnCancel_Click()  ME.CloseENDPUBLIC SUB btnOK_Click()  DestTable = Trim(txtName.Text)  IF NOT DestTable THEN    Message.Warning(("Please enter a table name."))    txtName.SetFocus    RETURN  ENDIF  $bData = optCopyData.Value  CopyTable  ME.Close(TRUE)ENDPRIVATE SUB CopyTable()  DIM hSrc AS CConnection  DIM hDst AS CConnection  DIM rSrc AS Result  DIM sMsg AS String  INC Application.Busy  pgbPaste.Value = 0  hSrc = NEW CConnection(CServer.All[SrcKey], SrcDatabase, TRUE)  hDst = NEW CConnection(CServer.All[DestKey], DestDatabase, TRUE)  hSrc.Open  hDst.Open  $iTotal = 0  IF $bData THEN    rSrc = hSrc.Handle.Exec("SELECT COUNT(*) FROM " & hSrc.Handle.Quote(SrcTable))    $iTotal = $iTotal + rSrc[0]  ENDIF  $iCpt = 0  $eTimer = Timer  DoCopyTable(hSrc.Handle, hDst.Handle, SrcTable, DestTable)  UpdateProgress(TRUE)FINALLY  sMsg = Error.Text  DEC Application.Busy  TRY hSrc.Close  TRY hDst.CloseCATCH  Message.Error(sMsg)ENDPRIVATE SUB DoCopyTable(hSrc AS Connection, hDst AS Connection, sSrc AS String, sDst AS String)  DIM hTableSrc AS Table  DIM hTableDst AS Table  DIM hField AS Field  DIM hIndex AS Index  DIM rSrc AS Result  DIM rDst AS Result  DIM iInd AS Integer  DIM sMsg AS String  DIM sSrcCharset AS String  DIM sDstCharset AS String  sSrcCharset = hSrc.Charset  sDstCharset = hDst.Charset  hTableSrc = hSrc.Tables[sSrc]  hTableDst = hDst.Tables.Add(sDst, hTableSrc.Type)  FOR EACH hField IN hTableSrc.Fields    WITH hField      hTableDst.Fields.Add(.Name, .Type, .Length, .Default)    END WITH  NEXT  hTableDst.PrimaryKey = hTableSrc.PrimaryKey  hTableDst.Update  FOR EACH hIndex IN hTableSrc.Indexes    IF hIndex.Primary THEN CONTINUE    WITH hIndex      hTableDst.Indexes.Add(.Name, .Fields, .Unique)    END WITH  NEXT  IF $bData THEN    hDst.Begin    rSrc = hSrc.Find(sSrc)    IF sSrcCharset = sDstCharset THEN      FOR EACH rSrc        rDst = hDst.Create(sdST)        FOR iInd = 0 TO rSrc.Fields.Count - 1          rDst[iInd] = rSrc[iInd]        NEXT        rDst.Update        INC $iCpt        UpdateProgress      NEXT    ELSE      FOR EACH rSrc        rDst = hDst.Create(sDst)        FOR iInd = 0 TO rSrc.Fields.Count - 1          rDst[iInd] = rSrc[iInd]          IF rSrc.Fields[iInd].Type = gb.String THEN            TRY rDst[iInd] = Conv(rSrc[iInd], sSrcCharset, sDstCharset)          ENDIF        NEXT        rDst.Update        INC $iCpt        UpdateProgress      NEXT    ENDIF    hDst.Commit  ENDIFCATCH  sMsg = Subst("Cannot copy table &1.", sSrc) & "\n\n" & Error.Text  TRY hDst.Rollback  TRY hDst.Tables.Remove(sDst)  Error.Raise(sMsg)ENDPRIVATE SUB UpdateProgress(OPTIONAL bForce AS Boolean)  IF NOT bForce THEN    IF Timer < $eTimer THEN RETURN  ENDIF  $eTimer = Timer + 0.25  IF $iTotal THEN    pgbPaste.Value = CFloat($iCpt) / $iTotal  ELSE    pgbPaste.Value = 1  ENDIF  WAITEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -