起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: lili7912

【搞定】ExcuteSQL:For input string "1986-3-1"类型:Exception**

[复制链接]
 楼主| 发表于 2006-11-28 10:54:55 | 显示全部楼层
可能没有签入的原因,对不起。
test.rar我导入不了,出现格式不对。

tableJBxx.rar

1.14 MB, 下载次数: 45

回复 支持 反对

使用道具 举报

发表于 2006-11-28 11:03:19 | 显示全部楼层
“导入格式不对”是因为我用的版本可能比你用的版本底好像是2403到的;只要用一个老版本的导入工具就可以导入新版本里了。我再导入时报如下错误:
=========================================================
5:        失败        11:02:41
任务执行完毕,在执行过程中产生 4 个错误。
详细信息:
==========================================================4:        失败        11:02:21
复制业务模型对象 (BIZ2:\YTSBGLXT) 时发生了错误。错误信息: 错误类型:Exception
错误信息:对象BIZ:\YTSBGLXT\YTSBSJK.DATABASE\TABLE_SBJBXX.TABLE被签出,不能导入
错误描述:
详细信息:
==========================================================3:        失败        11:02:21
复制业务模型对象 (BIZ2:\YTSBGLXT) 时发生了错误。错误信息: 错误类型:Exception
错误信息:对象BIZ:\YTSBGLXT\CSGN\YWGN1.FUNC被签出,不能导入
错误描述:
详细信息:
==========================================================2:        失败        11:02:21
复制业务模型对象 (BIZ2:\YTSBGLXT\YTSBSJK.DATABASE\TABLE_SBJBXX.TABLE) 时发生了错误。错误信息: 错误类型:Exception
错误信息:对象BIZ:\YTSBGLXT\YTSBSJK.DATABASE\TABLE_SBJBXX.TABLE被签出,不能导入
错误描述:
详细信息:
==========================================================1:        失败        11:02:20
复制业务模型对象 (BIZ2:\YTSBGLXT\CSGN\YWGN1.FUNC) 时发生了错误。错误信息: 错误类型:Exception
错误信息:对象BIZ:\YTSBGLXT\CSGN\YWGN1.FUNC被签出,不能导入
错误描述:
详细信息:==========================================================
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-28 14:43:43 | 显示全部楼层
5楼上已说过,是因为升到2603以后出现的问题,在原版本2401中1楼的代码没有问题。
回复 支持 反对

使用道具 举报

发表于 2006-11-28 17:09:18 | 显示全部楼层
我在本地高版本中作了测试,的确存在问题。请在代码段  
QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);
后面  end; 之前加上如下语句:      
if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
        QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
如果还不行请及时回复;该代码已经在高底版本中均测试通过!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-29 08:34:58 | 显示全部楼层
代码如下,仍然有问题,问题一样。
While not query2.Eof do
  begin
    for I := 0 to lFieldList.Count - 1 do
    begin
      if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
      begin
        //Dialogs.ShowMessage(lFieldList[I].DisplayName+lFieldList[I].AsString);
        QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
      end;
      QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);
    end;

    QueryInsert.Execute;
    query2.Next;
  end ;

改成下面的代码,仍然有问题,问题一样

  While not query2.Eof do
  begin
    for I := 0 to lFieldList.Count - 1 do
    begin
      if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
      begin
        //Dialogs.ShowMessage(lFieldList[I].DisplayName+lFieldList[I].AsString);
        QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
        QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].AsDateTime);
      end
      else begin
        QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);
      end;
    end;

    QueryInsert.Execute;
    query2.Next;
  end ;
回复 支持 反对

使用道具 举报

发表于 2006-11-30 16:27:42 | 显示全部楼层
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
   lFields,lValues,lInsertSQL:String;
   i:integer;
   lFieldList:TFieldList;
begin
    Query1.LoadFromFile('C:\a.xml');
    lFields:='';
    lValues:='';
  for i:=0 to Query1.FieldCount-1 do
  begin
    if (i<Query1.FieldCount-1) then
    begin
     lFields:=lFields+Query1.FieldList.FieldName+',';
     lValues:=lValues+':'+Query1.FieldList.FieldName+',' ;
    end
    else begin
      lFields:=lFields+Query1.FieldList.FieldName ;
      lValues:=lValues+':'+Query1.FieldList.FieldName;
    end
  end;
  lFields:='('+lFields+')';
  lValues:='Values('+lValues+')';
  lInsertSQL:='Insert into testA '+lFields+' '+lValues;
  QueryInsert.CommandText:=lInsertSQL;
  lFieldList:=Query1.FieldList;
  While not Query1.Eof do
  begin
    for I := 0 to lFieldList.Count - 1 do
    begin
      QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);
      if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
        QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
    end;
    QueryInsert.Execute;
    Query1.Next;
  end ;
end;

procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
  if not query1.Active then query1.Open;
  query1.SaveToFile('C:\a.xml',business.Data.TDataPacketFormat.dfXML);
end;


以上是我在本地测试的代码,在没有加if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
        QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
时再高版本下运行就报错。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-30 17:05:13 | 显示全部楼层
Query2.LoadFromFile('E:        able_sbjbxx.xml');
  lFields:='';
  lValues:='';
  for i:=0 to query2.FieldCount-1 do
  begin
    if (i<query2.FieldCount-1) then
    begin
     lFields:=lFields+query2.FieldList.FieldName+',';
     lValues:=lValues+':'+query2.FieldList.FieldName+',' ;
    end
    else begin
      lFields:=lFields+query2.FieldList.FieldName ;
      lValues:=lValues+':'+query2.FieldList.FieldName;
    end
  end;
  lFields:='('+lFields+')';
  lValues:='Values('+lValues+')';
  lInsertSQL:='Insert into table_sbjbxx '+lFields+' '+lValues;
  QueryInsert.CommandText:=lInsertSQL;
  lFieldList:=query2.FieldList;
  While not query2.Eof do
  begin
    for I := 0 to lFieldList.Count - 1 do
    begin
      QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);
      if lFieldList[I].DataType=Business.Data.TFieldType.ftTimeStamp then
         QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
     end;
    QueryInsert.Execute;
    query2.Next;
  end ;
修改后出现如下问题:

empty.jpg

11.29 KB, 下载次数: 160

回复 支持 反对

使用道具 举报

发表于 2006-12-1 15:14:28 | 显示全部楼层
由于升级后TQuery的更新机制发生了变化。
TQuery参数无法自动区分数据类型,所以需要做类似如下处理。
也就是将上面为TQuery参数赋值的那一句
QueryInsert.Params.AssignFieldValue(lFieldList[I],lFieldList[I].Value);替换为下面的逻辑:
      case lFieldList[I].DataType of
        Business.Data.TFieldType.ftTimeStamp:
        begin
          QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftDateTime;
          QueryInsert.Params[I].AsDateTime := lFieldList[I].AsDateTime;
        end;
        Business.Data.TFieldType.ftFMTBcd:
        begin
          QueryInsert.Params[I].DataType := Business.Data.TFieldType.ftFMTBcd;
          QueryInsert.Params[I].AsFloat := lFieldList[I].AsFloat;
        end;
        {若源数据表还有别的字段类型,也需要处理一下}
      else
        QueryInsert.Params[I].DataType := TFieldType.ftString;
        QueryInsert.Params[I].AssignFieldValue(lFieldList[I],lFieldList[I].Value);
      end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 09:20:06 | 显示全部楼层
Business.Data.TFieldType.ftOraBlob类型如何处理
回复 支持 反对

使用道具 举报

发表于 2006-12-4 16:09:53 | 显示全部楼层
楼主先不要急着改,这一问题可能跟版本有关,结果还在处理中!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 12:06 , Processed in 0.040421 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表