请教各位高手一个简单的新问题。(0分)

  • 主题发起人 主题发起人 szlgx
  • 开始时间 开始时间
S

szlgx

Unregistered / Unconfirmed
GUEST, unregistred user!
现在写一学校成绩管理软件,沿用以前的Visual Foxpro6.0的数据表。
表的结构如下:text.dbf
语文 数学... 总分 占位
50  50       1
40  40       2
35  45       2
30  30       4
... ... ...  
要求不改变数据表的物理顺序,根据总分索引或其它方法填写占位字段。以前在VF里面
我写了这样一个过程实现得很好,现在接触Delphi,但不知怎样实现,希望各位帮助。
因刚接触Delphi,所以请高手们最好附源码或详细的说明。
PROC PWC
PARA CS1,CS2,JS
ZF1=0
ZF2=0
GO TOP
FOR KK=1 TO JS
ZF1=&CS1
IF KK=1
REPL &CS2 WITH KK
ELSE
FWC=&CS2
SKIP
ZF2=&CS1
IF ZF1=ZF2
REPL &CS2 WITH FWC
ELSE
REPL &CS2 WITH KK
ENDI
ENDI
ENDF
RETU
调用时,只须
 SET FILT TO LEFT(BJ,2)=left(ary(Ii),2)
@1,18 say left(ary(II),2)
COUN TO KKK
INDEX ON -总分 TO TEMP
DO PWC WITH "总分","占位",KKK
SET INDEX TO
SET FILT TO
 
我好象在哪见你贴过,人家已答得很清楚了的, 怎么还贴?
还有,为什么没分?
 
to Kisber:
  以前是贴过一次,但回答得我不太明白,所以就又贴了一次,你是不是能回答得清楚
点,分数我一定补上。因为现在太急,分数已完。
 
沒分?誰幹?
 
不是我贪财,而是你吝啬,所以我不回答。
 
用下面的方法试试看:
用一个QUERY组件,程序如下:
1.设置QUERY1组件的sql属性为:SELECT * FROM text.dbf ORDER 总分 DESC
2.打开QUERY1组件的字段编辑器.添加所有的字段,并新建一个计算字段.
字段名就取order.字段类型为Integer.
3.在QUERY1的CALCULATE事件中写入如下程序.
query1order.value := query1.recno;
4.程序如下:
with query1 do
begin
Open; //执行query1中的查询语句.
First; //指向第一条记录
query1.edit; //把数据集设为编辑状态.
while not eof do
begin
FieldByName('占位').AsInteger := FieldByName('query1order').AsInteger;
Next;
end; //end while
Post; //把更新的数据写回数据库
end; //end with
按照上面的方法应该可以了.如果还有什么问题可以和我联系,我的qq是:58725510
 
to pjprobbi:
很感谢你的回答,但我看了一下代码,好象不能处理总分相等时,位次也相等。不过有
分时,一定给你加上。
 
可以用以下程序处理占位相等的情况:、
var
bookmark : TBookMark;//书签变量 
curr_total : extended;//当前总分
curr_no : Integer; //当前记录号
begin 
with query1 do
begin
close;
sql.clear;
sql.add('select * from text.dbf order by 总分 desc');
open;//执行查询
Edit;//把数据集设置为编辑状态
First;
while not eof do
begin
curr_total := fieldbyname('总分').AsFloat;
bookmark := Getbookmark//保存当前记录的书签
prior;
while (not eof) and (curr_total=fieldbyname('总分').AsFloat) do prior;
next;
curr_no := recno;//记下记录号
GotoBookmark(bookmark);//重新回到原来的位置
    fieldbyname('占位').AsInteger := curr_no;
next;//处理下一条记录
end;//end while
Post;//把对数据集的修改写回数据库
end;//end with
end;
 
to pjprobbi:
你说的在QUERY1的CALCULATE事件中写入如下程序.
query1order.value := query1.recno;
我怎么找不到?
 
to:szlgx
大哥你分析一下吗!这个Query1Order只不过是一个代词!(它是指你用Query控件打开的
数据库里面的一个要进行设置的的排序号)
 
to yuzhizhi:
我说的是Query1的Calculate事件哪里找.
 
to szlgx:
改正错误:不是Calculate事件,而是OncalcFields事件,这个事件是当数据集中有
计算字段时触发,触发这个事件还需把query的AutoCalcFields的属性设为True;
这个操作用不着计算字段。用我下面写的一段程序就行了。如果还有什么问题
可以继续讨论。
 
接受答案了.
 
后退
顶部