国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 日韩一区二区在线免费观看 | 亚洲一区二区三区四区视频 | 国产伦精品一区二区三区 | 中文字幕一区二区三区不卡 | 日本aⅴ在线 | 日韩在线免费播放 | 老子影院午夜久久亚洲 | 欧美在线一区视频 | 日韩综合图区 | 日本天堂在线 | 国产成人综合精品一区 | 亚洲精品电影 | 91久久偷偷看嫩草影院无费 | 日韩精品第一页 | 国产成人免费视频精品一区二区 | 国产一区二区三区成人久久片 | 免费在线国产视频 | 欧美亚洲综合网 | 国产精品亚洲高清一区二区 | 伊人久久影院 | 亚洲国产精品综合久久网络 | 欧美日批 | 毛片网此 | 99热这里只有精品一区二 | 国模吧国模吧一二区 | 久久青青视频 | 国产精品不卡在线 | 欧美日韩国产精品综合 | 日韩亚射| 欧美日韩精品一区二区在线播放 | 国产在线精品一区二区三区不卡 | 国产在线欧美日韩一区二区 | 日韩123| 国产日本在线观看 | 亚洲欧美日韩另类 | 欧美阿v | 国产激情一区二区三区 | 国产91精品对白露脸全集观看 | 欧美精品一区二区三区免费 | 亚洲视频二| 劲爆欧美精品13页 |