在程序中我使用了两个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.

解决方案 »

  1.   

    这些应该是正常的,我想知道怎样,不用post该怎麽实现自动更新!最好有例子!
      

  2.   

    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;
    1。if zhym<>'' then,那么if zhym=''呢?
       table1.FieldByName('专业编号').AsInteger:=zhyh; //='',这句肯定出错!
    2。光query1.Next,这样改变的始终是table1的某一条纪录
    先捋顺思路,感觉你的程序很混乱,连基本的格式都没搞明白别着急,慢慢来,
    俺也是应届的,呵呵
    楼主那里的?有什么问题发短信给我吧
      

  3.   

    同意楼上。
    Table.FieldByName('专业编号').AsInteger:=zhyh;有误
    类型不匹配。
    Table.FieldByName('专业编号').AsInteger 是integer类型。
    而zhyh = ''是string类型。  不匹配啊!