현재 Tcl 프로그램의 데이터 관리를 sqlite를 사용하여 관리하고 있습니다. 이것저것 신경 쓸 거 없어 좋네요. Save As를 구현하려다 보니 아래의 코드가 만들어졌습니다. src.sql 파일은 미리 존재해야 하고, 상황에 따라 파일을 복사해서 Save As를 구현해도 되지만, db1(src.sql) 이 열려 있는 상태에서는 아래와 같이 하는 방법이 좋은 것 같습니다.
#sqlite db1 "src.sql"
sqlite db2 "dest.sql"
db1 eval { SELECT name FROM sqlite_master WHERE type = "table" } row {
set table $row(name)
# 테이블 생성
set query "PRAGMA table_info('$table');"
set result [db1 eval $query]
puts $result
set query "CREATE TABLE $table ("
foreach {cid name type null def pkey} $result {
append query "$name $type, "
}
set query [string range $query 0 end-2]
append query ")"
db2 eval $query
# 필드 값 삽입
db1 eval "SELECT * FROM $table" row2 {
set query "INSERT INTO $table VALUES("
set columns $row2(*)
set values [list]
foreach column_name $columns {
append query "\"$row2($column_name)\", "
}
set query [string range $query 0 end-2]
append query ")"
db2 eval $query
}
}
#db1 close
db2 close
'Tcl & Tk > 팁 (Tip)' 카테고리의 다른 글
Embedding Tk into a native Win32 GUI (0) | 2025.03.26 |
---|---|
파일 복사 진행 상황을 tablelist에 표시하기 (0) | 2025.03.24 |
SDL 프레임을 Tk 에 내장하기 (0) | 2025.03.24 |
콤보박스 위젯의 팝업 리스트 자동으로 펼치기 (0) | 2025.03.24 |
도킹 위젯 구현 (0) | 2025.03.24 |