📄 unit1.pas
字号:
{
SQL Server 数据库存取文件实例!
注意:请先连接数据库!然后打开数据库表
Design By Rainey kwbin@Delphi盒子
E-Mail: kwbin@163.com
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
edtFileName: TEdit;
btnBrowse: TButton;
OpenDialog1: TOpenDialog;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnAdd: TButton;
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;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
Label8: TLabel;
Label9: TLabel;
ADOQuery1: TADOQuery;
Button2: TButton;
Button3: TButton;
StatusBar1: TStatusBar;
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);
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;
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);
ADOTable1.Append;
try
ADOTable1.FieldByName('ext').AsString := ext;
fs.Position := 0;
TBlobField(ADOTable1.FieldByName('document')).LoadFromStream(fs);
ADOTable1.Post;
finally
fs.Free;
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('ext').AsString;
TBlobField(ADOTable1.FieldByName('document')).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
//如果表不存在则创建一张表BlobTable
ADOQuery1.SQL.Text := 'CREATE TABLE [BlobTable] ('
+ ' [id] [smallint] IDENTITY (1, 1) NOT NULL ,'
+ ' [document] [image] NULL ,'
+ ' [ext] [char] (10) COLLATE Chinese_PRC_CI_AS NULL'
+ ') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] ';
ADOQuery1.ExecSQL;
Application.MessageBox('数据表创建成功!', '', MB_ICONINFORMATION);
except
Application.MessageBox('数据表创建失败!请确认数据库中是否已经存在数据表BlobTable!', '', MB_ICONWARNING);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//打开这张表
ADOTable1.TableName := 'BlobTable';
ADOTable1.Open;
end;
procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin
StatusBar1.Panels.Items[0].Text := '数据库连接成功!'
end;
procedure TForm1.ADOTable1AfterOpen(DataSet: TDataSet);
begin
StatusBar1.Panels.Items[1].Text := '数据表BlobTeble连接成功!'
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -