怎样给DbGrid加上行号,行号要自动生成,随记录的增减自动调整,
从1开始的连续不间断整数。我用的是adoquery,请高手指点,关键
问题是在增加的时候要自动的加上行号,这方面难度很大,我先出
100分,等问题解决后再出200分,决不失言!!!!看好这300分的高
手来出帮小弟一下吧!!!
从1开始的连续不间断整数。我用的是adoquery,请高手指点,关键
问题是在增加的时候要自动的加上行号,这方面难度很大,我先出
100分,等问题解决后再出200分,决不失言!!!!看好这300分的高
手来出帮小弟一下吧!!!
假设现在有100行记录,其中现在删除了30,51,79这三行!
当删除(afterdelete)这三行的每行时,用一个临时表(tempDelete)把它的行号记录下来,然后在新增加记录的时候去tempDelete找出一个最小的行号,当这条记录(AfterPost)后,从tempDelete
表中删除这条相应的记录。
当新增加记录时tempDelete表中没记录时,说明没有从中间删除过数据,这样就取当前表的最大行号加1就可以了!
我想应该是可以的,代码写起来也不麻烦!你试试看吧,不行再发消息给我!
1:ADOQuery建立連接,編寫SQL語句; (這點我就不說了吧)
2:為ADOQuery中的檢索字段建立永久性字段;//雙擊ADOQUERY,彈出框,右鍵,Add All Fields
3:再在永久性字段中建立一計算字段,在此我們假定為RecordNo;//右鍵,New Fields,Type:Integer,Field Type:Calculated
4:在ADOQuery的OnCalcFields事件中編寫代碼:
ADOQuery1.FieldByName('RecordNo').AsInteger := ADOQuery1.RecNo;至此完成
var
i:integer;
s:string;
begin
with Frm_data.ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('Select * from user_info where user_identity=:t1');
Parameters[0].Value:='学生';
Open;
i:=200;
while not eof do
begin
s:=FieldByName('Id').AsString;
with Frm_data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Update User_info set User_code=:t1 where Id=:t2');
Parameters[0].Value:=IntToStr(i);
Parameters[1].Value:=S;
ExecSQL;
end;
i:=i+1;
Next;
end;
end;
end;
突然有人插队了:)
老兄你能看清我问题吗,我关键是新增时也要显示行,你这种做好在浏览里是可以的,但到
新增时会全部变为-1,我试过好几次了
大家发言!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
begin
with qryTool do
begin
Close;
SQL.Clear;
SQL.Add('insert into delete1 values ('''+IntToStr(qryData.FieldByName('ID').AsInteger)+''')');
Execsql;
end;
end;procedure TForm1.qryDataNewRecord(DataSet: TDataSet);
begin
with qryTool do
begin
Close;
SQL.Clear;
SQL.Add('select min(ID) as id from delete1');
SQL.Add('where id <> "0"');
Open;
end;
if qryTool.FieldByName('ID').AsInteger <> 0 then
begin
qryDataId.AsInteger := qryTool.FieldByName('ID').AsInteger;
qryDataName.AsString := '';
end
else
begin
with qryTool do
begin
Close;
SQL.Clear;
SQL.Add('select max(ID) as id from id ');
Open;
end;
qryDataId.AsInteger := qryTool.FieldByName('ID').AsInteger + 1;
qryDataName.AsString := '';
end;
edtName.SetFocus;
end;procedure TForm1.qryDataBeforePost(DataSet: TDataSet);
begin
with qryTool do
begin
Close;
SQL.Clear;
SQL.Add('delete from delete1');
SQL.Add('where ID = '''+IntToStr(qryData.FieldByName('ID').AsInteger)+'''');
Execsql;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
qryData.Open;
end;最简单的,调试通过了!
所有代码都在这了!
你的信箱我把邮件发给你就是