<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Tcl訪問SQLServer等數據庫的方法

        來源:懂視網 責編:小采 時間:2020-11-09 08:10:45
        文檔

        Tcl訪問SQLServer等數據庫的方法

        Tcl訪問SQLServer等數據庫的方法:可以使用tcom來 訪問 ADO,下面是Script.NET中封裝的一個 訪問 ADO的類,在Script.NET中可以找到這個類的代碼。( http://www.blueantstudio.net ) ############################################################
        推薦度:
        導讀Tcl訪問SQLServer等數據庫的方法:可以使用tcom來 訪問 ADO,下面是Script.NET中封裝的一個 訪問 ADO的類,在Script.NET中可以找到這個類的代碼。( http://www.blueantstudio.net ) ############################################################

        可以使用tcom來 訪問 ADO,下面是Script.NET中封裝的一個 訪問 ADO的類,在Script.NET中可以找到這個類的代碼。( http://www.blueantstudio.net ) ################################################################# # TclDB. tcl # Author : blueant # Ve

        可以使用tcom來訪問ADO,下面是Script.NET中封裝的一個訪問ADO的類,在Script.NET中可以找到這個類的代碼。(http://www.blueantstudio.net)
        #################################################################
        # TclDB.tcl
        # Author : blueant
        # Version : 1.0
        # Date : 2007-6-27
        # Description: Tcl Database
        #################################################################
        package provide TclDB 1.0
        package require tcom
        package require Itcl
        ::itcl::class TAdoDb {

        # 數據庫字段類型定義
        public common DBTYPE_EMPTY 0
        public common DBTYPE_NULL 1
        public common DBTYPE_I2 2
        public common DBTYPE_I4 3
        public common DBTYPE_R4 4
        public common DBTYPE_R8 5
        public common DBTYPE_CY 6
        public common DBTYPE_DATE 7
        public common DBTYPE_BSTR 8
        public common DBTYPE_IDISPATCH 9
        public common DBTYPE_ERROR 10
        public common DBTYPE_BOOL 11
        public common DBTYPE_VARIANT 12
        public common DBTYPE_IUNKNOWN 13
        public common DBTYPE_DECIMAL 14
        public common DBTYPE_UI1 17
        public common DBTYPE_I1 16
        public common DBTYPE_UI2 18
        public common DBTYPE_UI4 19
        public common DBTYPE_I8 20
        public common DBTYPE_UI8 21
        public common DBTYPE_GUID 72
        public common DBTYPE_FILETIME 64
        public common DBTYPE_BYTES 128
        public common DBTYPE_STR 129
        public common DBTYPE_WSTR 130
        public common DBTYPE_NUMERIC 131
        public common DBTYPE_UDT 132
        public common DBTYPE_DBDATE 133
        public common DBTYPE_DBTIME 134
        public common DBTYPE_DBTIMESTAMP 135

        # 內部變量定義
        protected variable m_cnstr "" ;# 數據庫連接字符串
        protected variable m_cn "" ;# Connection對象句柄
        protected variable m_rs "" ;# Recordset對象句柄

        # 數據集的游標類型3=adOpenStatic
        protected variable m_CursorType 3
        # 數據集的鎖定類型1=adLockReadOnly
        protected variable m_LockType 1

        constructor {} {
        # 創建ADO對象
        set ret [catch {set m_cn [::tcom::ref createobject "ADODB.Connection"]} msg]
        if {$ret} {
        error "ADO連接創建失敗,原因:$msg"
        }
        set ret2 [catch {set m_rs [::tcom::ref createobject "ADODB.Recordset"]} msg]
        if {$ret} {
        error "ADO紀錄集創建失敗,原因:$msg"
        }
        }

        destructor {
        Close
        catch {unset m_cn m_rs}
        }

        public method GetConnectionString {} {return $m_cnstr} ;# 獲取連接字符串
        public method Open {{cnstr ""}} ;# 打開數據庫連接
        public method OpenMdb {mdbpath} ;# 打開MDB數據庫
        public method Close {} ;# 關閉數據庫連接
        public method ExecSql {sqlstr} ;# 執行SQL語句,有數據則返回數據列表
        public method QueryTables {{type TABLE}};# 獲取Table列表
        public method QueryColumn {tablename {detail ""}};# 查詢表的列名
        public method CreateTable {tablename fields}; # 創建表
        }
        #-------------------------------------------------------------
        # Open Database
        # if cnstr is empty, then prompt user to select a database
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::Open {{cnstr ""}} {
        # 關閉連接
        Close
        # 建立連接
        if {$cnstr == ""} {
        set ret [catch {set dl [::tcom::ref createobject "Datalinks"]} msg]
        if {$ret} {
        error "ADO Datalinks對象創建失敗,原因:$msg"
        }

        set ret [catch {
        set conn [$dl PromptNew]
        set cnstr [$conn ConnectionString]
        unset conn
        unset dl
        } msg]
        if {$ret} {
        #error "獲取連接字符串失敗,原因:$msg!"
        set m_cnstr ""
        return
        }
        }
        set ret [catch {$m_cn Open $cnstr} msg]
        if {$ret} {
        error "$msg/n打開數據庫連接失敗,請檢查連接字符串!/n$cnstr"
        }

        # 保存連接字符串
        set m_cnstr $cnstr

        #pwait 10
        return
        }
        #-------------------------------------------------------------
        # Open Access Database
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::OpenMdb {mdbpath} {
        Open "provider=Microsoft.Jet.OLEDB.4.0;data source=$mdbpath"
        return
        }
        #-------------------------------------------------------------
        # Close Database
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::Close {} {
        # 關閉連接
        catch {$m_rs Close}
        catch {$m_cn Close}
        #pwait 10
        return
        }
        #-------------------------------------------------------------
        # Exec SQL
        # if search a recordset, then return recordset data
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::ExecSql {sqlstr} {
        set m_rowcount 0

        # 關閉Recordset
        catch {$m_rs Close}

        # 執行查詢
        set ret [catch {$m_rs Open $sqlstr $m_cn $m_CursorType $m_LockType} msg]
        if {$ret} {
        error "$msg/n執行SQL語句失敗:/n$sqlstr"
        }

        # 檢查SQL語句是否返回了數據
        catch {set m_rowcount [$m_rs RecordCount]}
        if {$m_rowcount < 1} {
        catch {$m_rs Close}
        return
        }

        set flds [$m_rs Fields]
        set m_colcount [$flds Count]
        set m_data {}

        # 數據
        catch {
        for {set j 1} {$j <= $m_rowcount} {incr j} {
        set line {}
        for {set i 0} {$i < $m_colcount} {incr i} {
        lappend line [string trimright [$m_rs Collect $i]]
        }

        lappend m_data $line
        $m_rs MoveNext
        }
        }

        # 關閉Recordset
        catch {$m_rs Close}

        # 創建并返回數據列表
        return $m_data
        }
        #-------------------------------------------------------------
        # Query all tables
        # default is query all TABLE, return table name
        # if type is null, then return list of table name and type
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::QueryTables {{type TABLE}} {
        # SchemaEnum 20=adSchemaTables
        if {[catch {set srs [$m_cn OpenSchema 20]} msg]} {
        error $msg
        }

        set data {}
        while {[$srs EOF] == 0} {
        if {($type != "") && ($type != "-all")} {
        if {[$srs Collect TABLE_TYPE] == $type} {
        lappend data [$srs Collect TABLE_NAME]
        }
        } else {
        lappend data [list [$srs Collect TABLE_NAME] [$srs Collect TABLE_TYPE]]
        }
        $srs MoveNext
        }

        catch {$srs Close}

        return $data
        }
        #-------------------------------------------------------------
        # Query one table's all column information
        # if follow -detail parameter, then return column detail info
        # detail is column's: Name, HasDefault, Default, NullAble,
        # Data Type, Max Length
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::QueryColumn {tablename {detail ""}} {
        # SchemaEnum 4=adSchemaColumns
        if {[catch {set srs [$m_cn OpenSchema 4]} msg]} {
        error $msg
        }

        set data {}
        while {[$srs EOF] == 0} {
        if {[$srs Collect TABLE_NAME] == $tablename} {
        if {$detail == "-detail"} {
        lappend data [list [$srs Collect COLUMN_NAME] /
        [$srs Collect COLUMN_HASDEFAULT] /
        [$srs Collect COLUMN_DEFAULT] /
        [$srs Collect IS_NULLABLE] /
        [$srs Collect DATA_TYPE] /
        [$srs Collect CHARACTER_MAXIMUM_LENGTH] /
        ]
        } else {
        lappend data [$srs Collect COLUMN_NAME]
        }
        }
        $srs MoveNext
        }

        catch {$srs Close}

        return $data
        }
        #-------------------------------------------------------------
        # Create new table
        # field parameter is a list of field, every field is a list
        # of field name, type, size, default value, not null, auto
        # increment, primary key or index or unique
        #-------------------------------------------------------------
        ::itcl::body TAdoDb::CreateTable {tablename fields} {
        set lsTable [QueryTables]
        if {[lsearch $lsTable $tablename] != -1} {
        error "數據庫中已經存在名為 $tablename 的對象。"
        }

        set sql "CREATE TABLE $tablename/("
        set field_count 0
        foreach field $fields {
        set field_name [lindex $field 0]
        if {$field_name == ""} {
        continue;
        }

        set field_type [lindex $field 1]
        set field_size [lindex $field 2]
        set field_default [lindex $field 3]

        set field_notnull ""
        if {[lsearch [lrange $field 4 end] "notnull"] != -1} {
        set field_notnull "notnull"
        }

        set field_extend ""
        if {[lsearch [lrange $field 4 end] "AUTO_INCREMENT"] != -1} {
        set field_extend "AUTO_INCREMENT"
        }

        set field_key ""
        if {[lsearch [lrange $field 4 end] "primary"] != -1} {
        set field_key primary
        } elseif {[lsearch [lrange $field 4 end] "index"] != -1} {
        set field_key index
        } elseif {[lsearch [lrange $field 4 end] "unique"] != -1} {
        set field_key unique
        }

        if {$field_count > 0} {
        set sql "$sql ,"
        }
        set sql "$sql $field_name $field_type"
        if {($field_size != "") && ($field_size != "0")} {
        set sql "$sql/($field_size/)"
        }
        if {$field_notnull != ""} {
        set sql "$sql NOT NULL"
        }
        if {$field_default != ""} {
        if {[lsearch $field_type {"TEXT" "LONGTEXT" "VARCHAR"}] != -1} {
        set sql "$sql DEFAULT '$field_default'"
        } else {
        set sql "$sql DEFAULT $field_default"
        }
        }
        if {$field_extend == "AUTO_INCREMENT" } {
        set sql "$sql AUTONUMBER"
        }
        switch $field_key {
        primary { set sql "$sql PRIMARY KEY" }
        index {}
        unique {}
        }

        incr field_count
        }

        set sql "$sql /)"

        ExecSql $sql
        }

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Tcl訪問SQLServer等數據庫的方法

        Tcl訪問SQLServer等數據庫的方法:可以使用tcom來 訪問 ADO,下面是Script.NET中封裝的一個 訪問 ADO的類,在Script.NET中可以找到這個類的代碼。( http://www.blueantstudio.net ) ############################################################
        推薦度:
        標簽: 連接 方法 使用
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 十八禁的黄污污免费网站| 在线亚洲v日韩v| 久久精品毛片免费观看| 亚洲人JIZZ日本人| 在线看片免费人成视频久网下载| 免费一看一级毛片人| 成人a毛片免费视频观看| 亚洲精品无码久久久| A级毛片成人网站免费看| 亚洲熟妇中文字幕五十中出| 在线观看免费黄色网址| 亚洲成A人片在线观看无码不卡 | 亚洲Av无码国产一区二区| 永久免费观看的毛片的网站| 最新亚洲人成无码网www电影| 免费在线观看亚洲| 中国一级毛片视频免费看| 久久久久亚洲AV片无码| 国产免费不卡v片在线观看| 国产亚洲精品影视在线| 四虎永久在线精品免费观看地址| 一级做a爰片久久毛片免费看| 亚洲国产无套无码av电影| 亚欧色视频在线观看免费| 亚洲av无码日韩av无码网站冲| 亚洲色欲久久久久综合网| 免费人妻无码不卡中文字幕系| 亚洲综合精品第一页| 亚洲日本在线观看视频| 9420免费高清在线视频| 国产精品亚洲综合久久| 国产亚洲精品自在线观看| 成人福利免费视频| 一级做a毛片免费视频| 亚洲成A∨人片在线观看无码| 日韩免费无砖专区2020狼| a级在线观看免费| 天天爽亚洲中文字幕| 国产亚洲精品免费视频播放| 福利免费观看午夜体检区| 久久高潮一级毛片免费|