关于Memo类型数据的数据库转移问题
yaos 2006-05-14 01:09:06 一个数据库从Access转移到SQL2000
其中有Memo类型
使用下面函数逐个表转移
procedure CopyTable(SourceTable, DestTable: TADOTable; TableName: string);
var
i, j, sFieldCount, dFieldCount: integer;
sFiledName, dFieldName: string;
FieldNameList: TStrings;
MemoryStream: TMemoryStream;
tmp: String;
begin
SourceTable.Close;
DestTable.Close;
SourceTable.TableName := TableName;
DestTable.TableName := TableName;
SourceTable.Open;
DestTable.Open;
sFieldCount := SourceTable.FieldCount;
dFieldCount := DestTable.FieldCount;
FieldNameList := TStringList.Create;
for i := 0 to sFieldCount - 1 do
for j := 0 to dFieldCount - 1 do
if UpperCase(Sourcetable.Fields[i].FieldName) = UpperCase(DestTable.Fields[j].FieldName) then
begin
FieldNameList.Add(Sourcetable.Fields[i].FieldName);
break;
end;
Sourcetable.First;
while not Sourcetable.Eof do
begin
DestTable.Insert;
for i := 0 to FieldNameList.Count - 1 do
if DestTable.FieldList.FieldByName(FieldNameList[i]).CanModify then
if not SourceTable.FieldByName(FieldNameList[i]).IsNull then
begin
case DestTable.FieldList.FieldByName(FieldNameList[i]).DataType of
ftBlob:
begin
MemoryStream := TMemoryStream.Create;
TBlobField(SourceTable.FieldByName(FieldNameList[i])).SaveToStream(MemoryStream);
MemoryStream.Position := 0;
TBlobField(DestTable.FieldByName(FieldNameList[i])).LoadFromStream(MemoryStream);
MemoryStream.Free;
end;
ftmemo:
begin
MemoryStream := TMemoryStream.Create;
TMemoField(SourceTable.FieldByName(FieldNameList[i])).SaveToStream(MemoryStream);
MemoryStream.Position := 0;
TMemoField(DestTable.FieldByName(FieldNameList[i])).LoadFromStream(MemoryStream);
MemoryStream.Free;
if DestTable.FieldByName(FieldNameList[i]).IsNull then // (1)
DestTable.FieldByName(FieldNameList[i]).AsString := ' '; // (2)
end;
else
begin
tmp := SourceTable.FieldByName(FieldNameList[i]).AsString;
DestTable.FieldByName(FieldNameList[i]).AsString := tmp;
end;
end;
end;
Sourcetable.Next;
end;
SourceTable.First;
SourceTable.Close;
DestTable.Post;
DestTable.First;
DestTable.Close;
FieldNameList.Free;
end;
Access表有字段为Memo型, 转移到SQL为Text型
为必须字段 不能为空
但原始Access表为空字符 ""
如果不加(1)(2)句 则拷贝过去为<NULL>空值,系统出错
请问如何解决?
另外有memo字段原始数据为WINKT,拷贝过去TEXT字段为W I N K T, 什么原因, 如何解决
请大家帮忙!