DELPHI连接ORACLE数据库,向表里写入数据的时候,会提示错误“ORA_01536:超出表空间‘USERS’的空间限量“,请问是怎么回事?
问题是发生在数据库方面还是程序方面?程序执行时,可以插入一个或两个,但是到了后面就出这样的错误。
如何改正这个错误?
源码如下:
ADOQuery3.SQL.Text :='select * from wssp_attachment where ItemObjectID=''' + ADOQuery1.fieldByName('ItemObjectID').AsString + '''';
                    ADOQuery3.Open ;
                    if not ADOQuery3.Eof then
                    begin
                        ADOQuery2.SQL.Text :='select * from wssp_attachment where ItemObjectID=''' + ADOQuery1.fieldByName('ItemObjectID').AsString + '''' ;
                        ADOQuery2.Open ;
                        if ADOQuery2.Eof then
                        begin
                            TranSql:='insert into TranLog(TransDatetime, WorkDescribe) values(GetDate(),'''+'开始传送' + ADOQuery1.fieldByName('ItemObjectID').asstring + '的附件'+ ''')' ;
                            SQLConn.Execute(TranSql);
                            for j:=1 to ADOQuery3.RecordCount do
                            begin
                                TranSql:='insert into TranLog(TransDatetime, WorkDescribe) values(GetDate(),'''+ADOQuery3.fieldByName('AttachmentID').asstring + '传送开始'+ ''')' ;
                                SQLConn.Execute(TranSql);                                ADOQuery2.Append ;
                                ADOQuery2.FieldByName('ItemObjectID').AsString :=ADOQuery3.fieldByName('ItemObjectID').AsString ;
                                ADOQuery2.FieldByName('AttachmentID').AsString :=ADOQuery3.fieldByName('AttachmentID').AsString ;
                                ADOQuery2.FieldByName('AttachmentTitle').AsString:= ADOQuery3.fieldByName('AttachmentTitle').AsString ;
                                ADOQuery2.FieldByName('AttachmenType').AsString := ADOQuery3.fieldByName('AttachmentType').AsString ;
                                stream.clear;
                                TBlobField(ADOQuery3.FieldByName('Attachment')).SaveToStream(stream);
                                TBlobField(ADOQuery2.FieldByName('Attachment')).LoadFromStream(Stream);
                                showmessage(ADOQuery3.fieldByName('ItemObjectID').AsString +' '+ ADOQuery3.fieldByName('AttachmentID').AsString+' '+ADOQuery3.fieldByName('AttachmentTitle').AsString+' '+ADOQuery3.fieldByName('AttachmentType').AsString);
                                ADOQuery2.Post ;                                TranSql:='insert into TranLog(TransDatetime, WorkDescribe) values(GetDate(),'''+ADOQuery3.fieldByName('AttachmentID').asstring + '传送完毕'+ ''')' ;
                                SQLConn.Execute(TranSql);
                                ADOQuery3.Next ;
                                if ADOQuery3.Eof then break;
                            end;                        end;

解决方案 »

  1.   

    数据库不在我这边,我无法查看数据库。
    在一个月以前使用过这段程序,发现是正常的。但是这次就发生了这样的错误。
    我问过管理数据库的人,说数据库没有重新做。不可能有限制表空间。
    难道ORACLE中可以调整数据表的大小吗?我觉的不可能啊。
      

  2.   

    读了你上述的程序,感觉你犯了二点大忌.1.不应该三个ADOQuery的字段内容混一块用。一起打開占用内存太大。
      如:多次用到「ADOQuery1.fieldByName('ItemObjectID').AsString」
      可把它付给一个变量 
      var Query1_Id: String;
      Query1_Id := ADOQuery1.fieldByName('ItemObjectID').AsString;
     然后关闭ADOQuery1,节省占用内存。2.不要对「SELECT SQL」语句直接用「Append」如:ADOQuery2.Append;
      可対表作「Append」或用「Insert」SQL语句。
      

  3.   

    增加数据文件,加大表空间
    alter tablespace users add datafile 'c:\oracle\oradata\users.dbf' size 200m autoextend on next 10m maxsize 500m;