求助:ODAC无法提交修改,提示“LOB LOCATOR SHOULD BE INITED.”

ahaisong 2003-09-10 09:14:50
表:CREATE TABLE TBL_BLOB(
BLOB_ID CHAR(10),
BLOB_DESC BLOB)
CREATE UNIQUE INDEX IDX_BLOB_ID ON TBL_BLOB (BLOB_ID ASC)

在执行下面代码的 tmpOraQuery->Post() 时出错,提示“LOB LOCATOR SHOULD BE INITED.”请帮忙解决!

TOraQuery* tmpOraQuery = new TOraQuery(this);
try{
tmpOraQuery->Session = OraSession1;
tmpOraQuery->Close();
tmpOraQuery->SQL->Text = "SELECT * FROM TBL_BLOB WHERE BLOB_ID = '" + Edit1->Text + "' FOR UPDATE ";
tmpOraQuery->SQLUpdate->Text = " UPDATE TBL_BLOB SET BLOB_ID = :BLOB_ID, BLOB_DESC = :BLOB_DESC WHERE BLOB_ID = '" + Edit1->Text + "' ";
tmpOraQuery->Open();
tmpOraQuery->First();
tmpOraQuery->Edit();
tmpOraQuery->FieldByName("BLOB_ID")->AsString = Edit2->Text;
tmpBlobField = (TBlobField*)tmpOraQuery->FieldByName("BLOB_DESC");
tmpBlobField->Clear();
tmpBlobField->LoadFromFile(".\\A.TXT");
try{
tmpOraQuery->Post();
}
catch(...){
ShowMessage("插入Blob失败!");
tmpOraQuery->Close();
}
}
__finally{
tmpOraQuery->Close();
delete tmpOraQuery;
}
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahaisong 2003-09-11
  • 打赏
  • 举报
回复

我的关于 "Lob locator should be inited" 的解决方法:
先插入一个字符到 Blob 字段,然后用流去更新 Blob 字段

tmpOraQuery->Close();
tmpOraQuery->SQL->Text = "INSERT INTO TBL_BLOB(BLOB_ID, BLOB_DESC) VALUES ('" + Edit1->Text + "', 'A') ";
tmpOraQuery->ExecSQL();

tmpOraQuery2->Close();
tmpOraQuery2->ReadOnly = false;
tmpOraQuery2->SQL->Text = " SELECT * FROM TBL_BLOB WHERE BLOB_ID = '"
+ Edit1->Text + "' FOR UPDATE ";
tmpOraQuery2->SQLUpdate->Text = " UPDATE TBL_BLOB SET BLOB_DESC = :BLOB_DESC
WHERE BLOB_ID = '" + Edit1->Text + "' ";
tmpOraQuery2->Open();
tmpOraQuery2->First();
tmpOraQuery2->Edit();
((TBlobField*)tmpOraQuery2->FieldByName("BLOB_DESC"))->LoadFromFile(".\\A.TXT");
tmpOraQuery2->Post();
ahaisong 2003-09-11
  • 打赏
  • 举报
回复

另外还有一个问题: 如何用 ODAC 批量更新 BLOB 字段?
ahaisong 2003-09-10
  • 打赏
  • 举报
回复

我发现:
如果 BLOB_DESC 字段中有内容的话, 执行能成功,
否则就会报错: Lob locator should be inited.
xizhouhawk 2003-09-10
  • 打赏
  • 举报
回复
tmpOraQuery->FieldByName("BLOB_ID")->AsString = Edit2->Text;
tmpBlobField = (TBlobField*)tmpOraQuery->FieldByName("BLOB_DESC");
在这两句前好像要加一个准备的句子具体我忘记了,好像是prepare();
你查一查吧

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧