1.下面的语句在SQL EXPLORER 中执行通过,用SELECT(在ENTER SQL处输入)查看此表也可以,但直接选表,查看DATA,会报错:“General SQL ERROR, ORQ-00936: 缺少表达式”,请问是为什么?
-----------------------------------------
CREATE TABLE TMPTABLE (
GNAME VARCHAR2(10),
AAA BLOB
)
-----------------------------------------2.现在要向TMPTABLE写入数据,如果要把richedit的内容写入AAA中,如何做,能写上代码最好,谢!我在保留区搜了一些也看了,用流文件,可还是有问题。
----------------------------------------
s1 := 'insert into tmptable (gname,aaa) values ('+''''+ComboBox3.Text+''''+',:edittext)';
query2.SQL.Add(s1);
Query2.ParamByName('aaa').LoadFromStream(bstream,ftOraBlob);
//执行是报什么 LOB定位器错,请高手指点------------------------------------------------
3.把AAA的内容导到richedit中怎么做,我看了些贴子大多是导出文件,再请指点
-----------------------------------------------------------
*****************
这是我按一个贴子的例子改写的,在激活TABLE1时也报 ORQ-00936: 缺少表达式
var
st :TMemoryStream;
begin
//Table1.TableName := 'tmptable';
//Table1.Active := true;
try
st := TMemoryStream.Create;
st.Clear;
RichEdit1.Lines.SaveToStream(st);
if not (Table1.State in [dsEdit, dsInsert]) then
table1.Append;
TBlobField(Table1.FieldByName('edittext')).LoadFromStream(st);
Table1.Post;
except
st.Free;
end;
st.Free;
end;
-------------------------------------------------------
总之,希望高手给说详细点,分不够可以再加,大家来讨论一下吧,谢
-----------------------------------------
CREATE TABLE TMPTABLE (
GNAME VARCHAR2(10),
AAA BLOB
)
-----------------------------------------2.现在要向TMPTABLE写入数据,如果要把richedit的内容写入AAA中,如何做,能写上代码最好,谢!我在保留区搜了一些也看了,用流文件,可还是有问题。
----------------------------------------
s1 := 'insert into tmptable (gname,aaa) values ('+''''+ComboBox3.Text+''''+',:edittext)';
query2.SQL.Add(s1);
Query2.ParamByName('aaa').LoadFromStream(bstream,ftOraBlob);
//执行是报什么 LOB定位器错,请高手指点------------------------------------------------
3.把AAA的内容导到richedit中怎么做,我看了些贴子大多是导出文件,再请指点
-----------------------------------------------------------
*****************
这是我按一个贴子的例子改写的,在激活TABLE1时也报 ORQ-00936: 缺少表达式
var
st :TMemoryStream;
begin
//Table1.TableName := 'tmptable';
//Table1.Active := true;
try
st := TMemoryStream.Create;
st.Clear;
RichEdit1.Lines.SaveToStream(st);
if not (Table1.State in [dsEdit, dsInsert]) then
table1.Append;
TBlobField(Table1.FieldByName('edittext')).LoadFromStream(st);
Table1.Post;
except
st.Free;
end;
st.Free;
end;
-------------------------------------------------------
总之,希望高手给说详细点,分不够可以再加,大家来讨论一下吧,谢
>>Query2.ParamByName('aaa').LoadFromStream(bstream,ftOraBlob);
改成:
Query2.ParamByName('edittext').LoadFromStream(bstream,ftOraBlob);如果还有问题试一试把ftOraBlob换成ftBlob还有记得流的游标置零3.
var Stream: Tmemorystream;//RichEdit写入字段aaa
with Table1 do
begin
Append;
stream.Clear ;
richedit1.Lines.SaveToStream(stream);
stream.Position :=0;
(FieldByName('aaa') as TBlobField).LoadFromStream(Stream);
post;
end;//读字段aaa到RichEdit
Stream.Clear ;
TblobField(table1.FieldByName('aaa')).savetostream(stream);
stream.Position :=0;
richedit1.lines.clear;
richedit1.lines.LoadFromStream(stream);
第二点:读例(我刚完成的项目中的)//==============================================================================
//功能:从批量交易表中读出当前的交易信息
//入参:aRecIndex 当前的批量交易表的记录号
//出参:aBITran 交易数据信息
//返回:当数据库操作正常 返加true 否则返回 false
//==============================================================================
function ReadRecFmBatchTab(const aRecIndex:Integer;
aDatabase:TDatabase;
var aBITran:TBITran):Boolean;
var
mQuery:TQuery;
BlobStream:TStream;
begin
Result:=true;
mQuery:=TQuery.Create(nil);
mQuery.DatabaseName:=aDataBase.DatabaseName;
mQuery.SessionName:=aDataBase.SessionName;
mQuery.SQL.Clear;
with mQuery do
begin
Sql.Add('SELECT * FROM BATCHTRANS_TAB WHERE TINDEX='+IntToStr(aRecIndex));
try
try mQuery.Open;
aBITran.RecIndex:=aRecIndex;
aBITran.BznsCode:=FieldByName('TRANS_CODE').AsInteger;
aBITran.BznsCtrl.BznsCtrlNo:=FieldByName('TRANS_CTRLNO').AsInteger;
aBITran.BznsCtrl.BznsSta:=FieldByName('TRANS_STATE').AsInteger;
aBITran.BznsCtrl.BznsNode:=FieldByName('TRANS_NODE').AsInteger;
aBITran.BznsCtrl.NodeSta:=FieldByName('TRANS_NODESTATE').AsInteger;
aBITran.UnitNo :=FieldByName('UNITNO').AsString;
aBITran.Card :=FieldByName('CUST_CARDNO').AsString;
aBITran.Ywh :=FieldByName('CUST_AGENTNO').AsString;
aBITran.Jzlsh :=FieldByName('UNITSERIAL').AsString;
aBITran.Sfbh :=FieldByName('SFBH').AsInteger;
aBITran.Zjfys :=FieldByName('ZJFYS').AsInteger;
aBITran.Zqfys :=FieldByName('ZQFYS').AsInteger;
aBITran.IFTRXSERNB :=FieldByName('HOSTSERIAL').AsInteger;
aBITran.PreAmount :=FieldByName('TRANS_PREAMOUNT').AsFloat;
aBITran.RealAmount :=FieldByName('TRANS_AMOUNT').AsFloat;
aBITran.Balance :=FieldByName('TRANS_BALANCE').AsFloat; BlobStream:=CreateBlobStream(FieldByName('CONTENTS'),bmRead);
BlobStream.Read(aBITran.Content,BlobStream.Size+1); except
Result:=false;
end;
finally
Free;
end;
end;
end;
第三点:写例://==============================================================================
//功能:向批量交易表中写入交易数据信息和交易控制信息
//入参:aRecIndex 当前的批量交易表的记录号
// aBITran 交易数据信息
// aBznsCtrl 交易控制信息
//返回:当数据库操作正常 返加true 否则返回 false
//==============================================================================
function WriteRecToBatchTab(const aRecIndex:Integer;
aDataBase:TDatabase;
const aBITran:TBITran):Boolean;
var
mQuery:TQuery;
MS:TMemoryStream;
begin
Result:=true;
mQuery:=TQuery.Create(nil);
mQuery.DatabaseName:=aDataBase.DatabaseName;
mQuery.SessionName:=aDataBase.SessionName;
mQuery.SQL.Clear;
with mQuery do
begin
//组装mQuery的sql语句
SQL.Add('UPDATE BATCHTRANS_TAB SET TRANS_STATE=:TRANS_STATE,'+
'TRANS_NODE=:TRANS_NODE,TRANS_NODESTATE=:TRANS_NODESTATE,'+
'HOSTSERIAL=:HOSTSERIAL,TRANS_PREAMOUNT=:TRANS_PREAMOUNT,'+
'TRANS_AMOUNT=:TRANS_AMOUNT,TRANS_BALANCE=:TRANS_BALANCE,'+
'UNITSERIAL=:UNITSERIAL,'+
'SFBH=:SFBH,ZQFYS=:ZQFYS,ZJFYS=:ZJFYS,TRANS_MEMO=:TRANS_MEMO,'+
'CONTENTS=:CONTENTS'+
' WHERE TINDEX=:TINDEX');
MS:=TMemoryStream.Create;
try MS.Write(aBITran.Content,StrLen(aBITran.Content));
try
ParamByName('TINDEX').AsInteger:=aBITran.RecIndex;
ParamByName('TRANS_STATE').AsInteger:=aBITran.BznsCtrl.BznsSta;
ParamByName('TRANS_NODE').AsInteger:=aBITran.BznsCtrl.BznsNode;
ParamByName('TRANS_NODESTATE').AsInteger:=aBITran.BznsCtrl.NodeSta;
ParamByName('HOSTSERIAL').AsInteger:=aBITran.IFTRXSERNB;
ParamByName('TRANS_PREAMOUNT').AsFloat:=aBITran.PreAmount;
ParamByName('TRANS_AMOUNT').AsFloat:=aBITran.RealAmount;
ParamByName('TRANS_BALANCE').AsFloat:=aBITran.Balance;
ParamByName('UNITSERIAL').AsString:=aBITran.Jzlsh;
ParamByName('SFBH').AsInteger:=aBITran.Sfbh;
ParamByName('ZQFYS').AsInteger:=aBITran.Zqfys;
ParamByName('ZJFYS').AsInteger:=aBITran.Zjfys;
ParamByName('TRANS_MEMO').AsString:=aBITran.Describe;
ParamByName('CONTENTS').LoadFromStream(MS,ftMemo);
aDataBase.StartTransaction;
ExecSQL;
aDataBase.Commit;
except
Result:=false;
aDataBase.RollBack;
end;
finally
Free;
MS.Free;
end;
end;
end;
我加一句,在读写ORACLE的BLOB时要注意BDE的Blob size参数。默认还是10k,太小了。
你的代码应该是对的,我还存在个问题是,在激活TABLE1时报 ORQ-00936: 缺少表达式;这可能是表建 的有问题,如知是什么原因还请告知!
=====================================
CREATE TABLE TMPTABLE (
GNAME VARCHAR2(10),
AAA BLOB
)
http://www.csdn.net/expert/topic/1017/1017585.xml?temp=.3102686