delphi oracle判断字段类型,问题:用DELPHI读写ORACLE中的BLOB类型字段(内详),请高手指点!...

#4

第一点:就我以前的经历,oracle数据库你最好有一个Primary Key,强烈建议

第二点:读例(我刚完成的项目中的)

//==============================================================================

//功能:从批量交易表中读出当前的交易信息

//入参: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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值