S
skyrabbit
Unregistered / Unconfirmed
GUEST, unregistred user!
单机版的数据从Access97数据库导入到SQL Server 7.0中,用TBatchMove的话,
好象不支持SQLServer的image类型字段,因为Access其中有JPEG图片数据,
所以TBatchMove不可用,只好自己写代码。
奇怪的是:用下边的代码编译后运行的话,出错。单步运行的话,却又正常的很,为什么?
有请各位富翁指点其中原因。
代码有点长,但是很简单,请费神看完。期待各位的指教!
Query1->Active = false;
Query1->DatabaseName = "BackUpDB"; //Access数据库
Query1->SQL->Clear();
Query1->SQL->Add("Select * from MyTableName");
Query1->Active = true;
Query1->First();
Table1->DatabaseName = "MainDatabase"; //SQL Server数据库
Table1->TableName = "MyTableName";
Table1->Close();
Table1->Open();
try{
while (!Query1->Eof)
{
Table1->Append();
Table1->FieldByName("gbnum")->Value = Query1->FieldByName("gbnum")->Value;
Table1->FieldByName("jlsj")->Value = Query1->FieldByName("jlsj")->Value;
Table1->FieldByName("ndtz")->Value = Query1->FieldByName("ndtz")->Value;
Table1->FieldByName("sysgn")->Value = Query1->FieldByName("sysgn")->Value;
//以上字段包括数字、文本等,都能正常赋值
{
TMemoryStream * st = new TMemoryStream();
try
{
dynamic_cast<TBlobField *>(Query1->FieldByName("syszp"))->SaveToStream(st);
//dynamic_cast<TBlobField *>(Query1->FieldByName("syszp"))->SaveToFile("0123.123");
/*走到这里就出问题了,用SaveToFile方法也一样出错;但是单独
做显示图片字段的小模块测试时一样的代码没出问题*/
/*编译通过后运行到这一条语句就出发异常了,但是单步运行时
却又正常过去了,为什么??*/
st->Position = 0; //或者st->Seek(0,soFromBeginning);
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->LoadFromStream(st);
//dynamic_cast<TBlobField *>(Table1->FieldByName("yxzp"))->LoadFromFile("0123.123");
}
catch(...)
{
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->Clear();
//所以jpg图片数据始终到不进来
}
delete st;
}
Table1->Post();
Query1->Next();
};
}
catch(...)
{
;
}
Table1->Close();
Query1->Close();
//这是显示数据库中图片字段的代码,运行正常
if (( dynamic_cast<TBlobField *>(Querycard->FieldByName("syszp"))->BlobSize)>100)
{
TJPEGImage *MyJPEG=new TJPEGImage();
TMemoryStream * st = new TMemoryStream();
dynamic_cast<TBlobField *>(Querycard->FieldByName("syszp"))->SaveToStream(st);
st->Seek(0,soFromBeginning);
MyJPEG->LoadFromStream(st);
photo->Picture->Assign(MyJPEG);
delete MyJPEG;
delete st;
}
else
photo->Picture=Assign(NULL);
好象不支持SQLServer的image类型字段,因为Access其中有JPEG图片数据,
所以TBatchMove不可用,只好自己写代码。
奇怪的是:用下边的代码编译后运行的话,出错。单步运行的话,却又正常的很,为什么?
有请各位富翁指点其中原因。
代码有点长,但是很简单,请费神看完。期待各位的指教!
Query1->Active = false;
Query1->DatabaseName = "BackUpDB"; //Access数据库
Query1->SQL->Clear();
Query1->SQL->Add("Select * from MyTableName");
Query1->Active = true;
Query1->First();
Table1->DatabaseName = "MainDatabase"; //SQL Server数据库
Table1->TableName = "MyTableName";
Table1->Close();
Table1->Open();
try{
while (!Query1->Eof)
{
Table1->Append();
Table1->FieldByName("gbnum")->Value = Query1->FieldByName("gbnum")->Value;
Table1->FieldByName("jlsj")->Value = Query1->FieldByName("jlsj")->Value;
Table1->FieldByName("ndtz")->Value = Query1->FieldByName("ndtz")->Value;
Table1->FieldByName("sysgn")->Value = Query1->FieldByName("sysgn")->Value;
//以上字段包括数字、文本等,都能正常赋值
{
TMemoryStream * st = new TMemoryStream();
try
{
dynamic_cast<TBlobField *>(Query1->FieldByName("syszp"))->SaveToStream(st);
//dynamic_cast<TBlobField *>(Query1->FieldByName("syszp"))->SaveToFile("0123.123");
/*走到这里就出问题了,用SaveToFile方法也一样出错;但是单独
做显示图片字段的小模块测试时一样的代码没出问题*/
/*编译通过后运行到这一条语句就出发异常了,但是单步运行时
却又正常过去了,为什么??*/
st->Position = 0; //或者st->Seek(0,soFromBeginning);
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->LoadFromStream(st);
//dynamic_cast<TBlobField *>(Table1->FieldByName("yxzp"))->LoadFromFile("0123.123");
}
catch(...)
{
dynamic_cast<TBlobField *>(Table1->FieldByName("syszp"))->Clear();
//所以jpg图片数据始终到不进来
}
delete st;
}
Table1->Post();
Query1->Next();
};
}
catch(...)
{
;
}
Table1->Close();
Query1->Close();
//这是显示数据库中图片字段的代码,运行正常
if (( dynamic_cast<TBlobField *>(Querycard->FieldByName("syszp"))->BlobSize)>100)
{
TJPEGImage *MyJPEG=new TJPEGImage();
TMemoryStream * st = new TMemoryStream();
dynamic_cast<TBlobField *>(Querycard->FieldByName("syszp"))->SaveToStream(st);
st->Seek(0,soFromBeginning);
MyJPEG->LoadFromStream(st);
photo->Picture->Assign(MyJPEG);
delete MyJPEG;
delete st;
}
else
photo->Picture=Assign(NULL);