操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    10.ADO組件之ADOCommand組件

    ADOCommand 組件定義了對數據庫執行的命令。該組件主要用于SQL定義語句(DDL)或執行不帶返回結果集的指令或存儲過程。如果SQL語句帶有返回結果集,最好使用 ADODataSet、ADOQuery 或 ADOStoredProc 組件。

    不帶有返回結果集的命令:

    • DML、Insert、Update、Delete等
    • DDL (如:創建表、索引或存儲過程等)

    10.1 ADOCommand 組件的主要屬性

    • CommandText

    該屬性表示命令字符串,默認值為空字符串(‘’)。

    • CommandType

    表示如何處理 CommandText 屬性中的命令。取值為:

    • cmdText - 作為命令或存儲過程調用的文本化定義來處理
    • cmdTable - 作為一個經過 SQL 查詢后返回表格結果來處理
    • cmdTableDirect - 作為一個沒有經過SQL查詢的完全的表格名稱來處理
    • cmdStoredProc - 作為存儲過程的名稱來處理
    • cmdUnknown - 默認值,未知命令類型
    • cmdFile - 作為持久RecordSet文件名來處理

    使用該屬性可優化 CommandText 屬性的執行。如果該屬性值為 cmdUnknown,系統的性能將會降低。如果CommandType屬性與CommandText屬性中的命令類型不匹配,執行時會產生錯誤。

    • CommandTimeout

    執行命令需等待的時間,單位為 s,默認值 30。如果指定時間內沒有執行完命令,會產生錯誤,然后會自動取消命令的執行。該屬性值設置為 0,將無限期地等待,直到命令執行完。

    • Prepared

    指定執行前是否保存命令的編譯版本。如果設置為 True,在首次執行該組件的查詢前保存 CommandText 屬性中指定的已經準備好的查詢版本。這樣,首次執行會降低命令執行的速度,但在后續執行中可以直接事件編譯好的命令版本,這樣可以提高執行效率。如果設置False,將直接執行命令而不創建編譯版本。

    10.2 ADOCommand 組件的主要方法

    • Execute

    該方法執行 CommandText 屬性中指定的SQL語句或存儲過程等命令。

    ADOCommand組件的使用方法:

    1.設置 CommandText 屬性

    2.將 ADOCommand 組件綁定到打開的連接

    3.設置 Prepared 屬性為True

    4.調用 Execute 方法或 Open 方法

    10.3示例

    示例:通過表單界面插入數據到數據表。界面設計如下:

    數據模塊如下圖:

    數據模塊組件及屬性設置:

    組件

    屬性

    ADOConnection1

    ConnectionString

    Provider=MSDASQL.1;Persist Security Info=False;Data Source=demodb;Mode=ReadWrite;


    LoginPrompt

    False


    Connected

    True


    Mode

    cmReadWrite

    ADOTable1

    Connection

    ADOConnection1


    TableName

    d_students


    Readonly

    True


    Active

    True

    ADOCommand1

    Connection

    ADOConnection1


    CommandText

    INSERT INTO d_students (student_id, "name", sex, chinese, math, english) VALUES(:studentId, :name, :sex, :chinese, :math, :english);

    ADOCommand2

    Connection

    ADOConnection1


    CommandText

    UPDATE d_students SET "name"=:name, sex=:sex, chinese=:chinese, math=:math, english=:english WHERE student_id=:studentId;

    ADOCommand3

    Connection

    ADOConnection1


    CommandText

    delete from d_students where student_id = :studentId

    DataSource1

    DataSet

    ADOTable1

    主窗體如下圖:

    主窗體組件及屬性:

    組件

    屬性

    Panel1

    Caption

    ''


    Align

    alTop

    Button1

    Caption

    '新建'

    Button2

    Caption

    '編輯'

    Button3

    Caption

    '刪除'

    DBGrid1

    Align

    alClient


    DataSource

    DataModule2.DataSource1

    表單窗體如下圖:

    表單窗體組件及屬性:

    組件

    屬性

    Label1

    Caption

    '學號'

    Label2

    Caption

    '姓名'

    Label3

    Caption

    '性別'

    Label4

    Caption

    '語文'

    Label5

    Caption

    '數學'

    Label6

    Caption

    '英語'

    Edit1

    Text

    ''

    Edit2

    Text

    ''

    CheckBox1

    Caption

    '男'

    CheckBox2

    Caption

    '女'

    Edit3

    Text

    ''

    Edit4

    Text

    ''

    Edit5

    Text

    ''

    為了在主窗體與表單窗體之間傳遞數據,設計一個數據類,代碼如下:

    unit Unit4;
    
    interface
    
    type
      TStudent = class
        studentId: String;
        name: String;
        sex: String;
        chinese: Double;
        math: Double;
        english: Double;
      end;
    
    implementation
    
    end.

    主窗體代碼:

    uses Unit2, Unit3, Unit4;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // 新建
      Form3.isNew := True;
      if Form3.ShowModal = mrOK then
        with DataModule2.ADOQuery1 do
        begin
          Close;
          Prepared := True;
          Active := True;
        end;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      Student: TStudent;
    begin
      // 編輯
      with DataModule2 do
      begin
        Student := TStudent.Create;
        Student.studentId := ADOQuery1student_id.Value;
        Student.name := ADOQuery1name.Value;
        Student.sex := ADOQuery1sex.Value;
        Student.chinese := ADOQuery1chinese.AsFloat;
        Student.math := ADOQuery1math.AsFloat;
        Student.english := ADOQuery1english.AsFloat;
      end;
    
      Form3.isNew := False;
      Form3.CurrentStudent := Student;
      if Form3.ShowModal = mrOK then
        with DataModule2.ADOQuery1 do
        begin
          Close;
          Prepared := True;
          Active := True;
        end;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      // 刪除
      with DataModule2 do
        begin
          ADOCommand3.Parameters.ParamByName('studentId').Value := ADOQuery1student_id.Value;
    
          ADOCommand3.Prepared := True;
          ADOCommand3.Execute;
    
          ADOQuery1.Close;
          ADOQuery1.Prepared := True;
          ADOQuery1.Active := True;
        end;
    end;

    表單窗體代碼:

    8.ADO組件之ADOQuery組件

    Delphi 的 ADO 組件中另外一個重要的數據集組件是 ADOQuery 組件,需要使用 SQL 語句來進行查詢。

    8.1 ADOQuery 與 ADOTable 的區別

    • ADOQuery 組件的主要功能是用來支持 SQL 語句訪問本地或遠程數據庫。
    • ADOQuery 組件允許同時訪問多個表,而 ADOTable 組件一次只能訪問一個表。
    • ADOQuery 組件訪問的是表中的一個子數據集,即符合條件的特定的數據;而 ADOTable 組件一般訪問的是表上的全部數據。
    • ADOQuery 組件在只有使用 SQL 語句才能完成查詢的時候必須使用該組件,支持復雜的嵌套查詢。

    8.2 ADOQuery 組件的主要屬性

    • SQL - 字符串類型,包含了需要執行的查詢的 SQL 語句

    在 Delphi 應用程序中使用的 SQL 語句可以分為兩種:靜態 SQL 語句和動態 SQL 語句。

    靜態 SQL 語句在程序設計階段,將 SQL 語句作為 ADOQuery 組件的 SQL 屬性值設置,可以通過對象查看器進行設置。

    動態 SQL 語句則在程序運行過程中進行設置,可以動態地給 SQL 語句的參數賦值。在代碼中實現查詢的步驟如下:

    1. 調用 ADOQuery 組件的 Close 方法關閉組件;
    2. 調用 ADOQuery.SQL 的 Clear 方法清除原來的 SQL 語句;
    3. 調用 ADOQuery.SQL 的 Add 方法添加新的 SQL 語句;
    4. 調用 ADOQuery 的 Open 方法或 ExecSQL 方法執行 SQL 語句;

    如:

    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from customers');
    ADOQuery1.Open; 或者 ADOQuery1.ExecSQL;
    • Active

    可以通過設置 Active 屬性為 True 來執行 SQL 語句,一般情況下,通過 ExecSQL 來運行 SQL 語句。如果執行的 SQL 語句有結果集,則可與通過 Open 方法來運行 SQL 語句。

    • Parameters

    該屬性為 TParameters 類型,包含了 SQL 語句中使用的參數。在運行中可以訪問 Parameters 屬性中的參數,也可以通過該屬性給 SQL 參數進行賦值。如:

    ADOQuery.SQL.Add(''SELECT * FROM customers WHERE customer_id = :AnId;');
    
    Param := ADOQuery.Parameters.ParamByName('AnId');
    Param.DataType := ftInteger;
    Param.Value := 1;
    
    ADOQuery.Prepared := true;
    
    try
      ADOQuery.Active := True;
    except
      on e: EADOError do
      begin
        MessageDlg('Error while doing query', mtError, [mbOK], 0);
        Exit;
      end;
    end;
    • DataSource

    該屬性為動態 SQL 語句中存在未賦值的參數時,Delphi 會自動檢查 ADOQuery 組件的 DataSource 屬性,如果為該屬性設置了屬性值,則會把沒有賦值的參數與 DataSource 組件中的各個字段比較,自動將相應的字段賦值給與其相匹配的參數,實現連接查詢。

    • Prepared

    在執行查詢時,可以讓數據庫查詢分配資源并執行查詢優化,也稱為執行查詢前的準備工作。在執行查詢前設置該屬性為 True 會提高應用程序的性能。

    8.3 ADOQuery 組件的主要方法

    • Open

    SQL 語句可以分為兩種,帶有結果集的查詢和執行數據庫維護功能的 SQL 語句。一般情況下,Open 方法用于執行帶有結果集的查詢。

    • ExecSQL

    一般情況下,ExecSQL 方法用于執行沒有結果集返回的 SQL 語句。不過,Delphi 并沒有規定在哪種情況下一定要使用哪種方法,可以使用 Open 來執行所有的 SQL 語句。

    8.4 動態查詢

    ADOQuery 組件的動態 SQL 語句是指帶有參數的 SQL 語句,參數的值在運行過程中動態確定,在程序執行期間參數的值是可變的。如:

    select * from customers where name = :NAME;

    其中:“:NAME” 就是動態 SQL 的參數,運行時必須給定數據。

    在 ADOQuery 組件中,該組件提供了 Parameters 屬性來為參數賦值。

    設計期:

    單擊 ADOQuery 組件的 Parameters 屬性右側的 ... 按鈕,如下圖所示:

    在參數對話框中選擇某個參數名稱,在對象觀察器中可以設置該參數的屬性,包括參數類型、參數值等。

    運行期:

    在運行期,可以使用 Parameters 屬性,以數組的方式進行訪問和設置,也可以使用 ParamByName 方法獲取對應的參數并進行設置。如:

    Param := ADOQuery.Parameters.ParamByName('AnId');
    Param.DataType := ftInteger;
    Param.Value := 1;

    8.5 動態查詢示例

    示例1:輸入姓名查詢數據

    界面設計如下圖所示:

    組件及屬性:

    組件

    屬性

    Panel1

    Align

    alTop


    Caption

    ''

    Label1

    Caption

    '姓名'

    Edit1

    Text

    ''

    Button1

    Caption

    '查詢'

    ADOConnection1

    ConnectionString

    Provider=MSDASQL.1;Persist Security Info=False;Data Source=demodb;


    LoginPrompt

    False


    Connected

    True

    ADOQuery1

    Connection

    ADOConnection1


    SQL

    select * from d_students where name =:NAME


    Active

    False

    DataSource1

    DataSet

    ADOQuery1

    DBGrid1

    Align

    alClient


    DataSource

    DataSource1

    代碼示例:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Param: TParameter;
    begin
      with ADOQuery1 do
      begin
        Close;
        Param := Parameters.ParamByName('NAME');
        Param.DataType := ftString;
        Param.Value :=  Edit1.Text;
    
        Prepared := True;
        Open;
      end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOConnection1.LoginPrompt := False;
      ADOConnection1.Open();
    end;

    示例2:輸入任意 SQL 語句執行

    界面設計如下:

    組件及屬性設置參照上例。

    示例代碼:

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有