var
count,fori,fontSize,AverageWidth : Integer;
begin
count := DBGrid.Columns.Count;
AverageWidth :=DBGrid.ClientWidth div count; for fori := count-1 downto 0 do
begin
DBGrid.Columns.Items[fori].Title.TitleButton := True;
case fori of
0,6..9 : fontSize := 8;
1..4 : fontSize := 2;
else
fontSize := 4;
end;
DBGrid.DataSource.DataSet.Edit;////这里报错:cannot modify a read-only dataset DBGrid.DataSource.DataSet.Fields.Fields[fori].DisplayWidth := AverageWidth div fontSize;
DBGrid.DataSource.DataSet.FieldByName('题名').Text :='突突突';
DBGrid.DataSource.DataSet.Next;
end;
end;问题:我想逐行把dbgrid里一个列的数据修改修改,然后赋值进去,但不改数据库.
怎么做呀?
count,fori,fontSize,AverageWidth : Integer;
begin
count := DBGrid.Columns.Count;
AverageWidth :=DBGrid.ClientWidth div count; for fori := count-1 downto 0 do
begin
DBGrid.Columns.Items[fori].Title.TitleButton := True;
case fori of
0,6..9 : fontSize := 8;
1..4 : fontSize := 2;
else
fontSize := 4;
end;
DBGrid.DataSource.DataSet.Edit;////这里报错:cannot modify a read-only dataset DBGrid.DataSource.DataSet.Fields.Fields[fori].DisplayWidth := AverageWidth div fontSize;
DBGrid.DataSource.DataSet.FieldByName('题名').Text :='突突突';
DBGrid.DataSource.DataSet.Next;
end;
end;问题:我想逐行把dbgrid里一个列的数据修改修改,然后赋值进去,但不改数据库.
怎么做呀?
解决方案 »
- 有谁安装过imageen3 我安装时提示File not found: 'jdapimin.obj',如何解决?
- [分享]窗体卷起来的小例子
- 帮忙把VC改成DELPHI,谢谢
- 加图片??
- ComboBox的简单问题
- 如何监控注册表
- ---------------------------------------------------------------------------超级简单,如何去读一个最新的文本文件,文件名称不确定
- 如何获取本机ip和网卡信息?
- 好久没有登录csdn了,看到了这个问题,发个帖子望大家多多参与,顺便散分
- 两个问题? 希望回答详细点谢谢!
- 在查询分析器上能正常 delphi上运行就出错 急急急急急急急急
- delphi7.0 用sim508模块实现手机上网的程序(AT指令) 谁有
有的数据集返回就是只读的,比如含有join等
你想改某一列,其实就是修改某一个字段,循环数据集,对该字段赋值,然后 Post
将AdoQuery 的 Lock Type 属性,设置成 ltBatchOptimistic,这样 Post 就不会存入数据库了
DBGrid.SumList.Active := True;然后就执行上面的方法了.
http://jian100305.host10.web-75.com/tech/questionlist.asp?q_ID=6
就提示Dataset not in edit or insert mode
procedure TfrmPaySearch.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
var
i:Integer;
begin
DBGrid.DataSource.DataSet.FieldByName('题名').Text :='突突突';
end;
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
////////////
ADOQuery1.Close;
ADOQuery1.ConnectionString:= 'Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=ttt;Data Source=(local)';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT Log FROM Tab ');
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.fieldbyname('Log').Text:='666';但如果使用ADODataSet1就不行,老报错
ADOConnection1.ConnectionString:= 'Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=ttt;Data Source=(local)';
ADODataSet1.Recordset:=ADOConnection1.Execute('SELECT Logw FROM Tab');
ADODataSet1.Open;
ADODataSet1.Edit;
ADODataSet1.FieldByName('Log').Text:='666';
DBGrid1.Fields[0].Text:='ddddddd';
可我的程序一直使用的ADODataSet,我要改为adoquery怕引起程序其他问题.
有什么好方法呀
Options.RequiredFields:=False;
这样读取数据库到客户端,就不回把相关字段属性读出来了。
设置
Options.RequiredFields:=False;
这样读取数据库到客户端,就不回把相关字段属性读出来了。
各位老大,这句话是谁的属性?
DBGrid1 ,ADODataSet1,ADOConnection1 他们3人都没有option属性,也没有RequiredFields属性呀?
代码往哪里加呀?下面是我的代码:
DBGrid1.ReadOnly:=False;
ADOConnection1.ConnectionString:= 'Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=YXLibraryDB;Data Source=(local)';
ADODataSet1.Recordset:=ADOConnection1.Execute('SELECT id FROM MainBiblioTab where UnitNum is not null and len(UnitNum)>2');
Options.RequiredFields:=False;
ADODataSet1.CanModify:=True;
ADODataSet1.Open; //adodataset就是不能修改文字.
ADODataSet1.Edit;
ADODataSet1.FieldByName('id').Text:='666';
begin
Edit;
FieldByName('题名').AsString := '凸凸凸';
Post;
Edit;//这句看情况可以添加进去
end;
begin
Edit; ///这里根本就不让编辑.............会报不可modify错误的..
FieldByName('题名').AsString := '凸凸凸';
Post;
Edit;//这句看情况可以添加进去
end;
投降了,只能使用ADOquery实现了.
完美的解决方案如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB, Grids, DBGrids;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOStoredProc: TADOStoredProc;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
MultiSql:WideString;
PageCurrent,PageSize,RowNum,PageCount,SumCount:Integer;
AddParam : TParameter;
begin
ADOStoredProc.Close;
ADOStoredProc.ConnectionString :='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=ttt;Data Source=(local)';
begin
ADOStoredProc.Parameters.Clear;
ADOStoredProc.ProcedureName := 'sp_PageView;1'; AddParam := ADOStoredProc.Parameters.AddParameter;
AddParam.Name := '@sql';
AddParam.DataType := ftWideString; AddParam := ADOStoredProc.Parameters.AddParameter;
AddParam.Name := '@PageCurrent';
AddParam.DataType := ftInteger; AddParam := ADOStoredProc.Parameters.AddParameter;
AddParam.Name := '@PageSize';
AddParam.DataType := ftInteger; AddParam := ADOStoredProc.Parameters.AddParameter;
AddParam.Name := '@PageCount';
AddParam.DataType := ftInteger;
AddParam.Direction := pdInputOutput; AddParam := ADOStoredProc.Parameters.AddParameter;
AddParam.Name := '@SumCount';
AddParam.DataType := ftInteger;
AddParam.Direction := pdInputOutput;
end;
MultiSql:='SELECT * FROM ttt';
PageCurrent:=1;
PageSize:=3;
RowNum:=1;
ADOStoredProc.Parameters.ParamByName('@sql').value:= MultiSql;
ADOStoredProc.Parameters.ParamByName('@PageCurrent').value:= PageCurrent;
ADOStoredProc.Parameters.ParamByName('@PageSize').value:= PageSize;
ADOStoredProc.Open;
try
PageCount := ADOStoredProc.Parameters.ParamByName('@PageCount').Value;
except
PageCount := -1;
end;
try
SumCount := ADOStoredProc.Parameters.ParamByName('@SumCount').Value;
except
SumCount := -1;
end;
//ShowMessage(IntToStr(PageCount)+inttostr(SumCount)); ADOQuery1.Recordset := ADOStoredProc.NextRecordset(RowNum);
ADOStoredProc.Close; begin//专门管修改dbgrip的显示内容的
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.fieldbyname('id').Text:='666';
end; end;
end.
datasource链接adoquery
adoquery对ADOStoredProc的连接在代码里写.