TCL tdbc命令行参数

时间:2014-11-14 03:39:14

标签: database tcl

我正在尝试使用命令行参数连接到数据库,但我得到了 无效的命令名称“2”     执行时 “2”

我搜索了很多,找不到任何解决方案......这是我的代码

package require tdbc::mysql

tdbc::mysql::connection create db1 -database $argv[2] -user $argv[3] -password $argv[4]

db1 allrows {create table Grades (TNumber char(8), CourseID char(7), Grade char(1, foreign key(TNumber) references Students(TNumber))}

set s [db prepare 
{
INSERT into Grades values (00003256,CSC4300,A)
}] 
set s [db prepare 
{
INSERT into Grades values (00012345,CSC2110,D)
}] 
set s [db prepare 
{
INSERT into Grades values (00012345,CSC2110,D)
}] 
set s [db prepare 
{
INSERT into Grades values (00001423,BIO1010,D)
}] 
set s [db prepare 
{
INSERT into Grades values (00015366,CSC2110,C)
}] 
set s [db prepare 
{
INSERT into Grades values (00003256,CSC4100,A)
}] 
set s [db prepare 
{
INSERT into Grades values (00003256,CSC2110,A)
}] 


db1 close

编辑:

尝试在第一个db allrows行运行修改后的代码时出错:

if{[catch {
package require tdbc::mysql
tdbc::mysql::connection create db -user [lindex $argv 2] -db [lindex $argv 1] -password [lindex $argv 3]

db allrows {create table Grades (TNumber char(8), CourseID char(7), Grade char(1, foreign key(TNumber) references Students(TNumber))}

db allrows {db prepare {INSERT into Grades values ('00003256','CSC4300','A')}}


    mysqlclose $s
} res]} {
puts $res
}

这是错误:

coursework@coursework:~/Desktop$ tclsh p4.tcl localhost students root coursework
invalid command name "if{1}"
    while executing
"if{[catch {
package require tdbc::mysql
tdbc::mysql::connection create db -user [lindex $argv 2] -db [lindex $argv 1] -password [lindex $argv 3]

db a..."
    (file "p4.tcl" line 1)

我真的不知道tcl,这只是一个挤满了情况的一次性项目!谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

argv不是一个数组(并且方括号是用于访问数组中的键的错误语法 - 它将是parens)。错误消息是它遇到$ argv [2]并且首先尝试在第二行中评估命令[2]并且失败。

argv是一个列表。所以,你可以这样做:

foreach name [list nothing1 nothing2 db user pass] val $argv {
  set $name $val
}
connection create db1 -database $db -user $user -password $pass 

或只是索引参数列表:

connection create db1 -database [lindex $argv 2] -user [lindex $argv 3] -password [lindex $argv 4]

很难说,因为如果你有索引权限你没有指定实际调用它的方式,那么第一个例子中的任何内容的数量,或者第二个中的索引的数量可能会也可能不会是对的。