我从外部倒入一个大型文本文件(字符数很多)Update到一个
Oracle数据库表中去,写入(Update)已成功,库表里字段的数据完整,但是我用Select查询出来再用FieldByName()方法读出来时数据就不完整了?哪位高手指导一下,谢谢!急急急急急!!!
Oracle数据库表中去,写入(Update)已成功,库表里字段的数据完整,但是我用Select查询出来再用FieldByName()方法读出来时数据就不完整了?哪位高手指导一下,谢谢!急急急急急!!!
不过大文本,建议使用Blob流字段来存储比较好,存取和读取都是用流相关的方法,应该不会有问题的
对于大文本,如楼上所说的,最好用blob来读取.
我是新手,不知道错在哪里!
请指教~!
或在修改的时候没有edit
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, MemDS, DBAccess, Ora, Provider, OraProvider, ADODB,
Grids, DBGrids, DBCtrls;type
TForm1 = class(TForm)
OraProvider1: TOraProvider;
OraSession: TOraSession;
Query: TOraQuery;
btnRead: TButton;
Memo1: TMemo;
btnWrite: TButton;
Button3: TButton;
Button4: TButton;
quInsertRecord: TOraQuery;
Button5: TButton;
OpenDialog: TOpenDialog;
Button6: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
OraQuery1: TOraQuery;
BtnQuery: TButton;
DBMemo1: TDBMemo;
DataSource2: TDataSource;
procedure Button3Click(Sender: TObject);
procedure btnWriteClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure BtnQueryClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button3Click(Sender: TObject);
var
f: TOpenDialog;
begin
f := OpenDialog;
f.Execute;
memo1.Lines.LoadFromFile(f.FileName );
end;procedure TForm1.btnWriteClick(Sender: TObject);
var
s: TStringStream;
rData: WideString;
f:TextFile;
sSQL:String;
//iSize:integer;
begin
rData := memo1.Text;
s := TStringStream.Create(Trim(rData));
//iSize:=s.Size;
//Application.MessageBox(PChar('s.size='+IntToStr(iSize)),'系统提示');
try
try
with quInsertRecord do
begin
OptionsDS.LongStrings := True;
Close;
//SQL.Text := 'Update a set a1=EMPTY_CLOB() where a0=:a0 RETURNING a1 into :a1';
SQL.Text := 'Update a set a1=:a1 where a0=:a0';
Params.ParamByName('a0').AsString := '1';
Params.ParamByName('a1').ParamType := ptInput;
//Params.ParamByName('a1').DataType := ftOraClob;
Params.ParamByName('a1').AsWideString:=s.DataString;
//TBlobField(Params.ParamByName('a1')).SaveToFile('c:\直接输出.txt');
AssignFile(f,'c:\aaa.txt');
ReWrite(f);
Write(f,Params.ParamByName('a1').AsWideString);
Closefile(f);
//Params.ParamByName('a1').AsOraClob.SaveToFile('c:\aaa.txt');
//Application.MessageBox(PChar('s.size='+IntToStr(s.Size)),'写入');
ExecSQL;
end;
showmessage('ok');
except
on e: exception do
showmessage(e.Message);
end;
finally
s.free;
end;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
OraSession.Connected := True;
end;procedure TForm1.btnReadClick(Sender: TObject);
var
s:TStringStream;
iSize:Integer;
sReadText:WideString;
f:TextFile;
begin
try
with query do
begin
Close;
SQL.Text := 'select a1 from a where a0=''1''';
Open;
if not Eof then
begin
//sReadText:=
TBlobField(FieldByName('a1')).SaveToFile('c:\read.txt');
//AssignFile(f,'c:\Read.txt');
//ReWrite(f);
//Write(f,sReadText);
//Closefile(f);
{s := TStringStream.Create(sReadText);
iSize:=s.Size;
Application.MessageBox(PChar('iSize='+IntToStr(iSize)),'系统提示');
TBlobField(FieldByName('a1')).SaveToFile('c:\a1.txt');
TBlobField(FieldByName('a1')).SaveToStream(s);
Application.MessageBox(PChar('iSize='+IntToStr(iSize)),'系统提示');
memo1.Lines.LoadFromStream(s);}
end;
Close;
end;
finally
//s.Free;
end;
end;procedure TForm1.Button5Click(Sender: TObject);
var
Stream: TStream;
BlobStream: TStream;
begin
with quInsertRecord do
begin
SQL.Text := 'select * from a';
Open;
Edit; Stream := nil;
BlobStream := nil;
try
Stream := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
BlobStream := CreateBlobStream(
FieldByName('Value'), bmWrite); BlobStream.CopyFrom(Stream, 0);
finally
BlobStream.Free;
Stream.Free;
end; post;
end;
end;procedure TForm1.Button6Click(Sender: TObject);var
s:TStringStream;
BlobStream: TStream;
begin BlobStream := nil; try
s := TStringStream.Create('');
try
with query do
begin
Close;
SQL.Text := 'select a0 from rep_data where outter_field_fk=742 ';
Open;
if not Eof then
begin //TBlobField(FieldByName('a1')).SaveToFile('c:\1.txt'); BlobStream := CreateBlobStream(
FieldByName('a0'), bmRead); s.CopyFrom(BlobStream,0);
end;
Close;
end;
memo1.text := s.DataString;
finally
s.Free;
if assigned(BlobStream) then
BlobStream.free;
end; except end;
end;procedure TForm1.BtnQueryClick(Sender: TObject);
var
sSQL:String;
begin
sSQL:='select * from a';
with self.OraQuery1 do
begin
Close;
SQL.Clear;
SQL.Append(sSQL);
Open;
end;
end;end.