国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Delphi數(shù)據(jù)庫(kù)開(kāi)發(fā)及統(tǒng)計(jì)表格設(shè)計(jì)
Delphi是Borland公司開(kāi)發(fā)的基于PASCAL語(yǔ)言的Windows平臺(tái)應(yīng)用程序開(kāi)發(fā)工具,它將可視化編程(Visual Programming)與面向?qū)ο?Object-Oriented)的卓越優(yōu)點(diǎn)結(jié)合在PASCAL語(yǔ)言開(kāi)發(fā)平臺(tái)上,而且同時(shí)可以支持Client/Server模式的SQL數(shù)據(jù)庫(kù)訪問(wèn)與ODBC(開(kāi)發(fā)數(shù)據(jù)庫(kù)互連),是一個(gè)真正面向?qū)ο蟮拈_(kāi)發(fā)工具。
Delphi最吸引人的特點(diǎn)是它的強(qiáng)大的數(shù)據(jù)庫(kù)訪問(wèn)能力,它主要通過(guò)使用數(shù)據(jù)庫(kù)引擎(Borland Database Engine,簡(jiǎn)稱BDE)來(lái)訪問(wèn)本地?cái)?shù)據(jù)庫(kù)和遠(yuǎn)程數(shù)據(jù)庫(kù)。但對(duì)于用戶而言,不必直接編程訪問(wèn)BDE,而只需通過(guò)采用窗體(FORM)和大量方便且實(shí)用的數(shù)據(jù)庫(kù)訪問(wèn)元件(Component)來(lái)實(shí)現(xiàn),通過(guò)ReportSmith報(bào)表生成器可以生成多種隨心所欲的報(bào)表。
但是,用ReportSmith制作的各類(lèi)報(bào)表,只便于輸出至打印機(jī)上打印出來(lái),若想把報(bào)表在屏幕上顯示,則還需調(diào)用ReportView。而ReportView窗口界面對(duì)不太懂Delphi和Windows操作的普通用戶來(lái)說(shuō),不直觀,也不易操作。如何制作并在屏幕上顯示出直觀的二維統(tǒng)計(jì)報(bào)表,這是本文所要闡述的主要問(wèn)題。
以表格形式顯示數(shù)據(jù)庫(kù)內(nèi)容一般地采用下面兩種方式:
●縱向列表(如圖1)
●交叉統(tǒng)計(jì)列表(如圖2)
一、縱向列表
Delphi可以用TDBGRID控件,以表格形式非常方便地顯示單一或多數(shù)據(jù)庫(kù)縱向列表。一般采用兩種方法實(shí)現(xiàn):
(一)采用TTable與Tdatasource、TDbgrid控件
在窗體中引入上述三個(gè)控件,并在Ttable中控件指出要訪問(wèn)的數(shù)據(jù)庫(kù)存放路徑及數(shù)據(jù)庫(kù)名,在Tdatasource控件中指出數(shù)據(jù)源與Ttable相連,在TDbgrid控件中指出顯示Tdatasource數(shù)據(jù)源內(nèi)容,程序運(yùn)行后,則顯示出如圖1所示的數(shù)據(jù)庫(kù)縱向列表。
該種方法一般用來(lái)顯示單數(shù)據(jù)庫(kù)表格或一對(duì)多兩個(gè)數(shù)據(jù)庫(kù)表格。
(二)采用TQuery與Tdatasource、TDbgrid控件
同樣,在窗體中引入上述三個(gè)控件,并在TQuery控件中用SQL語(yǔ)句給出對(duì)有關(guān)數(shù)據(jù)庫(kù)的查詢,在Tdatasource控件中指出數(shù)據(jù)源與TQuery相連,在TDbgrid控件中指出顯示查詢的結(jié)果。程序運(yùn)行后,則顯示出如圖1所示的數(shù)據(jù)庫(kù)縱向列表。
該種方法一般用于兩個(gè)以上的多數(shù)據(jù)庫(kù)查詢。
在TQuery控件中建立SQL查詢有兩種方法,一種是在程序設(shè)計(jì)階段使用SQL查詢,即為靜態(tài)查詢,第二種是在程序運(yùn)行階段使用SQL查詢,即為動(dòng)態(tài)查詢。
1. 靜態(tài)查詢 編寫(xiě)程序時(shí),在窗體中放置Tquery元件,并設(shè)置對(duì)象名稱,如Query1。使用Delphi對(duì)象檢測(cè)器Object,雙擊Query 1對(duì)象的SQL屬性,則激活SQL語(yǔ)句輸入框,根據(jù)要求輸入SELECT語(yǔ)句。當(dāng)程序運(yùn)行后,則顯示出數(shù)據(jù)庫(kù)縱向列表。靜態(tài)查詢比較簡(jiǎn)單,但實(shí)用性差。對(duì)于較復(fù)雜的查詢,一般采用動(dòng)態(tài)查詢。
2. 動(dòng)態(tài)查詢同樣,在編寫(xiě)程序時(shí),在窗體中放置TQUERY元件,并設(shè)置對(duì)象名稱,如Query 1。在相關(guān)的事件函數(shù)中輸入SQL語(yǔ)句,例如:
WITH QUERY 1 DO
BEGIN
SQL.CLEAR;
SQL.ADD(SELECTDW,COUNT(DW)FROM B_BASETJ F,B_INFO E);
SQL.ADD(WHERE F.”SHBZCODE”=E.”SHBZCODE”GROUP BY DW);
OPEN;
END;
當(dāng)程序運(yùn)行后,由某一事件激發(fā),則顯示出查詢結(jié)果縱向列表。
二、交叉統(tǒng)計(jì)列表
在Delphi環(huán)境下,無(wú)論用上述哪種方法制作數(shù)據(jù)庫(kù)縱向列表,都是相對(duì)容易的。但要生成如圖2所示二維統(tǒng)計(jì)報(bào)表,則并非易事。
下面以筆者開(kāi)發(fā)的《社會(huì)養(yǎng)老保險(xiǎn)管理系統(tǒng)--統(tǒng)計(jì)管理》中的一段程序?yàn)槔?,詳?xì)說(shuō)明圖2所示交叉統(tǒng)計(jì)列表的制作。
(一)調(diào)用數(shù)據(jù)庫(kù)B_BASETJ.DB和B_INFO.DB
上述兩數(shù)據(jù)庫(kù)的結(jié)構(gòu)分別為:
B_BASETJ.DB B_INFO.DB
字段名 字段類(lèi)型 字段長(zhǎng)度 字段名 字段類(lèi)型 字段長(zhǎng)度
dw a 4(單位代碼) shbzcode a 21(社會(huì)保障號(hào)碼)
shbzcode a 21(社會(huì)保障號(hào)碼) attribution a 10(工作屬性)
cadre_zw a 4(干部職務(wù)) sex a 2(性別)
在B_INFO.DB數(shù)據(jù)庫(kù)中存放著各人的基本情況,其中ATTRIBUTION字段包含固定工、農(nóng)民合同工等工作屬性;CADRE_ZW字段包含干部職務(wù),若該字段內(nèi)容為空,則表示為工人。
(二)窗口界面設(shè)計(jì)及各組件屬性說(shuō)明
用到的重要組件及其屬性如下:
QYERYTB1:TQUERY;{指明SQL的存取元件名為QUERYTB1}
DataSourceTB1:Tdatasource;{指明與TQUERY相連的數(shù)據(jù)源為DatasourceTB1}
Datasourcename=DataSourceTB1
Dataset=QYERYTB1
SG11:TstringGrid;{字符型二維數(shù)據(jù)表格}
BTNEXIT:Tbutton;{取消按鈕}
(三)程序代碼及其分析
程序中主要通過(guò)使用TStringGrid和TQUERY控件來(lái)生成交叉統(tǒng)計(jì)列表。其中TStringGrid控件以二維網(wǎng)格形式顯示字符型數(shù)據(jù)表格,CELL[I,K]為表格中的一個(gè)數(shù)據(jù)單元,K為行號(hào),I為列號(hào),K、I的起始值為0;TQUERY控件的作用是利用SQL語(yǔ)句統(tǒng)計(jì)出表格中某一列數(shù)據(jù),如圖2表格中共有6列,則需6次調(diào)用TQUERY。
本程序還設(shè)置了公共程序段procedure COL(var I,k:INTEGER),這一子程序?qū)⒈欢啻握{(diào)用,用于填寫(xiě)表格中某一列數(shù)據(jù)。
主要程序代碼如下:
unit T1;
interface
uses
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,Forms,Dialogs,
StdCtrls,ExtCtrls,Grids,DB,DBTables, DBGrids,Report;
type
TT1FORM=class(TForm)
BTNEXIT:TButton;
SG11:TStringGrid;
Labell:TLabel;
QueryTB1:TQuery;
DataSourceTB1:TDataSource;
procedure FormCreate(Sender:TObject);
procedure BTNEXIT Click(Sender:TObject);
private
PROCEDURE COL(VAR I,K:INTEGER);
PROCEDURE CC(VAR I,K:INTEGER);
{Private declarations}
public
{Public declarations}
end;
var
T1FORM:TT1FORM;
implementation
{$R*.DFM}
PROCEDURE tt1form.COL(VAR I,K:INTEGER);{用FOR...DO循環(huán)填寫(xiě)SG11表格中第I列的VAR J:INTEGER;值}
BEGIN
WITH SG11 DO
BEGIN
QUERYTB1.FIRST;
FOR J:=2 TO K-1 DO
BEGIN
IF CELLS[0,J]=QUERYTB1.FIELDS[0].ASSTRING THEN{第0列填寫(xiě)單位代碼}
BEGIN
CELLS[I,J]:=QUERYTB1.FIELDS[1].ASSTRING;{填寫(xiě)第I列中某一行的值}
QUERYTB1.NEXT;
CELLS[I,1]:=INTTOSTR(STRTOINT(CELLS[I,1])+STRTOINT(CELLS[I,J]));
END
ELSE
CELLS[I,J]:=INTTOSTR(0);
END;{FOR}
END;{WITH}
END;
PROCEDURE Tt1form.CC(VAR I,K:INTEGER);
VAR
J:INTEGER;
BEGIN
WITH SG11 DO
BEGIN
FOR J:=1 TO K-1 DO
CELLS[I,J]:=INTTOSTR(STRTOINT(CELLS[1,J]-STRTOINT(CELLS[I-1,J])));
END;{WITH}
END;
procedure TT1FORM.FormCreate(Sender:TObject);{在創(chuàng)建窗體T1FORM時(shí)生成表格并填寫(xiě)統(tǒng)計(jì)值}
VAR
R,I,K,J:INTEGER;
begin
WITH SGLL DO
BEGIN
CELLS[0,0]:=單位{填寫(xiě)第0行各列標(biāo)題}
CELLS[1,0]:=總?cè)藬?shù);
CELLS[2,0]:=固定;
CELLS[3,0]:=合同;
CELLS[4,0]:=干部;
CELLS[5,0]:=工人;
FOR I:=1 TO 5 DO
BEGIN
CELLS[I,1]:=INTTOSTR(0);
END;
END;
WITH QUERYTB1 DO
BEGIN
SQL.CLEAR;
SQL.ADD(SELECT DW,COUNT(DW)FROM B_BASETJ F,B_INFO E);
SQL.ADD(WHERE F.”SHBZCODE”=E.”SHBZCODE”GROUP BY DW);
OPEN;
R:=RECORDCOUNT+2;
SG11.ROWCOUNT:=R;
SG11.CELLS[0,1]:=合計(jì);
FIRST;
K:=R;
FOR J:=2 TO K DO
BEGIN
SG11.CELLS[0,J]:=FIELDS[0].ASSTRING;{填寫(xiě)第0列單位號(hào)}
NEXT;
END;
I:=1;
COL(I,K);{填寫(xiě)第1列合計(jì)}
SQL.CLEAR;
SQL.ADD(SELECT DW,COUNT(E.”DW”));
SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE” AND F
.”ATTRIBUTION”=”固定職工”GROUP BY DW);
I:=2;
OPEN;
COL(I,K);{填寫(xiě)第2列各單位固定工人數(shù)}
SQL.CLEAR;
SQL.ADD(SELECT DW,COUNT(E.”DW”));
SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE” AND F.”
ATTRIBUTION”=”農(nóng)民合同工”GROUP BY DW);
I:=3;
CC(I,K);{填寫(xiě)第3列各單位合同工人數(shù)}
SQL.CLEAR;
SQL.ADD(SELECT DW,COUNT(E.”DW”));
SQL.ADD(FROM “B_BASETJ.DB”E,B_INFO F WHERE E.”SHBZCODE”=F.”SHBZCODE”AND F.”
CADRE_ZW”$#@60;$#@62;””GROUP BY DW);
I:=4;
OPEN;
COL(I,K);{填寫(xiě)第4列各單位干部人數(shù)}
I:=5;
CC(I,K);{填寫(xiě)第5列各單位工人人數(shù)}
END;
end;
......
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Delphi ADOStoredProc 存儲(chǔ)過(guò)程用法
SQL /數(shù)據(jù)庫(kù) 使用藍(lán)皮書(shū) 大富翁論壇-富翁筆記-
利用jxl實(shí)現(xiàn)將數(shù)據(jù)從Excel中導(dǎo)入到Mysql數(shù)據(jù)庫(kù)中
Access數(shù)據(jù)庫(kù)、Excel表格與VB編程完美結(jié)合實(shí)現(xiàn)Excel表格透視功能
Python使用win32com模塊實(shí)現(xiàn)數(shù)據(jù)庫(kù)表結(jié)構(gòu)自動(dòng)生成word表格的方法
ODAC(V9.5.15) 學(xué)習(xí)筆記(二)控件列表
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服