华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
  當(dāng)前位置:編程開發(fā) > DotNET > Delphi.Net > 文章內(nèi)容
  

Delphi基礎(chǔ)教程:DELPHI數(shù)據(jù)庫應(yīng)用程序的開發(fā)環(huán)境介紹

 [ 2017年9月4日 ] 【

  為了便于開發(fā)數(shù)據(jù)庫應(yīng)用程序,在Delphi集成開發(fā)環(huán)境中,提供了大量的數(shù)據(jù)庫工具軟件用于幫助應(yīng)用程序開發(fā)人員設(shè)計(jì)、編程、測(cè)試和發(fā)行數(shù)據(jù)庫應(yīng)用程序。所有這些工具構(gòu)成了Delphi數(shù)據(jù)庫應(yīng)用程序開發(fā)環(huán)境。其各個(gè)工具軟件及其相互間的關(guān)系。

  整個(gè)Delphi數(shù)據(jù)庫應(yīng)用程序開發(fā)環(huán)境由數(shù)據(jù)庫引擎(BDE)、數(shù)據(jù)庫引擎管理程序(BDE Ad—ministrator)、數(shù)據(jù)庫桌面(DataBase Desktop)、SQL瀏覽器(SQL Explorere)、SQL驅(qū)動(dòng)程序(SQL Links)和ODBC驅(qū)動(dòng)程序等組成。

  數(shù)據(jù)庫引擎是Delphi數(shù)據(jù)庫開發(fā)環(huán)境的核心,它由兩種類型的動(dòng)態(tài)鏈接庫組成:一種用于提供核心服務(wù),另一種用于連接本地或網(wǎng)絡(luò)數(shù)據(jù)庫。所有這些文件被安裝在操作系統(tǒng)的System和用戶所指定驅(qū)動(dòng)器\Programe Files\Common Files\Borland\Bde\目錄下。數(shù)據(jù)庫引擎的主要 功能是將數(shù)據(jù)庫應(yīng)用程序和物理的數(shù)據(jù)庫分隔開來,在數(shù)據(jù)庫引擎中通過數(shù)據(jù)庫別名(Database Aliases)來標(biāo)識(shí)本地或遠(yuǎn)程的數(shù)據(jù)庫,數(shù)據(jù)庫應(yīng)用程序僅需要此數(shù)據(jù)庫別名就可以透明地對(duì)數(shù)據(jù)庫進(jìn)行訪問。

  數(shù)據(jù)庫引擎管理程序(B DE Administrator)主要用于對(duì)本地的Paradox、dBASE數(shù)據(jù)表和遠(yuǎn)程的SQL數(shù)據(jù)庫進(jìn)行創(chuàng)建表、創(chuàng)建索引、查詢、存取和編輯等操作。

  通過SQL瀏覽器可以對(duì)本地或遠(yuǎn)程的數(shù)據(jù)庫進(jìn)行各種SQL查詢操作。

  SQL驅(qū)動(dòng)程序(SQL Links)是Inprise公司在Delphi客戶/服務(wù)器版本中提供的遠(yuǎn)程數(shù)據(jù)庫的訪問驅(qū)動(dòng)程序,ODBC是微軟公司在Windows 95/98或NT操作系統(tǒng)提供數(shù)據(jù)庫訪問驅(qū)動(dòng)程序。

  Delphi中進(jìn)程間的數(shù)據(jù)共享三信網(wǎng)絡(luò)

  //以上代碼在DELPHI6中編譯通過。

  DLL是創(chuàng)建Windows應(yīng)用程序,實(shí)現(xiàn)代碼重用的重要手段。那么當(dāng)我們需要在進(jìn)程間共享數(shù)據(jù)時(shí),怎樣做才能快捷方便地實(shí)現(xiàn)呢?在32位應(yīng)用系統(tǒng)中,每個(gè)應(yīng)用程序會(huì)將DLL映射到自己的地址空間,同時(shí)DLL中的數(shù)據(jù)也就隨之被映射了。這樣,每個(gè)應(yīng)用程序都有自己的數(shù)據(jù)實(shí)例,在一個(gè)應(yīng)用程序中修改DLL中的全局變量,不會(huì)影響其它的應(yīng)用程序。DLL的使用似乎與我們的目的相背離,那么如何才能實(shí)現(xiàn)我們想要的東東呢?這里給大家介紹一種特殊的技術(shù),那就是內(nèi)存映射文件。

  內(nèi)存映射文件提供了一種方法,就是在WIN32系統(tǒng)的地址空間保留一塊內(nèi)存區(qū)域,物理存儲(chǔ)可以向其中提交。并且內(nèi)存映射文件不只是磁盤文件,也可以是WIN32的頁面文件,而且后者比前者要好,因?yàn)檫@意味著可以像訪問一個(gè)磁盤文件那樣訪問內(nèi)存中的一個(gè)區(qū)域,而不用創(chuàng)建臨時(shí)文件,用完后還得刪除它。WIN32有自己的管理頁面調(diào)度文件,當(dāng)不需要頁面調(diào)度文件時(shí),系統(tǒng)會(huì)自動(dòng)將有關(guān)區(qū)域釋放。以下是具體的實(shí)現(xiàn)代碼:

  library Project1;

  uses

  shareMem,

  windows,

  SysUtils,

  Classes;

  const

  MFileName: Pchar = ’ShareData’;

  //定義一個(gè)記錄類型,你所需要共享的數(shù)據(jù)就保存在這里。

  //當(dāng)在進(jìn)程中調(diào)用GetDllData時(shí),進(jìn)程中也應(yīng)該定義一個(gè)與這個(gè)一樣的記錄類型。

  type

  PGlobalDllData = ^TGlobalDllData;

  TGlobalDllData = record

  s: string[50];

  i: integer;

  end;

  var

  GlobalData: PGlobalDllData; //這是一個(gè)全局變量,指向創(chuàng)建的內(nèi)存映射文件。

  MapHandle: THandle;

  //給外部進(jìn)程調(diào)用的過程,當(dāng)外部進(jìn)程調(diào)用這個(gè)過程后,形參AGlobalData就指向了我//們創(chuàng)建的內(nèi)存映射文件. 我們可以創(chuàng)建兩個(gè)進(jìn)程, 同時(shí)調(diào)用這個(gè)過程, 那么在其中一個(gè)進(jìn) //程中修改數(shù)據(jù)后, 在另外一個(gè)進(jìn)程中既可反應(yīng)出來, 實(shí)現(xiàn)了我們需要的共享.

  procedure GetDllData(var AGlobalData: PGlobalDllData);stdcall; begin

  AGlobalData := GlobalData;

  end;

  procedure OpenThisData;

  var

  size: integer;

  begin

  size := sizeof(TGlobalDllData);

  //創(chuàng)建一個(gè)內(nèi)存文件映射對(duì)象//www.sunsin.net/,MfileName保存的值就是該對(duì)象的名字。

  mapHandle := CreateFileMapping(Dword(-1), nil, page_readWrite, 0, size, MFileName);

  if mapHandle = 0 then

  RaiseLastWin32Error;

  //把文件的視圖映射到調(diào)用進(jìn)程的地址空間,該函數(shù)的返回值就是該對(duì)象的首地址。注//意,這是調(diào)用進(jìn)程的地址,兩個(gè)應(yīng)用程序調(diào)用該DLL,返回值是不一樣的。

  GlobalData := MapViewOfFile(mapHandle, File_map_all_Access, 0, 0, size);

  Globaldata^.s := ’TEST’;

  GlobalData^.i := 5;

  if GlobalData = nil then

  begin

  CloseHandle(MapHandle);

  RaiseLastWin32Error;

  end;

  end;

  //DLL從進(jìn)程中分離出來時(shí),應(yīng)該釋放相應(yīng)的空間

  procedure CloseThisData;

  begin

  unmapViewOfFile(GlobalData);

  closeHandle(MapHandle);

  end;

  procedure DllEntryPoint(dwReason: DWord);

  begin

  case dwReason of

  Dll_Process_Attach: OpenThisData; //調(diào)用DLL時(shí)傳入的參數(shù),由系統(tǒng)自動(dòng)傳入

首頁 1 2 尾頁
本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
泰顺县| 栾川县| 璧山县| 晋中市| 高陵县| 六盘水市| 曲阜市| 尚义县| 谢通门县| 唐河县| 海南省| 永春县| 石景山区| 水富县| 望都县| 磐安县| 乌苏市| 盐城市| 定陶县| 仁寿县| 桑日县| 陆良县| 新河县| 崇义县| 洪雅县| 岗巴县| 舟曲县| 阿拉善盟| 宿州市| 沭阳县| 宽甸| 台安县| 佳木斯市| 山阴县| 平原县| 津南区| 芜湖县| 广州市| 密云县| 饶阳县| 柯坪县|