📄 fpastetable.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 + -