在程序中我使用了两个query组件和一个table组件,
我的目的是将别名为class中的‘教学任务’表中的‘专业名称’一栏中的数据,转换为相应的专业编号,存入别名为shiyan中的‘教学任务’表中的‘专业编号’一栏中。但是在动态的对数据表进行操作时,没有任何的响应,也不引发数据库方面的操作异常,异常名为:edatabaseerror。
不管是对table组件还是对query组件进行开关或者是类似post的操作都会产生‘inaccessible value’的错误提示,我不知道问题出在哪里,我想应该是一个设置问题,因为在对数据表进行静态连接的时候,可以正常的看到数据表中的数据,可一旦在程序中进行修改,就出现这个问题。
两个Query组件的设置如下:
active:true
Cachedupdates:true
Constrained:false
Databasename:class
Sql:qurey1:select * from 教学任务.db
Query2:select * from 专业表.db
Table组件的属性设置如下:
Active:true
Cachedupdates:true
Databasename:shiyan
Tablename:教学任务.db
这个程序的目的是用query2查询某一个专业,在用户选择后,将该专业的课程情况调出来。(因为无法正常运行,所以我直接调用整个数据表,这部分代码我没有写)在dbgrid组件中显示出来,然后用table组件将每一条记录中的专业名称转换为专业编号。
这个课题在上学期就应该做的,但她只是把数据录入进去了,可她只把数据录入了一部分,所以我在她的基础上重新录入数据,所以表中有‘专业名’一栏,我想把它转换成专业编号,以减少数据冗余,但数据组件就是不能正常工作。下面是一个数据转换程序的代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, DBTables, StdCtrls, Mask, DBCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Query1: TQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
DataSource2: TDataSource;
Table1: TTable;
Query2: TQuery;
DataSource3: TDataSource;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
num,i,zhyh:integer;
zhym:string;
begin
num:=query1.RecordCount;
for i:=0 to num-1 do
begin
zhym:=query1.FieldByName('专业').AsString;
if zhym<>'' then
zhyh:=query2.Lookup('专业名称',zhym,'专业编号');
table1.Edit;
if zhyh<>0 then
table1.FieldByName('专业编号').AsInteger:=zhyh;
table1.Post;//单步调试时,此处显示inaccessible value
query1.Next;
end;
showmessage('it is good!');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;end.
begin
zhym:=query1.FieldByName('专业').AsString;
if zhym<>'' then
zhyh:=query2.Lookup('专业名称',zhym,'专业编号');
table1.Edit;
if zhyh<>0 then
table1.FieldByName('专业编号').AsInteger:=zhyh;
table1.Post;//单步调试时,此处显示inaccessible value
query1.Next;
end;
1。if zhym<>'' then,那么if zhym=''呢?
table1.FieldByName('专业编号').AsInteger:=zhyh; //='',这句肯定出错!
2。光query1.Next,这样改变的始终是table1的某一条纪录
先捋顺思路,感觉你的程序很混乱,连基本的格式都没搞明白别着急,慢慢来,
俺也是应届的,呵呵
楼主那里的?有什么问题发短信给我吧
Table.FieldByName('专业编号').AsInteger:=zhyh;有误
类型不匹配。
Table.FieldByName('专业编号').AsInteger 是integer类型。
而zhyh = ''是string类型。 不匹配啊!