内存表如果没有Provider或者数据库表,不能执行SQL语句。因为是三层结构,客户端不跟数据库交互,所有数据源均由中间层传来的XML流解析得到。故TClientDataSet是完完全全的内存表请问能实现排序吗??
解决方案 »
- bmp保存不能显示
- 如何打印出这样的报表啊!!!! 分类 小计!!!!!!急 急急!!!!!!
- 请问如何在richedit中屏蔽Backspace键(不是空格,是删除键)?
- 在webbrowser中如何设置jre?UP给分
- [散分100]请大家试用我的小软件MySpy,但功能非常强大.......
- ◆◆◆急需解决一个socket循环连接的问题◆◆◆
- 谁知道有好的用delphi开发的jabber客户端端不?
- 简单问题,解决马上给分!!!
- 如何实现这样的功能?请高人指点,急急,在线等
- 操作注册表问题 AReg.RootKey:=HKEY_LOCAL_MACHINE;
- 使用FieldByName来更新数据纪录,程序调试通过,但是为什么记录没有被更新
- 求DELPHI能用的压缩率最大的算法?我用来压缩BMP。
begin
ClientDataSet1.Active := false;
ClientDataSet1.IndexFieldNames := 'Field_Name';
ClientDataSet1.Active := true;
end;
var SavePlace: TBook;
begin
with ClientDataSet1 do
begin
SavePlace := GetBook;
try
Active := false;
IndexFieldNames := 'id';
Active := true;
GotoBook(SavePlace);
finally
FreeBook(SavePlace);
end;
end;
end;
{注:用TBook}
begin
DataSet.FieldByName(计算字段名字).AsInteger := DataSet.RecNo;
end;
重新排序時、行号就会自動重排...
var cds:TClientDataSet;cds:=TClientDataSet.create(nil);
with cds.FieldDefs.AddFieldDef do begin
Name:='ORDER';
dataType:=ftInteger;
end;//创建其他列cds.createDataSet;cds.Fields[0].FieldKind:=fkCalculated;//到这一句出错
cds.Active := true;
cds.Fields[0].DisplayLabel:='行号';
cds.Fields[0].Visible:=True;
cds.Fields[0].DisplayWidth:=5;
//...在上面注释出错处提示:Cannot do this operation on an open dataSet.
于是我在那句之前加上cds.Active:=false;
可依然出错,提示:Out of bounds(0)请问这是什么原因?谢谢!!
cds: TClientDataSet;
Field: TField;
begin
cds := TClientDataSet.create(nil);
Field := TIntegerField.Create(cds);
Field.FieldName := 'ORDER';
Field.DataSet := cds;
Field.FieldKind := fkCalculated;
Field.DisplayLabel:='行号';
Field.DisplayWidth :=5; with cds.FieldDefs.AddFieldDef do begin
Name := 'ORDER';
dataType := ftInteger;
end;
cds.createDataSet;
//……
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
cds: TClientDataSet;
Field: TField;
begin
cds := TClientDataSet.create(nil);
Field := TIntegerField.Create(cds);
Field.FieldName := 'ORDER';
Field.DataSet := cds;
Field.FieldKind := fkCalculated;
Field.DisplayLabel:='行号';
Field.DisplayWidth :=5; with cds.FieldDefs.AddFieldDef do begin
Name := 'ORDER';
dataType := ftInteger;
end;
Filed.destroy;//发现此处若不Destroy掉后面将不能再加入其他列了! //加入其他列
cds.createDataSet; showmessage(BoolToStr(cds.Fields[0].FieldKind=fkCalculated));//结果为0,说明上段代码并未将Field实质性的加入数据集中,并且在DBGrid中也不会显示DisplayLabel而是'ORDER',说明整个定义Field的过程并没有起到作用,也就不能触发OnCalcFields事件。
//……
end;希望能继续解答这个问题,谢谢!!
如果用ehlib控件里的DbGridEh(在TitleBtnClick中加入这过程就行).
procedure dgsort(Column: TColumnEh); //DbGridEh. 如果是DbGrid则是TColumn
const
cnUpArrow='↑';
cnDownArrow='↓';
procedure ClearArrow(Column: TColumnEh);
const
cnArrowLen=2;
var
i, iPos : integer;
sTmp : string;
begin
with Column.Grid as TDBGridEh do begin
for i:= 0 to Columns.Count -1 do begin
sTmp := Columns.Items[i].Title.Caption;
if sTmp='' then
Continue;
iPos := Pos(cnUpArrow,sTmp);
if (iPos<>0)and(iPos<=cnArrowLen) then begin
sTmp := Copy(sTmp,cnArrowLen+1,High(Integer));
Columns.Items[i].Title.Caption := sTmp;
end
else begin
iPos := Pos(cnDownArrow,sTmp);
if (iPos<>0)and(iPos<=cnArrowLen) then
sTmp := Copy(sTmp,cnArrowLen+1,High(Integer));
Columns.Items[i].Title.Caption := sTmp;
end;
end;
end;
end;
begin
if not Assigned(Column.Grid.DataSource) then Exit;
if not Assigned(Column.Grid.DataSource.DataSet) then Exit;
with (Column.Grid.DataSource.DataSet as TClientDataset) do
begin
ClearArrow(Column);
if Pos('IndexDesc',IndexName)<>0 then
begin
AddIndex(Column.FieldName + 'Index', Column.FieldName, [],'', '', 0);
IndexName := Column.FieldName + 'Index';
Column.Title.Caption :=cnDownArrow+ Column.Title.Caption;
end
else
begin
AddIndex(Column.FieldName + 'IndexDesc', Column.FieldName, [ixDescending],'', '', 0);
IndexName := Column.FieldName + 'IndexDesc';
Column.Title.Caption :=cnUpArrow+ Column.Title.Caption;
end;
end;end;