| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> delphi >> DELPHI中操作ACCESS技巧
 

DELPHI中操作ACCESS技巧

2008-05-18 23:55:19  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  1.DELPHI中操作ACCESS數據庫(建立.mdb文件,壓縮數據庫)

  以下代碼在WIN2K,D6,MDAC2.6下測試通過,

  編譯好的程序在WIN98第二版無ACCESS環境下運行成功.

  //聲明連接字符串

  Const

  SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'

  +'Jet OLEDB:Database Password=%s;';

  //=============================================================================

  // Procedure: 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;

  //=============================================================================

  // Procedure: 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;

  //=============================================================================

  // Procedure: 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;

  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不認,所以爲了遷移方便和兼容,

  建議用單引號作爲字符串分隔符.

  在SQLSERVER中查詢ACCESS數據庫中的表

  SELECT * FROM

  OPENROWSET('Microsoft.Jet.OLEDB.4.0',

  'c:\youfile.mdb';'admin';'youpwd',youtabname)

  AS a

  以下SQL語句在ACCESS XP的查詢中測試通過

  建表:

  Create Table Tab1 (

  ID Counter,

  Name string,

  Age integer,

  [Date] DateTime);

  技巧:

  自增字段用 Counter 聲明.

  字段名爲關鍵字的字段用方括號[]括起來,數字作爲字段名也可行.
 
 
 
上一篇《講解Delphi下的OpenGL開發入門》
下一篇《Delphi的.NET版將于12月起供貨》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
  1.DELPHI中操作ACCESS數據庫(建立.mdb文件,壓縮數據庫)   以下代碼在WIN2K,D6,MDAC2.6下測試通過,   編譯好的程序在WIN98第二版無ACCESS環境下運行成功.   //聲明連接字符串   Const   SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'    +'Jet OLEDB:Database Password=%s;';   //=============================================================================   // Procedure: 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;   //=============================================================================   // Procedure: 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;   //=============================================================================   // Procedure: 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;   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不認,所以爲了遷移方便和兼容,   建議用單引號作爲字符串分隔符.   在SQLSERVER中查詢ACCESS數據庫中的表   SELECT * FROM   OPENROWSET('Microsoft.Jet.OLEDB.4.0',   'c:\youfile.mdb';'admin';'youpwd',youtabname)   AS a   以下SQL語句在ACCESS XP的查詢中測試通過   建表:    Create Table Tab1 (    ID Counter,    Name string,    Age integer,    [Date] DateTime);   技巧:    自增字段用 Counter 聲明.    字段名爲關鍵字的字段用方括號[]括起來,數字作爲字段名也可行.
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
陽光靓麗的模特兒(8)
陽光靓麗的模特兒(7)
陽光靓麗的模特兒(6)
陽光靓麗的模特兒(5)
秋-印象
德慶盤龍峽 一
松江印象之三
雲之南(寬幅)
 
>>返回首頁<<
 
 
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有