我要把一个ID号及一个对应附件保存到数据库(即一个文件),数据库表里就两个字段,如何实现,找了半天没有找到。
解决方案 »
- 急求 搞了二十小时了 Delphi 双击关闭pagecontrol中的一个分页内存报错
- Replace通过VBA和Delphi的执行效果不一样
- Type Library 自定义类型
- 车丢了,散分
- 300分求一个用基于Tapi的控件的注册版。名叫 VoiceAngel。
- delphi如何调用word
- 我用超级报表(vc)时在(delphi)中使用Getxxx方法返回都是空.vb没问题.
- 一个小问题,有经验的近来
- 请教!请告诉我怎样制做delphi6.0安装光盘?
- 怎么设置Form使其运行不随鼠标调整大小。谢谢
- 很简单的问题,最好详细写listput 这个组件怎么用? 80分够不?在线等待中。
- 请问一个问题,关于formclose的问题?----谁能帮我看看代码---在线等待
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FrameModule, DBTables, Menus, DB, Grids, DBGrids;type
TspFrame = class(TBaseFrame)
Tableid: TIntegerField;
Tablespid: TIntegerField;
Tablevideo: TBlobField;
Queryid: TIntegerField;
Queryspid: TIntegerField;
Queryspnr: TStringField;
Queryext: TStringField;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;implementationuses
ht_add, sp_add, DataModule;{$R *.dfm}{ TspFrame }constructor TspFrame.Create(AOwner: TComponent);
begin
inherited;
Query.ParamByName('id').AsInteger := UserId;
Query.Open;
end;procedure TspFrame.N1Click(Sender: TObject);
var
Stream: TStream;
begin
with TspForm.Create(nil) do
begin
if ShowModal = mrOk then
with DM.Query do
begin
Close;
Sql.Clear;
Sql.Add('declare @i int');
Sql.Add('select @i = 1 + (select max(spid) from tb_视频 where id=:id)');
Sql.Add('if @i is null select @i = 1'); Sql.Add('insert into tb_视频 values(:id, ');
ParamByName('id').AsInteger := UserId; Sql.Add('@i, '); Sql.Add(':spnr, '); //视频内容
ParamByName('spnr').AsString := Trim(spnrEdit.Text); Sql.Add(':ext, '); //文件后缀
ParamByName('ext').AsString := ext; Sql.Add(':video)'); //视频文件
if not FileChanged then
begin
ParamByName('video').DataType := ftBlob;
ParamByName('video').Value := Null;
end
else
begin
Stream := TFileStream.Create(OD.FileName, fmOpenRead);
ParamByName('video').LoadFromStream(Stream, ftBlob);
Stream.Free;
end; try
ExecSql;
Close;
inherited;
except
MessageDlg('无法增加,可能网络有问题!', mtInformation, [mbOk], 0);
end;
end;
Free;
end;
end;procedure TspFrame.N2Click(Sender: TObject);
var
Stream: TStream;
begin
if Query.Bof and Query.Eof then
exit;
with TspForm.Create(nil) do
begin
Caption := '修改视频';
spnrEdit.Text := Query.FieldByName('spnr').AsString;
Table.Close;
Table.Filter := 'id=' + IntToStr(UserId) + ' and spid=' + Query.FieldByName('spid').AsString;
Table.Open;
if not (Table.FieldByName('video').IsNull) then
begin
ext := Query.FieldByName('ext').AsString;
(Table.FieldByName('video') as TBlobField).SaveToFile(TempFile + ext);
LookButton.Enabled := True;
end;
Table.Close;
if ShowModal = mrOk then
with DM.Query do
begin
Close;
Sql.Clear; Sql.Add('update tb_视频 set'); Sql.Add('spnr=:spnr'); //视频内容
ParamByName('spnr').AsString := Trim(spnrEdit.Text); Sql.Add(', ext=:ext'); //.文件后缀
ParamByName('ext').AsString := ext; if FileChanged then
begin
Sql.Add(', video=:video'); //视频文件
Stream := TFileStream.Create(OD.FileName, fmOpenRead);
ParamByName('video').LoadFromStream(Stream, ftBlob);
Stream.Free;
end; Sql.Add('where id=:id and spid=:spid');
ParamByName('id').AsInteger := Query.FieldByName('id').AsInteger;
ParamByName('spid').AsInteger := Query.FieldByName('spid').AsInteger; try
ExecSql;
Close;
inherited;
except
MessageDlg('无法修改,可能网络有问题!', mtInformation, [mbOk], 0);
end;
end;
Free;
end;
end;procedure TspFrame.N3Click(Sender: TObject);
begin
if Query.Bof and Query.Eof then
exit;
if MessageDlg('确定删除该视频?', mtConfirmation, mbOkCancel, 0) <> mrOk then
exit;
with DM.Query do
begin
Close;
Sql.Clear;
Sql.Add('delete from tb_视频 where id=:id and spid=:spid');
ParamByName('id').AsInteger := Self.Query.FieldByName('id').AsInteger;
ParamByName('spid').AsInteger := Self.Query.FieldByName('spid').AsInteger;
try
ExecSql;
Close;
inherited;
except
MessageDlg('无法删除,可能网络有问题!', mtInformation, [mbOk], 0);
end;
end;
end;end.
create table FileList(
ID vachar(20), File image)query1.close;
query1.sql.text := 'Insert into filelist(id) values('''+edit1.text+''')';
query1.Execsql;
query1.close;
qeury1.requestlive := true;
query1.sql.text := 'select * from filelist where id='''+edit1.text+'''';
query1.Open;
query1.edit;
TBlobField(query1.fieldbyname('File').loadfromfile('d:\aa.jpg');
query1.post;TBlobField(query1.fieldbyname('File').savetofile('d:\aaddddddd.jpg');
而文件大小是不固定的,缓冲区无论开多大,都有可能不满足
TQuery与缓冲区的问题可能是delphi的一个bug
如果使用adoquery,不存在次问题