嘿嘿,请看以下代码,可以存取任意格式的文件
SQL Server 数据库存取文件s
注意:请先连接数据库!然后打开数据库表
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, ComCtrls,
RzPanel, RzButton, Mask, RzEdit, SkinCaption, WinSkinStore, WinSkinData;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
OpenDialog1: TOpenDialog;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnView: TButton;
ADOTable1: TADOTable;
Panel1: TPanel;
edtServer: TEdit;
edtUser: TEdit;
edtPwd: TEdit;
edtDB: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
GroupBox1: TGroupBox;
Label8: TLabel;
Label9: TLabel;
ADOQuery1: TADOQuery;
Button2: TButton;
Button3: TButton;
StatusBar1: TStatusBar;
RzBitBtn1: TRzBitBtn;
RzBitBtn2: TRzBitBtn;
RzBitBtn3: TRzBitBtn;
RzBitBtn4: TRzBitBtn;
Label5: TLabel;
RzGroupBox1: TRzGroupBox;
edtFileName: TEdit;
btnBrowse: TButton;
btnAdd: TButton;
Label7: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
RzEdit1: TRzEdit;
RzEdit2: TRzEdit;
ComboBox1: TComboBox;
RzDateTimeEdit1: TRzDateTimeEdit;
SkinData1: TSkinData;
SkinStore1: TSkinStore;
SkinCaption1: TSkinCaption;
procedure btnBrowseClick(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnViewClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ADOConnection1AfterConnect(Sender: TObject);
procedure ADOTable1AfterOpen(DataSet: TDataSet);
procedure RzBitBtn1Click(Sender: TObject);
procedure RzBitBtn4Click(Sender: TObject);
procedure RzBitBtn2Click(Sender: TObject);
procedure RzBitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const SQLCSTR = 'Provider=SQLOLEDB.1;' +
'Password=%s;' //密码
+ 'Persist Security Info=True;'
+ 'User ID=%s;' //用户名
+ 'Initial Catalog=%s;' //数据库
+ 'Data Source=%s'; //服务器
implementation
uses ShellAPI;
{$R *.dfm}
procedure TForm1.btnBrowseClick(Sender: TObject);
begin
if OpenDialog1.Execute then
edtFileName.Text := OpenDialog1.FileName;
end;
procedure TForm1.btnAddClick(Sender: TObject);
var
fs: TFileStream;
ext: string;
filesize : integer;
begin
if not FileExists(edtFileName.Text) then
begin
Application.MessageBox(PChar('找不到文件' + edtFileName.Text), '错误', MB_ICONERROR);
Exit;
end;
ext := ExtractFileExt(edtFileName.Text); //取出文件的扩展名
fs := TFileStream.Create(edtFileName.Text, fmOpenRead);
filesize := fs.Size;
if filesize>204857600 then
begin
showmessage('对不起,您的文件为'+inttostr(filesize)+'个字节,您的作业容量一般不要超过10M字节 !!!');
exit;
end
else
begin
ADOTable1.Append;
try
ADOTable1.FieldByName('学号').AsString := rzedit1.Text;
ADOTable1.FieldByName('姓名').AsString := rzedit2.Text;
ADOTable1.FieldByName('上机科目').AsString := combobox1.Text;
ADOTable1.FieldByName('上机时间').AsString := rzdatetimeedit1.Text;
ADOTable1.FieldByName('作业提交时间').AsString := datetimetostr(now);
ADOTable1.FieldByName('作业文件类型').AsString := ext;
ADOTable1.FieldByName('文件大小(字节)').AsString := inttostr(filesize);
fs.Position := 0;
TBlobField(ADOTable1.FieldByName('作业详细内容')).LoadFromStream(fs);
ADOTable1.Post;
finally
fs.Free;
end;
end;
end;
procedure TForm1.btnViewClick(Sender: TObject);
var filename, dir: string;
begin
dir := ExtractFilePath(ParamStr(0)) + 'temp';
if not DirectoryExists(dir) then
CreateDir(dir);
try
fileName := dir + '/temp' + ADOTable1.FieldByName('id').AsString
+ ADOTable1.FieldByName('作业文件类型').AsString;
TBlobField(ADOTable1.FieldByName('作业详细内容')).SaveToFile(fileName);
ShellExecute(handle, 'Open', PChar(fileName), nil, nil, SW_NORMAL);
finally
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
ADOConnection1.ConnectionString := Format(SQLCSTR, [edtPwd.Text, edtUser.Text, edtDB.Text, edtServer.Text]);
ADOConnection1.Open;
except
on E: Exception do
Application.MessageBox(PChar('无法连接数据库!请检查数据库服务器是否打开以及数据库名称是否存在!'
+ #10#13 + '系统错误信息:' + E.Message), PChar(Caption), MB_ICONWARNING);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
//如果表不存在则创建一张表Table_work
ADOQuery1.SQL.Text := 'CREATE TABLE [Table_work] ('
+ ' [ID] [smallint] IDENTITY (1, 1) NOT NULL ,'
+ ' [学号] [char] (10) not NULL ,'
+ ' [姓名] [char] (10) not NULL ,'
+ ' [上机科目] [char] (15) not NULL ,'
+ ' [上机时间] [datetime] not NULL ,'
+ ' [作业详细内容] [image] NULL ,'
+ ' [作业文件类型] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,'
+ ' [文件大小(字节)] [char] (10) ,'
+ ' [作业提交时间] [datetime] not NULL,'
// + ' [成绩] [int] (4) NULL'
+ ') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] ';
ADOQuery1.ExecSQL;
Application.MessageBox('数据表创建成功!', '', MB_ICONINFORMATION);
except
Application.MessageBox('数据表创建失败!请确认数据库中是否已经存在数据表Table_work!', '', MB_ICONWARNING);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//打开这张表
ADOTable1.TableName := 'Table_work';
ADOTable1.Open;
end;
procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin
StatusBar1.Panels.Items[0].Text := 'SQLServer数据库服务器连接成功!'
end;
procedure TForm1.ADOTable1AfterOpen(DataSet: TDataSet);
begin
StatusBar1.Panels.Items[1].Text := '数据表Table_work连接成功!'
end;
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
adotable1.First;
end;
procedure TForm1.RzBitBtn4Click(Sender: TObject);
begin
adotable1.Last;
end;
procedure TForm1.RzBitBtn2Click(Sender: TObject);
begin
adotable1.Prior;
end;
procedure TForm1.RzBitBtn3Click(Sender: TObject);
begin
adotable1.Next;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AnimateWindow(Handle,1500,AW_HOR_NEGATIVE+AW_ACTIVATE+AW_CENTER);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle,1200,AW_HOR_NEGATIVE+AW_HIDE+AW_CENTER);
end;
end.