国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

用Delphi的Tquery控件充分發(fā)揮數(shù)據(jù)庫系統(tǒng)SQL技巧

用Delphi的Tquery控件充分發(fā)揮數(shù)據(jù)庫系統(tǒng)SQL技巧

更新時(shí)間:2022-05-16 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

綜觀現(xiàn)有的RAD工具——Microsoft的Visual Basic、Sybase的PowerBuilder及Inprise的Delphi,它們都提供了相應(yīng)的數(shù)據(jù)庫控件。軟件開發(fā)人員利用這些控件可以有效、方便地實(shí)施數(shù)據(jù)庫編程,但編寫高效及功能強(qiáng)大的數(shù)據(jù)庫應(yīng)用軟件應(yīng)該直接、動(dòng)態(tài)地利用數(shù)據(jù)庫管理系統(tǒng)的SQL功能。

  下例的程序是在Delphi 4.0上開發(fā)的一個(gè)相對(duì)簡單的人事管理軟件的一部分,它能夠滿足復(fù)雜的動(dòng)態(tài)查詢、條件打印,實(shí)現(xiàn)全活動(dòng)的工資字段管理和復(fù)雜計(jì)算功能。

  Delphi訪問數(shù)據(jù)庫,一般通過Borland數(shù)據(jù)庫引驚(BDE,Borland DataBase Engine),通過BDE可以訪問客戶機(jī)/服務(wù)器數(shù)據(jù)庫,如Microsoft SQL、Oracle、Sybase、DB2等,及本地?cái)?shù)據(jù)庫,如Access、Paradox、dBase等。本例采用的數(shù)據(jù)庫是Sybase SQL Anywhere5.0。但應(yīng)該指出的是,由于各個(gè)數(shù)據(jù)庫系統(tǒng)的功能不一樣,在編程考慮軟件移植性的時(shí)候應(yīng)注意使用標(biāo)準(zhǔn)isql,還要利用當(dāng)前數(shù)據(jù)庫的特殊功能。

  在Delphi里,可以直接發(fā)揮數(shù)據(jù)庫SQL語句功能的控件除了Tquery,還有TupdateSQL、TstoredSQL等,利用這些控件可以實(shí)現(xiàn)查詢、計(jì)算外,還可以建立、修改數(shù)據(jù)庫表等等。本文以Delphi的Tquery控件為例,通過下面兩段程序?qū)崿F(xiàn)動(dòng)態(tài)查詢、復(fù)雜計(jì)算的方法,闡述數(shù)據(jù)庫編程應(yīng)充分發(fā)揮數(shù)據(jù)庫系統(tǒng)功能這一概念。

  程序中用到的兩個(gè)控件說明:

  * Tquery控件:name屬性為DynamicQuery,如果用以查詢,RequestLive屬性為False,如果用以更改則要求RequestLive屬性為True。

  * TdataSource控件:name屬性為DynamicSource,DataSet屬性為DynamicQuery。


  一、 動(dòng)態(tài)查詢的實(shí)現(xiàn)



  圖一

  {下面程序是“執(zhí)行查詢”按鈕被按下后的響應(yīng)程序。它首先根據(jù)上圖復(fù)合條件對(duì)話框生成的條件生成復(fù)雜的連接兩表的SQL語句,然后利用Tquery控件將結(jié)果響應(yīng)在顯示窗口上。生成打印報(bào)表原理也一樣}

  procedure TMainFrm.ExcuteQueryBtnClick(Sender: TObject);

  var

  condition:String;

  begin

  { MergeConditionDlg就是上圖所示的對(duì)話框}

  if MergeConditionDlg.ShowModal = mrOK then

  begin

   { MainCondition.Text為上圖“編輯主設(shè)限條件”顯示的內(nèi)容}

   if MergeConditionDlg.MainCondition.Text = '' then

   begin

   { SubCondition.Text為上圖進(jìn)入“子條件構(gòu)造”對(duì)話框生成的內(nèi)容 }

   if MergeConditionDlg.SubCondition.Text = '' then

   condition := ''

   else

   condition := '身份證 IN (SELECT 身份證 FROM 人員基本情況 WHERE '+ MergeConditionDlg.SubCondition.Text+') ';

   end

   else

   begin

   if MergeConditionDlg.SubCondition.Text = '' then

   condition := MergeConditionDlg.MainCondition.Text

   else

   condition := '('+MergeConditionDlg.MainCondition.Text+') AND (身份證 IN (SELECT 身份證 FROM 人員基本情況 WHERE '+ MergeConditionDlg.SubCondition.Text+')) ';

   end;

   with DataFrm do

   begin

   DynamicQuery.Close;

   DynamicQuery.SQL.Clear;

   DynamicQuery.SQL.Add('SELECT * FROM gzdaView ');

   if (condition〈〉 '') then

   DynamicQuery.SQL.Add('WHERE 身份證 IN (SELECT 身份證 FROM 人員基本情況 WHERE '+condition+') ');

   DynamicQuery.SQL.Add(' ORDER BY 單位編號(hào),部門編號(hào),行政級(jí)別編號(hào),工作時(shí)間,出生日期,發(fā)放日期');

   DynamicQuery.Open;

{DbgridDlg對(duì)話框根據(jù)DBGrid數(shù)據(jù)源的不同顯示不同的結(jié)果}

   DBgridDlg.DBGrid.DataSource := DataFrm.DynamicSource;

   if DBgridDlg.ShowModal = mrOK then

   begin

   Tryjbqk.DisableControls;

   Tryjbqk.Locate('身份證',DynamicQuery.FieldByName('身份證').Value,[]);

   Tryjbqk.EnableControls;

   end;

   end;

  end;

  end;


  二、動(dòng)態(tài)計(jì)算、修改數(shù)據(jù)庫記錄的實(shí)現(xiàn)



  圖二

  {下面的過程是在用戶按下“產(chǎn)生復(fù)合條件”按鈕后執(zhí)行的,它的任務(wù)是調(diào)用生成復(fù)
合條件的對(duì)話框,并將結(jié)果返回給工資項(xiàng)計(jì)算定義表(下面有解釋)的SubQuery字段,
并顯示到如圖上“#3> =0”顯示的Memo框上 }

  procedure TGzxFzjsDlg.GeneratingComplexBtnClick(Sender: TObject);

  begin

  { 調(diào)用生成復(fù)雜表達(dá)式的對(duì)話框,即(一)圖 所示的對(duì)話框 }

  if MergeConditionDlg.ShowModal = mrOK then

  begin

  { Tgzxjs 為 Class(Ttable),是一個(gè)存放工資項(xiàng)字段計(jì)算表達(dá)式的表,
它由gzx(對(duì)應(yīng)工資表中的工資項(xiàng))、bh(計(jì)算定義的編號(hào),同時(shí)也決定批量計(jì)算的順序
)、isCurrent(在批量處理時(shí)是否被計(jì)算)、SingleExp(簡單的計(jì)算表達(dá)式,實(shí)際的
表達(dá)式由于在該版本的Delphi中不能正常處理Text字段,而以文件形式被存放在硬盤上)、
SubQuery(執(zhí)行的限制條件,即該項(xiàng)定義的計(jì)算只對(duì)符合條件的工資表記錄進(jìn)行計(jì)算)
等5字段組成,該表的SubQuery字段被修改后,自動(dòng)調(diào)用一個(gè)過程,將對(duì)應(yīng)的計(jì)算表達(dá)式
刪除 }

   DataFrm.Tgzxjs.Edit;

   if MergeConditionDlg.MainCondition.Text = '' then

   begin

   if MergeConditionDlg.SubCondition.Text = '' then

   DataFrm.TgzxjsSubQuery.AsString := ''

   else

   DataFrm.TgzxjsSubQuery.AsString := '身份證 IN (SELECT 身份證 FROM 人員基
本情況 WHERE '+ MergeConditionDlg.SubCondition.Text+') ';

   end

   else

   begin

   if MergeConditionDlg.SubCondition.Text = '' then

   DataFrm.TgzxjsSubQuery.AsString := MergeConditionDlg.MainCondition.Text

   else

   DataFrm.TgzxjsSubQuery.AsString := '('+MergeConditionDlg.MainCondition.Text+')
AND (身份證 IN (SELECT 身份證 FROM 人員基本情況 WHERE '+ MergeConditionDlg.SubCondition.Text+')) ';

   end;

  end;

  end;

  {下面的過程是在用戶按下“加單一工資項(xiàng)值表達(dá)式”按鈕后執(zhí)行的,
它的任務(wù)是調(diào)用標(biāo)準(zhǔn)的輸入的對(duì)話框,并將用戶輸入的簡單算術(shù)表達(dá)式加到工資項(xiàng)計(jì)算表
達(dá)式上}

  procedure TGzxFzjsDlg.AddSingleExpClick(Sender: TObject);

  var

  InputValue :String;

  begin

  InputValue := InputBox('工資項(xiàng)值運(yùn)算表達(dá)式輸入框','#1,#2--#40、數(shù)字、
運(yùn)算符組成,如#3、(#3+#8)*0.15、#4-#6+#40+18等等:','');

  DataFrm.Tgzxjs.Edit;

  GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + InputValue;

  DataFrm.TgzxjsSingleExp.Value := DataFrm.TgzxjsSingleExp.Value + InputValue;

  DataFrm.Tgzxjs.Post;

  end;

  {下面的過程是在用戶按下“清空計(jì)算表達(dá)式”按鈕后執(zhí)行的,它的任務(wù)是計(jì)算表達(dá)
式清空}

  procedure TGzxFzjsDlg.SpeedButton4Click(Sender: TObject);

  begin

   DataFrm.Tgzxjs.Edit;

   GzxFzjsDlg.Expression.Text := '';

   DataFrm.TgzxjsSingleExp.AsString := '';

   DataFrm.Tgzxjs.Post;

  end;

  {下面的過程是在用戶按下“加合計(jì)函數(shù)表達(dá)式”按鈕后執(zhí)行的,它的任務(wù)是調(diào)用生
成合計(jì)函數(shù)表達(dá)式的的SUMExpressionDlg對(duì)話框,這里使用的合計(jì)函數(shù)有合計(jì)值(SUM)
、平均值(AVG)、最大值(MAX)、最小值(MIN)、記錄數(shù)(COUNT)等5種,并將結(jié)果
加到計(jì)算表達(dá)式}

  procedure TGzxFzjsDlg.AddSumExpClick(Sender: TObject);

  begin

  with SUMExpressionDlg do

  begin

  if ShowModal = mrOK then

  begin

   DataFrm.Tgzxjs.Edit;

   case CalStyle.ItemIndex of {CalStyle是包括上述5種合計(jì)表達(dá)式的選項(xiàng)控件}

   0: //即SUM

   begin

   GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + '(SELECT SUM('+SumExpression.Text+') FROM 工資表 WHERE '+DataFrm.TgzxjsSubQuery.AsString+')';

   DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + 'SUM('+SumExpression.Text+')';

   end;

   1: //即AVG

   begin

   GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + '(SELECT AVG('+SumExpression.Text+') FROM 工資表 WHERE '+DataFrm.TgzxjsSubQuery.AsString+')';

   DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + 'AVG('+SumExpression.Text+')';

   end;

   2: //即MAX

   begin

   GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + '(SELECT MAX('+SumExpression.Text+') FROM 工資表 WHERE '+DataFrm.TgzxjsSubQuery.AsString+')';

   DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + 'MAX('+SumExpression.Text+')';

   end;

   3: //即MIN

   begin

   GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + '(SELECT MIN('+SumExpression.Text+') FROM 工資表 WHERE '+DataFrm.TgzxjsSubQuery.AsString+')';

   DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + 'MIN('+SumExpression.Text+')';

   end;

   4: //即COUNT

   begin

   GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + '(SELECT COUNT('+SumExpression.Text+') FROM 工資表 WHERE '+DataFrm.TgzxjsSubQuery.AsString+')';

   DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + 'COUNT('+SumExpression.Text+')';

   end;

   end;

   DataFrm.Tgzxjs.Post;

  end;

  end;

  end;

  {下面過程通過響應(yīng)雙擊鼠標(biāo)將對(duì)應(yīng)的算術(shù)運(yùn)算符+、-、X、/、(、)加到計(jì)算表
達(dá)式 }

  procedure TGzxFzjsDlg.AddOperationalCharacterDblClick(Sender: TObject);

  begin

  DataFrm.Tgzxjs.Edit;

  GzxFzjsDlg.Expression.Text := GzxFzjsDlg.Expression.Text + ListBox2.Items[ListBox2.ItemIndex];

  DataFrm.TgzxjsSingleExp.AsString := DataFrm.TgzxjsSingleExp.AsString + ListBox2.Items[ListBox2.ItemIndex];

  DataFrm.Tgzxjs.Post;

  end;

  {下面的過程是在用戶按下“執(zhí)行當(dāng)前工資項(xiàng)計(jì)算”按鈕后執(zhí)行的,它的任務(wù)是對(duì)話
框顯示的被定義工資項(xiàng),對(duì)工資表中的該字段根據(jù)條件表達(dá)式和計(jì)算表達(dá)式進(jìn)行重新計(jì)
算}

  procedure TGzxFzjsDlg.OKBtnClick(Sender: TObject);

  begin

  if DataFrm.Sgzxjs.State IN [dsEdit,dsInsert] then

   ShowMessage('記錄正在編輯或插入狀態(tài),現(xiàn)退回!')

  else

  begin

  if Data.Confirm('真的需要根據(jù)條件和表達(dá)式對(duì)工資項(xiàng) '+DataFrm.TgzxjsGzx.Value+' 執(zhí)行工資項(xiàng)賦值嗎?') then

  begin

  MyPromptFrm.Show; //顯示進(jìn)度和圖片

  MyPromptFrm.Update;

  try

  DataFrm.DynamicQuery.Close;

  DataFrm.DynamicQuery.SQL.Clear;

  DataFrm.DynamicQuery.SQL.Add('UPDATE 工資表 SET '+DataFrm.TgzxjsGzx.Value+' = '+GzxFzjsDlg.Expression.Text);

  if DataFrm.TgzxjsSubQuery.AsString 〈〉 '' then

   DataFrm.DynamicQuery.SQL.Add(' Where '+DataFrm.TgzxjsSubQuery.AsString) ;

  DataFrm.DynamicQuery.ExecSQL;

  finally

  MyPromptFrm.Close;

  end;

  DataFrm.Tgz.Refresh;

  end;

  end;

  end;

  {下面的過程是在用戶按下“執(zhí)行批量計(jì)算”按鈕后執(zhí)行的,它的任務(wù)是對(duì)工資項(xiàng)
計(jì)算定義表中所定義的、并且批量處理標(biāo)志為真的所有工資字段根據(jù)批量處理順序、
條件表達(dá)式和計(jì)算表達(dá)式進(jìn)行重新計(jì)算}

  procedure TGzxFzjsDlg.Button1Click(Sender: TObject);

  begin

  if DataFrm.Sgzxjs.State IN [dsEdit,dsInsert] then

   ShowMessage('記錄正在編輯或插入狀態(tài),現(xiàn)退回!')

  else

  begin

  if Data.Confirm('真的需要執(zhí)行批量工資項(xiàng)賦值嗎?') then

  begin

  MyPromptFrm.Show;

  MyPromptFrm.Update;

  try

   DataFrm.Tgzxjs.First;

   while not DataFrm.Tgzxjs.Eof do

   begin

   if DataFrm.TgzxjsIsCurrent.Value = 1 then

   begin

   DataFrm.DynamicQuery.Close;

   DataFrm.DynamicQuery.SQL.Clear;

   DataFrm.DynamicQuery.SQL.Add('UPDATE 工資表 SET '+DataFrm.TgzxjsGzx.Value+' = '+GzxFzjsDlg.Expression.Text);

   if DataFrm.TgzxjsSubQuery.AsString 〈〉 '' then

   DataFrm.DynamicQuery.SQL.Add(' Where '+DataFrm.TgzxjsSubQuery.AsString) ;

   DataFrm.DynamicQuery.ExecSQL;

   end;

   if DataFrm.TgzxjsGzx.Value = '#37' then

   Gz.JsSds;

   DataFrm.Tgzxjs.Next;

   end;

  finally

   MyPromptFrm.Close;

  end;

  DataFrm.Tgz.Refresh;

  end;

  end;

  end;

  end. 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美日韩精品欧美日韩精品一| 国产69精品久久777的优势| 午夜影院久久久| 日本韩国欧美国产| 国产精品乱人伦| 色综合天天性综合| 亚洲美女在线一区| 欧美视频在线一区| 天堂一区二区在线| 欧美精品一区二区三区蜜桃视频| 国产尤物一区二区| 亚洲精品一二三| 在线电影欧美成精品| 欧美aaaaaa午夜精品| 国产亚洲精品免费| 欧美在线视频全部完| 日韩av一级片| 亚洲三级小视频| 6080亚洲精品一区二区| 国模套图日韩精品一区二区| 中文字幕一区二区三区在线观看| 欧美日韩在线免费视频| 国产乱码精品一区二区三区av| 欧美国产成人精品| 91精品国产乱码久久蜜臀| 成人免费看黄yyy456| 五月综合激情婷婷六月色窝| 欧美成人综合网站| 91成人看片片| 国产一区二区三区av电影| 一区2区3区在线看| 日本一区免费视频| 欧美日韩综合在线免费观看| 国产91精品精华液一区二区三区 | 欧美日韩成人高清| 黄一区二区三区| 夜夜亚洲天天久久| 亚洲精品在线观| 这里只有精品电影| 成人自拍视频在线| 国产精品99久久久久久宅男| 亚洲成精国产精品女| 欧美激情一区二区三区全黄| 欧美电视剧在线观看完整版| 欧美视频一二三区| 91丨porny丨首页| 极品销魂美女一区二区三区| 亚洲综合色视频| 日本一区二区三区四区 | 国产区在线观看成人精品| 日本高清成人免费播放| 成人中文字幕在线| 国产一区二区三区在线看麻豆| 一区二区三区日韩欧美精品| ww亚洲ww在线观看国产| 7777精品伊人久久久大香线蕉经典版下载| 色悠悠亚洲一区二区| 91女厕偷拍女厕偷拍高清| 国产一区久久久| 免费观看在线综合| 奇米影视一区二区三区小说| 日韩国产精品久久| 日韩影院精彩在线| 亚洲chinese男男1069| 一区二区三区日本| 亚洲精品成人精品456| 亚洲国产视频直播| 奇米影视一区二区三区小说| 美脚の诱脚舐め脚责91| 日本伊人色综合网| 国产乱理伦片在线观看夜一区| 国产成人精品三级| 91免费看视频| 欧美一区二区三区性视频| 欧美成人一区二区三区片免费 | 欧美日韩不卡一区二区| 欧美一区二区三区免费| 欧美大片一区二区| 国产精品高潮呻吟久久| 国产精品久久久久久久久晋中| 亚洲欧美另类图片小说| 日本午夜精品一区二区三区电影 | 亚洲资源中文字幕| 日韩av中文字幕一区二区 | 欧美a级理论片| 精品一区二区三区在线观看国产 | 91麻豆精品视频| 欧美精品黑人性xxxx| 久久久久久久精| 中文字幕日本不卡| 亚洲五月六月丁香激情| 日日摸夜夜添夜夜添国产精品| 加勒比av一区二区| 在线视频国产一区| 精品国产伦一区二区三区观看体验| 国产精品嫩草久久久久| 三级不卡在线观看| 91原创在线视频| 久久精品一级爱片| 日韩精品一二区| 99精品国产视频| 久久五月婷婷丁香社区| 亚洲大片精品永久免费| 不卡视频一二三| 久久久久久久久久看片| 香蕉影视欧美成人| 北条麻妃一区二区三区| 欧美成人一区二区三区片免费| 一区二区三区欧美视频| 国产精品91一区二区| 欧美精品777| 亚洲乱码精品一二三四区日韩在线 | 日韩美女视频在线| 亚洲最大的成人av| 不卡高清视频专区| 欧美国产日本视频| 国产91富婆露脸刺激对白| 欧美精品一区二区三区在线播放| 亚洲国产日韩精品| 欧洲精品视频在线观看| 亚洲同性gay激情无套| 国产成人av福利| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲精品视频免费观看| 国产不卡在线一区| 国产女主播一区| 国产91色综合久久免费分享| 久久久久综合网| 国产乱子伦视频一区二区三区| 精品国产髙清在线看国产毛片| 男人的天堂久久精品| 欧美一区二区三区喷汁尤物| 五月综合激情网| 3atv一区二区三区| 狠狠色狠狠色合久久伊人| 精品99一区二区| 国产精品1区2区| 久久久久成人黄色影片| 国产麻豆成人传媒免费观看| 精品欧美乱码久久久久久1区2区| 国产一区欧美一区| 中文字幕不卡在线| 日本黄色一区二区| 日本亚洲欧美天堂免费| 久久亚洲一区二区三区四区| 国产剧情在线观看一区二区| 国产日产精品1区| 91丨九色丨国产丨porny| 国产激情一区二区三区| 精品欧美久久久| 9l国产精品久久久久麻豆| 亚洲少妇屁股交4| 欧美亚洲国产一区在线观看网站| 午夜av区久久| 精品免费一区二区三区| 成人开心网精品视频| 亚洲综合色噜噜狠狠| 欧美一区二区三区四区久久| 国产精品资源网站| 亚洲码国产岛国毛片在线| 91精品国产综合久久精品图片| 精品在线一区二区三区| 亚洲视频香蕉人妖| 欧美一区二区三区成人| 成人污视频在线观看| 亚洲国产日韩av| 久久久久久久综合日本| 91电影在线观看| 国产又黄又大久久| 亚洲午夜久久久久久久久电影院| 日韩女优电影在线观看| 99re这里只有精品视频首页| 视频一区二区三区中文字幕| 欧美国产成人精品| 日韩一级黄色大片| 色欧美片视频在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 一本大道久久a久久精二百| 亚洲bt欧美bt精品777| 欧美激情在线一区二区三区| 色噜噜久久综合| 国产中文一区二区三区| 午夜久久久久久久久久一区二区| 国产精品午夜在线观看| 欧美老女人在线| 成人综合激情网| 精品一区二区影视| 亚洲3atv精品一区二区三区| 亚洲欧美综合另类在线卡通| 欧美成va人片在线观看| av在线这里只有精品| 亚洲成人福利片| 亚洲美女屁股眼交3| 国产人妖乱国产精品人妖| 91麻豆精品91久久久久久清纯| 91国偷自产一区二区开放时间| 国产在线看一区| 午夜精品一区二区三区电影天堂| 国产视频一区在线播放| 日韩欧美中文字幕制服|