| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3118 人关注过本帖
标题:请教两个修改表结构和组合框数据绑定的问题
只看楼主 加入收藏
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
出了个错,找半天没找到问题所在,提示函数Get_Score找不到变量CJB,原因没找到。
另外
laColumns[lnIndex,2] = "Get_Score(xsb.xh, '" + kcb.kch + "')"
这一行给解释一下,Get_Score要接收的变量应该是学号和课程号,你这里用的是学生表的学号和课程表的课程号,那为什么xsk.xh没有加引号而kch加了引号,还加了两层,函数里面
FUNCTION Get_Score(tcID AS Character, tcCourseID AS Character) AS Number
    RETURN IIF(SEEK(tcID + tcCourseID, "cjb", "m_ID"), cjb.cj, 0.0)
ENDFUNC 

SEEK函数就是在cjb里面找m_ID索引里面是否有xsb.xh+kcb.kch这个记录,有就返回成绩,没有就返回0,那那两个引号到底有什么用?
2011-07-17 20:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你沒打開cjb表吧,下面代碼要求的東西應該在數據環境中存在:

程序代码:
        USE xsb ORDER xh IN 0                        && 学生表,以xh建立索引
        USE kcb ORDER kch IN 0                        && 课程表,以kch建立索引
        USE cjb ORDER m_ID IN 0                        && 成绩表,分别以xh、kch、xh+kch建立索引,以xh+kch为主索引
        SET RELATION TO xh INTO cjb IN xsb
        SET RELATION TO kch INTO kcb IN cjb

授人以渔,不授人以鱼。
2011-07-17 20:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
        GOTO TOP IN kcb
        lnIndex = 5
        DO WHILE !EOF("kcb")
            lnIndex = lnIndex + 1
            laColumns[lnIndex,1] = ALLTRIM(kcb.kcm)
            laColumns[lnIndex,2] = "Get_Score(xsb.xh, '" + kcb.kch + "')"
            laColumns[lnIndex,3] = 80
            laColumns[lnIndex,4] = "Z"
            laColumns[lnIndex,5] = "999.99"
            SKIP IN kcb
        ENDDO 


看整段代碼:lnIndex從6開始,掃一遍課程表的記錄,即是橫向設置表格的欄目,每欄一個科目。在同一行中,都是同一個學號,所以在這個循環中,只有當前xsb中當前記錄的xh,這個學號是不會變的,Get_Score()函數正是根據學號取成績,所以這確保同一行是同一個學生。然後,kcb每跳一條記錄,課程代號就改變,所以這個循環是對同一個學號遍歷所有課程,求取其成績。函數Get_Score()的參數説明很明白,要一個學號和課程號,就返回這個學生該門課程的成績。

因爲Grid控件的Column.ControlSource屬性,要求是字符串,所以在這裡也必須用字符串的形式賦值,這就是最外層引號的作用。也就是說,我們把字符串"Get_Score('2009201101', 'C01')"賦給Column.ControlSource,則控件自己會使用(表達式)代換功能,將這個字符串變爲命令執行。類似

lcAlias = "xsb"
SELECT (lcAlias)


等價於:
SELECT xsb

這是Grid.Column.ControlSource屬性要求的。因此,如果我們要Grid的某欄顯示表中兩個字段的計算結果,可以這樣寫:Columns(4).ControlSource = "STR(字段1 + 字段2, 6, 2)",那麽就不用修改表結構而顯示中間運算數據,這些能夠計算的東西,是沒必要保存在表中的。

[ 本帖最后由 TonyDeng 于 2011-7-17 20:48 编辑 ]

授人以渔,不授人以鱼。
2011-07-17 20:40
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
回复 52楼 TonyDeng
数据环境的定义我放在了整个表单的LOAD事件当中,所以应该不会是表没打开啊。而且我挂起后用select cjb;browse是可以显示的,说明已经打开了。
2011-07-17 21:20
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
回复 53楼 TonyDeng
程序我懂了,
"Get_Score(xsb.xh, '" + kcb.kch + "')"
当中最外面的两层双引号(get前面的和“)”后面的)我知道了是为了把结果以字符串的形式赋值给ControlSource,我现在不理解的是
'" + kcb.kch + "'
这里面的两层引号,里面的双引号和外面的单引号,分别表示什么。get_Score函数里面接受的两个变量类型都是C,加一层引号可以理解为以字符形式传送变量,可是为什么xsb.xh不加,另外一个加两层。
还有个问题,变量在传送的时候应该是类型和值一起传送吧,xh和kch在源表里面就是字符型的,这里为什么还要转化?
laColumns[lnIndex,2] = "Get_Score(xsb.xh, '" + kcb.kch + "')"
laColumns[lnIndex,2] =str(Get_Score(xsb.xh, '" + kcb.kch + "'))
等同吗?
不好意思,这些小问题我想问清楚点,谢谢了。
2011-07-17 21:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不好意思,我剛才在看《非誠勿擾》,呵呵。

那個找不到表別名的問題,應該是你什麽地方設置錯了,因爲程序在移植之前是能夠運行的,再檢查一下,我這樣隔空也無法判斷是什麽原因。
後面的問題,你將循環體還原為逐個對數組賦值,就看得比較清楚了。

授人以渔,不授人以鱼。
2011-07-17 22:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 55楼 lyxc34
在頭腦中執行一下:
laColumns[lnIndex,2] = "Get_Score(xsb.xh, '" + kcb.kch + "')"
假設xsb.xh = "2009201101",kcb.kch = "C01"
則上面語句實際上是laColumns[lnIndex,2] = "Get_Score("2009201101", '" + "C01" + "')"
進行字符串運算"Get_Score('2009201101', '" + 'C01' + "')" = "Get_Score('2009201101', 'C01')"
於是原語句是laColumns[lnIndex,2] = "Get_Score('2009201101', 'C01')"
這就是實際的結果,我們要的正是這個一個字符串賦值給數組變量。

授人以渔,不授人以鱼。
2011-07-17 23:19
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
回复 57楼 TonyDeng
'" + kcb.kch + "'

'"能做一对吗?如果是的话那就好解释了,空字符串'"连接kcb.kch再连接空字符串"'等于kcb.kch。
如果是这样的话那'" + kcb.kch + "'和kcb.kch还是没区别啊。我是不是钻进死胡同了。

[ 本帖最后由 lyxc34 于 2011-7-17 23:46 编辑 ]
2011-07-17 23:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看清楚,單引號'是被一對雙引號"括住的,表明這是字符串中的一個字符。雙引號圍起來的字符串,裏面無法再套雙括號字符,只能用單引號或方括號,一個一個串起來。比如,現在要構造字符串"'abc'",這個字符串由外層雙引號括住,裏面的東西是字符,這裡有5個字符,其中兩個是單引號。如果是"'abc",則是4個字符,有一個單引號。雙引號和單引號不配對,相同的符號才配對。字符串有多種配對方式,雙引號""、單引號''、方括號[],各配各的,不能混配。

你在Command窗口輸入? "'abc"看看得到什麽?

另:剛才試了改用可視化的方式重演這個程序,沒有你所說的問題。

lyxc34.zip (4.68 KB)


[ 本帖最后由 TonyDeng 于 2011-7-18 00:00 编辑 ]

授人以渔,不授人以鱼。
2011-07-17 23:49
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
哎,基本功不扎实啊。明天早上要早起出门旅游,回来可能是五天后了,不知道最近学的到时候还记得多少
2011-07-18 00:03
快速回复:请教两个修改表结构和组合框数据绑定的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048205 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved