小弟初学delphi,请大虾指教。
以下是小弟的程序,我在程序中使用table控件将cacheupdate设为true;
当使用 table1.delete;后
再调用 table1.applyupdates;就会发生一个错误。index in read only;
还有就是在table中用findkey进行查找是不是那个表(tablename)必须是要建立一个索引啊,能不能不建立索引呢。具体怎么做啊。谢谢。
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls,Addnew,DATAModle;type
TMainForm = class(TForm)
DBGrid1: TDBGrid;
Button_Add: TButton;
Button_Del: TButton;
Button_Ok: TButton;
Button_Find: TButton;
Button_Save: TButton;
procedure Button_DelClick(Sender: TObject);
procedure Button_OkClick(Sender: TObject);
procedure Button_AddClick(Sender: TObject);
procedure Button_SaveClick(Sender: TObject);
procedure Button_FindClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;
Change:Boolean;implementationuses Search;{$R *.dfm}procedure TMainForm.Button_DelClick(Sender: TObject);
begin
if DataModule1.Table1.IsEmpty=true then
exit
else
DataModule1.Table1.Delete;
Change:=True;
end;procedure TMainForm.Button_OkClick (Sender: TObject);
begin
if DataModule1.table1.state in [dsInsert, dsEdit] then
DataModule1.table1.post;
if Change=True then
begin
DataModule1.Table1.ApplyUpdates;
Change:=False;
end;
end;
procedure TMainForm.Button_AddClick(Sender: TObject);
begin
Application.CreateForm(TForm1, Form1);
end;
procedure TMainForm.Button_SaveClick(Sender: TObject);
begin
if DataModule1.table1.state in [dsInsert, dsEdit] then
DataModule1.table1.post;
if Change=True then
begin
DataModule1.Table1.ApplyUpdates;
Change:=False;
DataModule1.Table1.CommitUpdates;
end;
end;procedure TMainForm.Button_FindClick(Sender: TObject);
begin
Application.CreateForm(TSearchForm, SearchForm);
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
Change:=False;
end;end.
以下是小弟的程序,我在程序中使用table控件将cacheupdate设为true;
当使用 table1.delete;后
再调用 table1.applyupdates;就会发生一个错误。index in read only;
还有就是在table中用findkey进行查找是不是那个表(tablename)必须是要建立一个索引啊,能不能不建立索引呢。具体怎么做啊。谢谢。
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls,Addnew,DATAModle;type
TMainForm = class(TForm)
DBGrid1: TDBGrid;
Button_Add: TButton;
Button_Del: TButton;
Button_Ok: TButton;
Button_Find: TButton;
Button_Save: TButton;
procedure Button_DelClick(Sender: TObject);
procedure Button_OkClick(Sender: TObject);
procedure Button_AddClick(Sender: TObject);
procedure Button_SaveClick(Sender: TObject);
procedure Button_FindClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;
Change:Boolean;implementationuses Search;{$R *.dfm}procedure TMainForm.Button_DelClick(Sender: TObject);
begin
if DataModule1.Table1.IsEmpty=true then
exit
else
DataModule1.Table1.Delete;
Change:=True;
end;procedure TMainForm.Button_OkClick (Sender: TObject);
begin
if DataModule1.table1.state in [dsInsert, dsEdit] then
DataModule1.table1.post;
if Change=True then
begin
DataModule1.Table1.ApplyUpdates;
Change:=False;
end;
end;
procedure TMainForm.Button_AddClick(Sender: TObject);
begin
Application.CreateForm(TForm1, Form1);
end;
procedure TMainForm.Button_SaveClick(Sender: TObject);
begin
if DataModule1.table1.state in [dsInsert, dsEdit] then
DataModule1.table1.post;
if Change=True then
begin
DataModule1.Table1.ApplyUpdates;
Change:=False;
DataModule1.Table1.CommitUpdates;
end;
end;procedure TMainForm.Button_FindClick(Sender: TObject);
begin
Application.CreateForm(TSearchForm, SearchForm);
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
Change:=False;
end;end.
问题2、用Locate:
function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean; virtual;你也可以尝试用TQuery用SQL来查找。
可以写:table1.locate('ID',200,[]);
如果找到了,locate返回True,并移动指针到该记录,如果找不到则返回False.
这种情况你可以用Filter,这可能比较符合你的习惯.
如:table1.filter := 'city = '+#39+shanghai+#39+'and name='+#39+xxx+#39;
table1.filtered := true;注:
1、filter等同于sql的"select * from XXXX where..."
2、字符字段中可以使用通佩符%
3、无需索引
prior,first,last来移动指针,也可以用append,insert,delete来修改这个表。等你不需要这个查询时你只要 Filtered := False;就可以了。这种方法适合任何可以用TTable的数据库的场合。
table1.filter := 'city = '+#39+shanghai+#39+'and name='+#39+xxx+#39;
应为:
table1.filter := 'city = '+#39+'shanghai'+#39+'and name='+#39+'xxx'+#39;