就是一段代码,就是根据数据库内容初始化一系列combobox的值,但是程序运行总是报错:
Exception...
  Date   : 2003-6-5 16:39:04
  Address: 005178E1
  Module : stk.exe
  Type   : EAccessViolation
  Message: Access violation at address 005178E1 in module 'stk.exe'. Read of address 0000033C程序代码如下:
procedure Ttystk.N21Click(Sender: TObject);
var
id:integer;
begin
  with zdsj do
  begin
    query1.SQL.Clear;
    query1.SQL.Text:='select kmmc from 科目表.db';
    query1.Open;
    s_km.Clear;
    s_km.Items.Add('');
    for id:=1 to query1.recordcount do
    begin
      s_km.Items.Add(query1.fieldbyname('kmmc').AsString);
      query1.Next;
    end;    query1.SQL.Clear;
    query1.SQL.Text:='select ndmc from 难度表.db';
    query1.Open;
    s_nd.Clear;
    s_nd.Items.Add('');
    for id:=1 to query1.RecordCount do
    begin
      s_nd.Items.Add(query1.fieldbyname('ndmc').AsString);
      query1.Next;
    end;    query1.SQL.Clear;
    query1.SQL.Text:='select txmc from 题型表.db';
    query1.Open;
    s_tx.Clear;
    s_tx.Items.Add('');
    for id:=1 to query1.RecordCount do
    begin
      s_tx.Items.Add(query1.fieldbyname('txmc').AsString);
      query1.Next;
    end;  s_zj.Enabled:=false;
  s_tx.Enabled:=false;
  s_nd.Enabled:=false;
  s_no.Enabled:=false;
  Button1.Enabled:=false;
  Button2.Enabled:=false;
  count:=0;
  showmodal;
end;
end;

解决方案 »

  1.   

    先把
    s_tx.Clear;
    改成
    s_tx.Items.Clear;
      

  2.   

    with zdsj do
      begin
        query1.SQL.Clear;就是一开始的query1.SQL.Clear;出错,还有我的数据库都是定义好的啊,什么database里面的什么kut啊!!
    大家看看啊,什么错误啊!!
      

  3.   

    query1.close;
    --------------------------------------
    看!
    那支正飞向太阳的蛾子.....
    就是我!
    --------------------------------------
      

  4.   

    query1.SQL.Text:='...';
    query1.close;
    query1.Open;
      

  5.   

    没用的啊,先close还是老样子啊,这个是什么内存访问为例错误啊!!
      

  6.   

    ADO的connection或者connectionstring有没有设啊
      

  7.   

    with zdsj do前面加
    application.createForm(Tzdsj,zdsj);
      

  8.   

    把table连到database
    那就是database的connectionstring设好没有
      

  9.   

    设好的啊,那个什么bde数据源kut啊,在什么bde administrator里面设置的啊
      

  10.   

    先Colse,再Open,再Free,没看到你有内存管理阿?用Ctrl+F7跟踪下看看采集到的数。
      

  11.   

    你确定设好了吗?
    你的table是自己create还是拉在窗体上的
    你的database放在什么地方了,是不是datamodal
      

  12.   

    with zdsj do 前增加一句:
    if assigned(zdsj) then //确保窗体创建了才执行。
        for id:=1 to query1.recordcount do
        begin
          s_km.Items.Add(query1.fieldbyname('kmmc').AsString);
          query1.Next;
        end;
    改为如下看看:
        if not (query1.eof and query1.bof) then
        begin
           query1.first;
           while not query1.eof do
           begin
               s_km.Items.Add(query1.fieldbyname('kmmc').AsString);
               query1.Next; 
           end;
        end;
    其它的循环也改成这样。    
      

  13.   

    with zdsj do 前增加一句:
    if assigned(zdsj) then //确保窗体创建了才执行。
    再把如下for循环改一下:
        for id:=1 to query1.recordcount do
        begin
          s_km.Items.Add(query1.fieldbyname('kmmc').AsString);
          query1.Next;
        end;
    改为如下看看:
        if not (query1.eof and query1.bof) then
        begin
           query1.first;
           while not query1.eof do
           begin
               s_km.Items.Add(query1.fieldbyname('kmmc').AsString);
               query1.Next; 
           end;
        end;
    其它的循环也改成这样。
      

  14.   

    query1.SQL.Clear;前加一句query1.SQL.Close;试试
      

  15.   

    with zdsj do 前增加一句:
    if assigned(zdsj) then //确保窗体创建了才执行
       zdsj=tXXX.create;  //如果没有创建则创建zdsj;另外query1.sql.clear;前也增加一句: query1.close;