Delphi之数据库物语 数据库中图片的录入 数据库的使用中除了文字资料和数字以外，往往还离不了图片。比如学校的学生档案数据库就该有学生的照片、如果图书馆的数据库中能有书的封面就好了、涉及旅游方面的数据库就少不了景点的图片……以下在Windows 98中的Delphi 4中对基于dBASE 或 Paradox数据库作了几种在数据库中录入图片的介绍，图片存储在数据库的BLOB字段中。 1. 从剪贴板把图片拷至与数据库字段相连的TDBImage组件； 从剪贴板把图片拷至与数据库字段相连的TDBImage组件，也许是程序运行时改变或者增加图片最简单的方法。由于剪贴板可以存储多种类型的数据，而我们只需要图形数据，因此在PasteFromClipboard之前必须先校验剪贴板对象的数据是否是图形。
下面这段例子代码告诉我们怎样从剪贴板把图片拷至与数据库字段相连的TDBImage组件中，首先还应该在单元的Uses中加入Clipbrd。
procedure TForm1.Button1Click(Sender: TObject);
VAR CB: TClipboard;
begin
CB:=TClipboard.Create;
Try //校验剪贴板对象内的数据是否是图形
if Clipboard.HasFormat(CF_BITMAP) then DBImage1.PasteFromClipboard
else
ShowMessage('剪贴板内没有图片');
finally
CB.Free;
end;
end;

2. 使用TBLOBField字段的LoadFromFile 方法
使用TBLOBField字段的LoadFromFile方法来加入图片有一个很大的限制，即要求图片必须是位图(*.BMP)，其它类型一概不接受。而一幅图片进了剪贴板就自动转换成位图，所以使用第一种方法可以加入任何类型的图片（只要它进了剪贴板）。不过总不能每次增加图片都要再打开看图软件去Copy图片吧，所以这第二种方法还是有生存空间的。
首先双击Table1组件，出现Form1.Table1窗口，右击鼠标，选择Add all fields建立静态字段，假设我们存储图片的字段名为BMP，那么这时就会有Table1BMP:
TblobField出现在定义中，增加一个Button和OpenDialog，输入下列代码：
procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then //获取图片的文件名
begin
table1.Edit;
table1bmp.LoadFromFile(opendialog1.filename);
end;
end;

3. 使用Assign方法拷贝一个TBitmap类型的对象到TDBImage的Picture属性；
procedure TForm1.Button3Click(Sender: TObject);
var TB:TBitmap;
begin
if opendialog1.Execute then
begin
TB:=TBitmap.Create;
try
table1.Edit;
TB.LoadFromFile(opendialog1.FileName);
DBImage1.Picture.Assign(TB);
finally
TB.Free;
end;
end;
end;

获取记录总数值

Delphi中各种控件提供了丰富的属性和方法，要想知道某数据库的记录数，用一个简单的语句即可完成。例如求Delphi的DBDemos数据库中表day.db的记录总数，假设Table控件已加到Form上，具体实现语句为：
Edit1.text:=inttostr(Table1.recordcount);
如果是要知道符合某条件的记录数，也非常方便，具体实现语句为：
Edit1.text:=inttostr(Query1.recordcount);
Recordcount属性用来表示为数据集相连的表的记录总数。
还有一种通用的方法，具体实现语句为：
VAR i:integer;
Begin
i:=0;
Table1.open;
Table1.First;
While not Table1.eof do
begin
i:=i＋1;
Table1.next;
End;
Edit1.text:=inttostr(i);
如果使用了TQuery控件，具体步骤如下：
Query1.close;
Query1.SQl.clear;
query1.SQL.add (′ ...... ′);
//某查询语句
Query1.open
Query1.first;
i:=0;
While not Query1.eof do
begin
i:=i＋1;
Query1.next;
EnD
Edit1.text:=Inttostr(i);

给数据库报表加上网格线

Delphi 4.0中的QReport组件中具有很强的报表控件功能，在QReport 组件中用来显示数据的TQRExpr有一个Frame属性，按下F11键，在"Object inspect"中，修改"Frame"属性,它提供7个子属性，其功能如下：
·Color 显示网格线颜色
·Style 报表网格线的形状，如实线、虚线等
·Width 网格线的宽度
·DrawBottom 网格的底部
·Drawlefl 网格的左边
·DrawRight 网格的右边
·DrawTop 网格的底部
在制做报表前，最好在数据库表中添加几个记录，然后根据需要修改这些属性，使用报表的预览功能在设计期间查看修改效果，不满意可立即修改。

在一个Dbgrid中显示多数据库

在数据库编程中，不必要也不可能将应用程序操作的所有数据库字段放入一个数据库文件中。正确的数据库结构应是：将数据库字段放入多个数据库文件，相关的数据库都包含一个唯一的关键字段，在多数据库结构里可以建立联系。
例如：要编制一个人事管理程序，为简化演示程序，只建立两个数据库，每个数据库都只建立两个字段。
个人简介 grjj.dbf，由人事处维护；工资情况 gz.dbf，由财务处维护。
1. 数据库的建立
进入DataBase Desktop，建立数据库结构如下：
grjj.dbf
编号 字段名:bh size:4 type:number
姓名 字段名:xm size:10 type:character
gz.dbf
编号 字段名:bh size:4 type:number
工资 字段名:gz size:4 Dec 2 type:number

【注意】两个数据库的bh字段的size、type必须一致。实际上，两数据库文件可以分布在网络的不同计算机上，为便于演示，分别存为"C:\rsgl\grjj.dbf"和"C:\rsgl\gz.dbf"。
2.应用程序的编制
启动Delphi，新建一个工程，在窗体中加入Query控件Query1，databasename属性设为C:\rsgl；
加入DataSource控件datasource1， DataSet属性设为Query1； 加入DbGrid控件dbgrid1，DataSource属性设为DataSource1，将Query1.sql属性设为
Select Distinct A.bh,a.xm,b.gz From "grjj.dbf" A, "gz.dbf" b
Where A.bh=b.bh
再将Query1.enabled属性设为True，不用编译，DbGrid1就会显示: bh，xm，gz三个字段。如果grjj.dbf和gz.dbf中有记录，则记录会显示出来。
(白劲松)