วันอังคารที่ 16 ธันวาคม พ.ศ. 2557

Delphi กับการทำ Form Search (ค้นหา) แบบเจ๋งๆ

Delphi กับการทำ Form Search (ค้นหา) แบบเจ๋งๆ


เริ่มกันที่การติดต่อฐานขอมูลอันนี้ผมขอใช้ Component Zeosdbo และฐานข้อมูล MySQl ในการทำตัวอย่างนี้นะครับ โดยส่วนต่อฐานข้อมูลผมจะวางเอาไว้ที่ Data Module ตามภาพด้านล่าง ซึ่งประกอบด้วย Zconnection , ZQuery , DataSetProvider ทั้งหมด 3 ตัว ซึ่งในส่วนของการเซ็ตค่า Properties การเชื่อต่อฐานข้อมูลผมไม่ขอพูดถึงแล้วกันนะครับเพราะสามารถหาดูได้ทั่วไป

ภาพ Data Module


มาต่อกันนะครับ ให้เราสร้าง VCL Form ขึ้นมา 1 อันครับ ซึ่งใน Form เราเราหยิบ Component ดังต่อไปนี้มาวางนะครับ Edit , DBGride , ClientDataSet , DataSource วางเสร็จก็จะมีตามภาพด้านล่างนี้นะครับ



         เมื่อทำการสร้าง Form และวาง Component เสร็จ เราก็มาเริ่มที่ Edit โดยเราจะใส่ Code การค้นหาใน Event OnKeyUp ของตัว Edit1 โดยผมจะเขียนดังนี้นะครับ


procedure TSearchDataF.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (VarToStr(Key) <> '38') and (VarToStr(Key) <> '40') and (VarToStr(Key) <> '13') then
    begin
      DataModule1.ZQuery1.Close;
      DataModule1.ZQuery1.SQL.Text := ' select  code, name  '+
      ' from “????Table????” '+
      ' where name like "%'+Edit1.Text+'%" limit 100 ';
      DataModule1. ZQuery1.Open;

      ClientDataSet1.Close;
      ClientDataSet1.SetProvider(ClassDMU.DataSetProvider1);
      ClientDataSet1.Open;
    end;
end;

         ซึ่งจะมีการตรวจเช็คค่าการกดคีย์บอร์ดต้องไม่ใช่ปุ่ม Enter , Up , และ Down ก็จะทำในส่วนของการค้นหาขอมูลในฐานข้อมูลแบบ Like เพื่อที่เราจะเอาการกดคีย์บอร์ด Enter , Up , และ Down ไปใช้อย่างอื่น ซึ่งคีย์ Up และ Down เราจะเอาไปใช้ในการเลื่อนตัวเลือก Row ใน DBGrid นั้นเองนะครับ ส่วน Enter เราใช้เมื่อเราเลือกรายการแล้ว
         ต่อมาเขียน Event OnKeyDown ของตัว Edit1 ซึ่งจะเป็นส่วนของการเลื่อน Select Row ของ DBGrid จากการที่เราเลื่อนค่าของ ClientDataSet1 ซึ่งจะไม่ทำให้การ Focus ย้ายออกจาก Edit1 เพื่อให้เราสามารถพิมพ์คำค้นหาเพิ่มต่อได้เลยโดยไม่ต้องใช้เมาส์เลื่อนไปคลิกเลือกสลับไปมาระหว่าง Edit1 และ DBgrid

procedure TSearchDataF.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var Message: TCMDialogKey;
begin
                if (VarToStr(Key) = '38') or (VarToStr(Key) = '40') then
                begin     
                                if VarToStr(Key) = '38' then ClientDataSet1.Prior;
                                if VarToStr(Key) = '40' then ClientDataSet1.Next;
                                Key := 0;   
                end;
end;



เท่านี้คุณก็จะได้ Form สำหรับ Search (ค้นหา) ที่ง่ายๆแต่เจ๋งๆไปใช้กัน สามารถค้นหาจากบางคำในประโยคนั้นได้ และสามารถทำงานด้วยคีย์บอร์ดยางเดียวโดยไม่ต้องใช้เมาส์คลิกไปมาให้เสียอารมณ์ ที่เหลือก็แค่เอาไปดัดแปลงใช้กันนะครับ ไม่ยากครับติดส่วนไหนก็ถามได้นะครับ




ไม่มีความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็น