谁能帮我看一下这段程序?(150分)

  • 主题发起人 主题发起人 小天
  • 开始时间 开始时间

小天

Unregistered / Unconfirmed
GUEST, unregistred user!
function AppendTable(TableName:string;CDS:TTable):boolean;
var table1:TTable;
i:integer;
f:boolean;
begin
f:=true;
try
table1:=TTable.create(nil);
table1.DatabaseName:='MyDatabase';
table1.TableName:=TableName;
table1.open;
table1.First;
CDS.Open;
CDS.Last;
while not table1.Eof do
begin
CDS.Append;
for i:=0 to table1.FieldCount-1 do
if (table1.fields.isnull)or(string(table1.fields.AsVariant)='')
then if not table1.fields.isnull
then CDS.fields.AsVariant:=''
else CDS.fields.AsString:=''
else CDS.fields.AsVariant:=table1.fields.AsVariant;
CDS.Post;
table1.Next;
end;
CDS.Close;
table1.close;
table1.free;
except
f:=false;
end;
result:=f;
end;

功能:把一个database中的table的内容追加到另一个database中相同结构的table中
出错位置:for i:=0 to table1.FieldCount-1 do
if (table1.fields.isnull)or(string(table1.fields.AsVariant)='')
then if not table1.fields.isnull
then CDS.fields.AsVariant:=''
else CDS.fields.AsString:=''
else CDS.fields.AsVariant:=table1.fields.AsVariant;
出错估计:是不是AsVariant对空字段等无法判断或无法转换?
紧急求援:谁能帮我优化一下出错处的代码?
 
我试了一下,
没问题呀!

能把你的出错信息报一下吗?
 
出错信息就是跳出TRY
原因有很多,比如datetime型字段,如空字段等,情况很复杂,
我不知道还会有什么其他类型的字段会出错,但至少以上两种我就解决不了了
:—(
 
这就奇怪了,
我用了datetime型字段,也用了空字段,
运行正确呀。
噢,我试的是paradox,
你是什么数据库呀?
 
嘿嘿, 重新启动一下机器试试;-)
 
这个程序我试过好多次了,
忘说明了,是从paradox库追加到SQL Server库
 
小天,你用TBatchMove不就得啦!

还有,你的程序里按字段顺序来赋值,能保证字段顺序一致吗?
 
李颖:顺序肯定一致的,不用batchmove也有我的原因
AMO:是不是paradox和sql serer字段类型不一样?
 
字段域不能为“空”。正如你所说的,问题就在于此。
我在编程时也遇到过此,不得不用"-"来代表那个“空”值。
 
应该是AsVariant对空字段等无法判断或无法转换.
程序直接这样写不行吗?
if not table1.fields.isnull
CDS.fields.AsVariant:=table1.fields.AsVariant;

 
干嘛不用TQuery写语句呢,一句Insert into table1 select * from table2就解决了。
 
tanglu :他是从paradox库追加到SQL Server库,所以不能啦!
 
还有没有办法?
 
DestField.Assign(SourceField)
试试看
 
try:

if (table1.fields.isnull)or(VarToStr(table1.fields.AsVariant))='') then
 
多人接受答案了。
 
后退
顶部