在DELPHI程序里,从SQL SERVER2000取出数据,然后通过一个循环写到ORALCE的表里,循环大约405条记录时,提示错误:
ORA-12571:TNS:包写入程序失败我用FOXPRO将一个20000多行的表通过循环写到ORACLE,能将所有记录写入ORACLE,表明ORACLE数据库和网络是正常的。为什么通过DELPHI写入ORACLE时提示错误?请问如何为什么?如何解决?我的程序代码如下:procedure Tform_liqun.Button4Click(Sender: TObject);
var
  bm:TBookMark;
begin
  inherited;
  to_ora.Connection:=datamodule2.to_oracle_database;
  with to_ora do
  begin
    sql.Clear;
    sql.Add('delete from table1');
    try
      execsql;
    except
      button4.Enabled:=false;
      showmessage('删除ORA(table1)时出现错误');
      exit;
    end;
  end;
  with to_sql_server do
  begin
    First;
    bm:=GetBook;
  end;
  while not to_sql_server.Eof do begin
    with to_ora do
    begin
      sql.Clear;
      sql.Add('INSERT INTO table1 VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7');
      parameters.ParamByName('a1').Value:=dbgrid1.DataSource.DataSet.FieldByName('订单流水号').AsString;
      parameters.ParamByName('a2').Value:=dbgrid1.DataSource.DataSet.FieldByName('申请日期').AsString;
      parameters.ParamByName('a3').Value:=dbgrid1.DataSource.DataSet.FieldByName('完工时间').AsString;
      parameters.ParamByName('a4').Value:=dbgrid1.DataSource.DataSet.FieldByName('业务号码').AsString;
      parameters.ParamByName('a5').Value:=dbgrid1.DataSource.DataSet.FieldByName('商品规格').AsString;
      parameters.ParamByName('a6').Value:=dbgrid1.DataSource.DataSet.FieldByName('商品规格1').AsString;
      parameters.ParamByName('a7').Value:=dbgrid1.DataSource.DataSet.FieldByName('受理班组').AsString;
      try
        execsql;
      except
        button4.Enabled:=false;
        ShowMessage('插入ORA(table1)时出现错误).');
        Exit;
      end;
    end;
    to_sql_server.Next;
  end;
  with to_sql_server do
  begin
    GotoBook(bm);
    FreeBook(bm);
    first;
  end;
  button4.Enabled:=false;
  showmessage('sql server2000上的数据已导入ORA(table1)');
end;

解决方案 »

  1.   

    没用过delphi,不过看了你的代码逻辑,没有commit操作吗?可不可以在中间,比如每隔50条,执行一次commit啊。当然,这个似乎不是那么重要了,我看到了一行:sql.Add('INSERT INTO table1 VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7');
    难道不应该是:
    sql.Add('INSERT INTO table1 VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7)');
      

  2.   

    不用commit就能提交的,前405条记录都提交正常的,第406条才提示错误。sql.Add('INSERT INTO table1 VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7)');
    这条语句,是因为提交到论坛时楼了一个右括号,实际程序里没有错。
      

  3.   

    TNS:包写入程序失败
    TNSPING下你的服务名...看解析是否正确..