當前位置:首頁 » 數據倉庫 » delphi建資料庫實例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

delphi建資料庫實例

發布時間: 2023-01-06 07:29:17

A. Delphi建立資料庫

你現在問的是什麼啦, 現在基本的書裡面都是有的!! 網上還有教程的

B. Delphi程序中怎樣創建一個Access資料庫

如果是創建一個 access 資料庫,最簡單的辦法是先用 access 軟體建立一個空的 access 資料庫文件(*.mdb),然後再程序中復制到指定文件夾中。

也可以嘗試使用 Ole 建立,以下是示例代碼:

procereTForm1.Button1Click(Sender:TObject);
var
CreateAccess:OleVariant;
begin
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d: est.mdb');
end;


注意:建立資料庫,與建立資料庫中的表,不是同一種操作。

C. 關於DELPHI動態資料庫

在Delphi中動態建立資料庫結構
--------------------------------------------------------------------------------

一、問題的提出
在程序運行過程中動態建立資料庫結構是我們編寫功能通用的資料庫管理系統常見
的問題。通用資料庫管理系統開發的基本思路是:系統允許用戶自行設定管理對象的數據
庫結構,然後通過演算法和編程技巧,在用戶設定完成後動態創建管理對象的資料庫結構和
完成系統功能的一些其它數據,這樣可以滿足不同用戶對管理系統管理項目的不同要求,
進而達到通用的目的。因此,通用資料庫管理系統開發的關鍵是系統能否動態地創建數據
庫結構。我們熟悉的Foxbase+、Foxpro等語言,均提供了動態創建資料庫結構的命令或過
程。
但是,在許多資料和書籍中,沒有介紹用Delphi如何動態建立資料庫結構,給我們開發
一些功能通用的資料庫管理系統帶來了不便。那麼如何在Delphi中動態建立資料庫結構
呢?本文是作者在查閱大量資料,經過反復實踐的基礎上得出的在Delphi中動態創建數據
庫結構的方法。
二、設置Delphi資料庫配置程序
在Delphi中要進行資料庫管理必須先設置好資料庫配置程序BDE,所有對資料庫的操
作,最後都要通過BDE去完成。下面以最常見的Dbase資料庫為例來配置Delphi的資料庫引
擎BDE。
1. 進入Delphi的集成開發環境IDE(Integrated Development Environment),在Dat
abase菜單下選擇Explore,出現sql Explorer窗體,在Object菜單下選擇BDE Administra
tor。
2. 出現BDE Administrator窗體後在Database頁上選擇Dbase,在Definition頁中將
Type項設為Standard;將Default Driver項設為Dbase;將Path項設為一工作目錄名(如:D
:\MYNAME)。以上過程即為資料庫的別名(Aliases)設置,這在以後Delphi的程序開發過程
中要經常用到。
3. 選擇Configration頁,在Drivers的Native項中選擇Dbase,在Definition頁中將T
ype項設為File;將Langdriver項設為DBASE CHS CP936;將Level項設為5。
4. 完成上述工作後,在Object菜單中選擇Save as Configration,按出現的對話框要
求將以上的設置保存好。至此,資料庫的基本配置工作就完成了,我們就可以進行下面的
工作了。
三、動態創建資料庫結構方法
在Delphi中動態創建資料庫結構有兩種方法。
方法一:使用Table組件的CreateTable方法。步驟如下:
1. 進入Delphi的IDE建立一個新項目文件和新窗體(Form1)單元文件(unit1.pas)。
2. 在Form1上加入Table1、Edit1、Edit2、Button1組件。將Button1組件的Captio
屬性設為『創建』。
3. 用滑鼠雙擊Button1進入Unit1.pas單元文件,在游標處加入下列代碼。
with table1 do
egi
active:=false
databasename:=『dbase'
tablename:=『my.dbf'
tabletype:=ttdbase
fielddefs.clear
fielddefs.add(edit1.text,ftstring,10,false)
fielddefs.add(edit2.text,ftinteger,0,false)
createtable
end
4. 按F9鍵編譯運行,在Edit1處輸入一欄位名稱:ZD1,在Edit2處輸入一欄位名稱:ZD
2,然後點擊"創建"按鈕,程序將在D:\MYNAME目錄中產生一個名為MY.DBF的資料庫文件,用
Database Desktop查看文件結構如下:
FieldName
Type
Size
Dec
ZD1 C 10
ZD2 N 11
方法二:使用Query組件,用結構化查詢語言SQL(Structured Query Language)語句創
建,步驟如下:
1. 同方法一之步驟1。
2. 在Form1窗體中加入Query1、Button1組件,將Query1的Database Name屬性設為『
Dbase』;將Button1組件的Caption屬性設為『創建』。
3. 在Query1的SQL屬性單擊,出現Sting List Editor窗口,在該窗體中輸入以下SQL
語句:
Create Table My(
ZD1 Char(10),
ZD2 Numeric(10,2))
4. 雙擊Button1進入Unit1.pas單元,在游標處加入下列代碼:
Query1.ExecSQL
5. 按F9鍵 編譯運行,在"創建"按鈕處單擊即可產生一個名為MY.DBF的資料庫文件,
存放在D:\MYNAME目錄中,用Database Desktop查看其結構如下:
FieldName Type Size Dec
ZD1 C 10
ZD2 N 10 2
以上所介紹的操作和程序均在Windows98操作系統下,Delphi 3.0 C/S版上調試運行
通過。

D. delphi 怎樣建資料庫

/*
創建資料庫
*/CREATE
DATABASE
CommunityON
(
NAME
=
Community_dat,
--
數據名稱
FILENAME
=
'e:\MSSQL7\data\Communitydat.mdf',--
文件名與路徑
SIZE
=
10MB,
--
數據大小
MAXSIZE
=
50MB,
--
最大空間
FILEGROWTH
=
5MB
)
--
數據每次擴容的空間LOG
ON(
NAME
=
Community_log,
--
日誌名稱
FILENAME
=
'e:\MSSQL7\Communitylog.ldf',--
文件名與路徑
SIZE
=
5MB,
--
日誌空間
MAXSIZE
=
25MB,
--
最大空間
FILEGROWTH
=
5MB
)
--
數據每次擴容的空間GO

E. Delphi 7使用代碼創建資料庫

procere TForm1.Button1Click(Sender: TObject);
var
rsTmp: TADOQuery;
begin
rsTmp:= TADOQuery.Create(nil);
try
try
rsTmp.Connection:= Conn;
rsTmp.Parameters.Clear;
rsTmp.SQL.Add:= 'Create DataBase 學生管理系統;';
rsTmp.SQL.Add:= 'USE 學生管理系統;';
rsTmp.SQL.Add:= 'Create Table 學生信息(姓名 nVarChar(10), 學號 nVarChar(30), 年齡 Int, 班級 nVarChar(20))';
rsTmp.ExecSQL;
except
On E: Exception do
begin
ShowMessage(e.Message);
end;
end;
finally
rsTmp.Free;
end;
end;

F. 怎樣用DELPHI程序建資料庫表的結構

建議參考以下資料:

DELPHI中操作ACCESS資料庫(建立.mdb文件,壓縮資料庫)

以下代碼在WIN2K,D6,MDAC2.6下測試通過,
編譯好的程序在WIN98第二版無ACCESS環境下運行成功.

//在之前uses ComObj,ActiveX
//聲明連接字元串
Const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';

//=============================================================================
// Procere: GetTempPathFileName
// Author : ysai
// Date : 2003-01-27
// Arguments: (None)
// Result : string
//=============================================================================
function GetTempPathFileName():string;
//取得臨時文件名
var
SPath,SFile:array [0..254] of char;
begin
GetTempPath(254,SPath);
GetTempFileName(SPath,'~SM',0,SFile);
result:=SFile;
DeleteFile(result);
end;

//=============================================================================
// Procere: CreateAccessFile
// Author : ysai
// Date : 2003-01-27
// Arguments: FileName:String;PassWord:string=''
// Result : boolean
//=============================================================================
function CreateAccessFile(FileName:String;PassWord:string=''):boolean;
//建立Access文件,如果文件存在則失敗
var
STempFileName:string;
vCatalog:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vCatalog:=CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
result:=CopyFile(PChar(STempFileName),PChar(FileName),True);
DeleteFile(STempFileName);
except
result:=false;
end;
end;

//=============================================================================
// Procere: CompactDatabase
// Author : ysai
// Date : 2003-01-27
// Arguments: AFileName,APassWord:string
// Result : boolean
//=============================================================================
function CompactDatabase(AFileName,APassWord:string):boolean;
//壓縮與修復資料庫,覆蓋源文件
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;

2.ACCESS中使用SQL語句應注意的地方及幾點技巧
以下SQL語句在ACCESS XP的查詢中測試通過
建表:
Create Table Tab1 (
ID Counter,
Name string,
Age integer,
[Date] DateTime);
技巧:
自增欄位用 Counter 聲明.
欄位名為關鍵字的欄位用方括弧[]括起來,數字作為欄位名也可行.

建立索引:
下面的語句在Tab1的Date列上建立可重復索引
Create Index iDate ON Tab1 ([Date]);
完成後ACCESS中欄位Date索引屬性顯示為 - 有(有重復).
下面的語句在Tab1的Name列上建立不可重復索引
Create Unique Index iName ON Tab1 (Name);
完成後ACCESS中欄位Name索引屬性顯示為 - 有(無重復).
下面的語句刪除剛才建立的兩個索引
Drop Index iDate ON Tab1;
Drop Index iName ON Tab1;

ACCESS與SQLSERVER中的UPDATE語句對比:
SQLSERVER中更新多表的UPDATE語句:
UPDATE Tab1
SET a.Name = b.Name
FROM Tab1 a,Tab2 b
WHERE a.ID = b.ID;
同樣功能的SQL語句在ACCESS中應該是
UPDATE Tab1 a,Tab2 b
SET a.Name = b.Name
WHERE a.ID = b.ID;
即:ACCESS中的UPDATE語句沒有FROM子句,所有引用的表都列在UPDATE關鍵字後.
上例中如果Tab2可以不是一個表,而是一個查詢,例:
UPDATE Tab1 a,(Select ID,Name From Tab2) b
SET a.Name = b.Name
WHERE a.ID = b.ID;

訪問多個不同的ACCESS資料庫-在SQL中使用In子句:
Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID;
上面的SQL語句查詢出當前資料庫中Tab1和db2.mdb(當前文件夾中)中Tab2以ID為關聯的所有記錄.
缺點-外部資料庫不能帶密碼.

在ACCESS中訪問其它ODBC數據源
下例在ACCESS中查詢SQLSERVER中的數據
SELECT * FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
外部數據源連接屬性的完整參數是:
[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;]
其中的DRIVER=driver可以在注冊表中的
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\
中找到

ACCESS支持子查詢

ACCESS支持外連接,但不包括完整外部聯接,如支持
LEFT JOIN 或 RIGHT JOIN
但不支持
FULL OUTER JOIN 或 FULL JOIN

ACCESS中的日期查詢
注意:ACCESS中的日期時間分隔符是#而不是引號
Select * From Tab1 Where [Date]>#2002-1-1#;
在DELPHI中我這樣用
SQL.Add(Format(
'Select * From Tab1 Where [Date]>#%s#;',
[DateToStr(Date)]));

ACCESS中的字元串可以用雙引號分隔,但SQLSERVER不認,所以為了遷移方便和兼容,
建議用單引號作為字元串分隔符.

G. 用Delphi開發資料庫程序經驗三則

一 建立臨時表 數據輸入是開發資料庫程序的必然環節 在Client/Server結構中 客戶端可能要輸入一批數據後 再向伺服器的後台資料庫提交 這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據 待提交後 清除本地表數據 這種方法的好處是 提高輸入效率 減小網路負擔

由於用戶一次輸入的數據量一般情況下較小(不會超過幾百條記錄) 所以臨時表可以建立在內存中 這樣處理速度較快 方法 使用查詢控制項(TQuery)第 步 在窗體上放上查詢控制項(TQuery) 設置好所連接的數據表 第 步 使TQuery CachedUpdates=True; TQuery RequestLive=True;第 步 在原有的SQL語句後加入一條Where子語句 要求加入這條Where子語句後SQL查詢結果為空 例如 SELECT Biolife ″Species No″ Category Common_Name Biolife ″Species Name″ Biolife ″Length (cm)″ Length_In Notes Graphic FROM ″biolife db″ Biolifewhere Biolife Category=′A′ and Biolife Category=′B′這樣臨時表就建立完成了

方法 使用代碼創建臨時表代碼如下 function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;var TempTable:TClientDataSet;begin TempTable:=nil; Result:=nil; if AFieldDefs<>nil then begin try TempTable:=TClientDataSet Create(Application); TempTable FieldDefs Assign(AFieldDefs); TempTable CreateDataSet; Result:=(TempTable as TDataSet); Except if TempTable<>nil then TempTable Free;

Result:=nil; raise; end;end;end;

在程序中按如下方法使用 procere TForm Button Click(Sender: TObject);var ADataSet:TDataSet;begin ADataSet:=TDataSet Create(Self); with ADataSet FieldDefs do begin Add(′Name′ ftString False); Add(′Value′ ftInteger False); end;

with DataSource do begin DataSet:=CreateTableInMemory(ADataSet FieldDefs); DataSet Open; end;

ADataSet Free;end;

臨時表創建完成

方法 使用簡單 但由於利用查詢控制項 清空數據時需要查詢伺服器後台資料庫 所以速度稍慢 而且不適用於臨時表中各個欄位由數個數據表的欄位拼湊而成的情況 方法 適用范圍廣 速度快 但需要編寫代碼 (代碼中TFieldDefs的使用方法十分簡單 見Delphi的聯機幫助)

二 配置數據引擎(BDE SQL Link) 有關資料庫程序分發時 需要攜帶數據引擎(BDE SQL Link) 並且在客戶端安裝完程序後還需要配置數據引擎 如用戶名(username) 密碼(Password)等等 如果手工配置的話 工作量比較大(根據客戶機數量而定) 而InstallShield For Delphi又好像沒有這方面的選項 其實InstallShield For Delphi可以做到 在生成安裝程序的目錄里有一個* iwz的文本文件 只要在[IDAPI Alias]片段中手工加入即可 例如 [IDAPI Alias] usesname=SYSDBA password=masterkey 安裝程序後數據引擎自動配置完畢

三 在InterBase資料庫中使用函數 程序員可能在用InterBase作為後台資料庫時 會為其提供的函數過少而感到不方便(只有四個) 無法方便地編寫出復雜的存儲過程 InterBase本身無法編寫函數 但它可以使用外部函數(調用DLL中的函數) 下例中說明如何在InterBase 中聲明SUBSTR函數 DECLARE EXTERNAL FUNCTION SUBSTR CSTRING( ) SMALLINT SMALLINT RETURNS CSTRING( ) ENTRY_POINT ″IB_UDF_substr″ MODULE_NAME ″ib_udf″

其中 MODULE_NAME為DLL的名稱 ENTRY_POINT為函數名 聲明後便可以使用 例如 select SUBSTR(country) from country

lishixin/Article/program/Delphi/201311/8520

H. 利用Delphi開發網路資料庫應用

Delphi 是具可視化界面的面向對象編程語言 它以其功能強大 簡便易用等諸多特性 深受編程人員的歡迎 Delphi 中提供了資料庫引擎 BDE(Borland Database Engine) 並內含眾多的資料庫調用構件 為編程人員開發客戶/伺服器應用程序提供了方便 通常情況下 利用 Delphi 開發資料庫應用程序 可以使用TTable TDataSource TDBEdit TDBNavigator等構件 只要正確設置了構件的某些屬性 再編寫必要的程序代碼對一些特定事件進行處理 就能夠完成對多種資料庫進行的數據處理 例如 記錄的輸入 修改 刪除和查詢等 這樣做雖然只需要編寫極少量的程序代碼就能達到很好的效果 但如果在程序設計過程中 某些數據表的結構發生了改變 則必須修改與此數據表有關的所有構件的屬性 這將使程序員陷入繁瑣的重復勞動中

為避免上述的麻煩 我們可以在編寫網路資料庫應用程序時採用結構化查詢語言 SQL(Structured Query Language) 這樣不僅可以更方便地與諸如 SQL Server Oracle 等各種後台資料庫進行動態的數據交換 而且可以使程序的修改和移植更加靈活 我們以數據輸入模塊為例 說明開發客戶/伺服器應用程序時如何採用 SQL 語句實現數據處理功能 首先 判斷是否已經有事務處理程序在運行 如果有 將其回卷(rollback) 如果沒有 則啟動一個新的事務 為數據的最終處理做准備 其次 是設置 SQL 語句 並將其寫入 TQuery 構件中 最後 將事務提交或回卷 至此完成一條記錄的數據輸入

下面是以頁面中的 TEdit 類型編輯框內容作為數據源 向資料庫輸入記錄的過程代碼

procere DataInsert(const qName:TQuery; szDBName:string;iNum:Integer; iMark:array of Integer;eName:array of TEdit); var i : Integer; szSQL : string; begin if DataMole DataBase InTransaction=true then DataMole DataBase RollBack; DataMole DataBase StartTransaction; szSQL := INSERT INTO +szDBName+ VALUES( for i:= to iNum do begin if iMark[i]= then szSQL := szSQL+eName[i] Text {非字元方式} else szSQL := szSQL+ +eName[i] Text+ ; {字元方式} if i=iNum then szSQL := szSQL+ ) else szSQL := szSQL+ ; end; qName Close; {關閉查詢} qName SQL Clear; {清SQL特性內容} qName SQL ADD(szSQL); {添加SQL內容} szSQL := SELECT * FROM +szDBName; qName SQL ADD(szSQL); qName Open; {返回結果集} DataMole DataBase Commit; end; 以上過程包含五個參數 實現從頁面中的一系列編輯框中讀取數據 並向指定數據表輸入的功能 其中 參數 qName 為頁面中所使用的 TQuery 類構件的名稱 參數 szDBName 是數據表的名稱 參數eName 是 TEdit 類型的數組 列出了頁面中包含數據的各編輯框名稱 參數 iNum 是數據表中的欄位個數 也即編輯框的個數 參數 iMark 是一個整數類型的數組 該參數表明相應欄位是以何種方式輸入的 如果是字元方式 需要在數據前後兩端加上引號 需要注意的是 在調用本過程之前 應將資料庫連接打開

DataMole DataBase Connected := true;

過程調用完成後 將資料庫連接斷開 DataMole DataBase Connected := false; 另外 開發網路資料庫應用程序時 還可以使用存儲過程 即 將預先編譯過的 SQL 語句存儲在伺服器上 存儲過程提前運行 且不與程序代碼一同存儲和編譯 因此其對應主程序中的代碼相對簡潔 運行速度也較快 SQL 語句的集中存放 使其修改更容易

要創建向數據表中輸入數據的存儲過程 代碼編寫舉例如下

CREATE PROC ProcTest @inttest *** allint @strtest char( ) output AS INSERT INTO TEST_User TRANS_TEST VALUES(@inttest @strtest) SELECT @strtest * FROM TEST_User TRANS_TEST 以上代碼向數據表 TEST_User TRANS_TEST 添加數據 該數據表包括兩個欄位 第一個欄位為 *** allint 類型的數據 參數類型定為 Input(在存儲過程中可預設) 第二個欄位數據為長度為 的字元類型 參數類型為 Output

其模塊程序的編寫與 DataInsert 過程相似 區別主要在於模塊的中間部分 對應的主要代碼如下

StoredProc Close; {關閉存儲過程} StoredProc Params[ ] ParamType := ptInput; {設置存儲過程的參數類型} StoredProc Params[ ] AsInteger := ; {設置存儲過程中參數的數據} StoredProc Params[ ] ParamType := ptOutput; StoredProc Params[ ] AsString := abcd ; StoredProc Open; {打開存儲過程} 其中 StoredProc 是 TStoredProc 類型的構件名稱 Params[ ] 是存儲過程中的第一個參數 對應存儲過程 ProcTest 可以用ParamByName( @inttest )代替 存儲過程的第二個參數與其類似

lishixin/Article/program/Delphi/201311/25067

I. 用delphi動態創建資料庫

用adoquery這個控制項
先連接好資料庫
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('create table 表名( 學號 char(20),姓名 char(20),班級 char(20))');
adoquery1.execsql;
可以了.

J. Delphi 如何創建mdb資料庫文件以及增加表段和刪除表段!

使用SQl語句就可以了.
創建資料庫:
Create
Database
......
後面是用戶名,用戶密碼,數據文件名,數據文件大小,增加率等內容
創建表:
Create
Table
...後面是表名,數據結構等內容
增加表欄位:
Alter
Table
表名
Add
欄位名
欄位數據類型
刪除表欄位:
Alter
Table
表名
Drop
欄位名...