ผู้เขียน หัวข้อ: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ  (อ่าน 8260 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ James011

  • Hero Member
  • *****
  • กระทู้: 1,743
  • Respect: +16
    • ดูรายละเอียด
Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« เมื่อ: ธันวาคม 20, 2009, 16:02:19 PM »
0
Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ

ออฟไลน์ ไพโรจน์

  • Newbie
  • *
  • กระทู้: 8
  • Respect: 0
    • ดูรายละเอียด
Re: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« ตอบกลับ #1 เมื่อ: ธันวาคม 20, 2009, 23:18:46 PM »
0
ตัว clientdataset จะ ดึงข้อมูลมาไว้ในตัวมัน  แล้วกรณีเรา  (add,edit,update) มันจะทำใน  memory  ก่อน ซึ่งไม่ได้มีผลกับ ข้อมูล server จริง  (ไม่ทำให้ server ทำงานหนัก)  อย่าง กรณี user แก้ไข เปลี่ยนแปลง ข้อมูลที่ grid (หน้าจอการเงิน)  ก็ไม่ได้มีผลกับข้อมูลจริง ที่ server  จนกระทั่งใช้ คำสั่ง post  คือการบันทึกลงใน memory  และใช้คำสั่ง applyupdate(-1)  คือการบันทึกเข้า server จริง เฉพาะที่มีการเปลี่ยนแปลง (delta) ครับ ซึ่งรูปแบบการใช้งาน
 
    Zconnecttion --> Zquery-->datasetprovider-->clientdateset-->datasource

แต่เนื่องจาก เราใช้ functon HOSxP_Getdatset('select........')  ฟังก์ชั่นนี้ จะสร้าง รูปแบบข้างบน แบบ runtime ไว้ให้อยู่แล้วครับ  ซึ่ง ก็จะ ส่งค่า data ของ clientdatset มาให้   
   cds1.data := HOSxP_Getdataset('select....');
ส่วน ขั้นตอนบันทึก 
   HOSxP_UpdateDelta(cds1.delta,'select....')  บันทีกเฉพาะมีการเปลี่ยนแปลง delta 
        ซึ่ง รูทีนนี้ มีคำสั่ง applyupdate(-1) อยู่แล้วครับ
และข้อดีอีกอย่าง สามารถ ทำ database แบบ local ได้ ก็ พวกไฟล์ cds น่ะครับ  รวมทั่้ง ไฟล์ xml ด้วยครับ จากคุณสมบัติ clientdateset ครับ  และอีกอย่างครับ กรณี จะเขียน เป็น 3 tier หนีไม่พ้นครับ ต้องใช้ clientdataset ครับ

ส่วน Zquery กรณีเรา  (add,edit,update) แล้ว post มันส่งคำสั่ง ไปที่ server ทันที  เหมาะกับการเขียน c/s ครับ

 

 

ออฟไลน์ James011

  • Hero Member
  • *****
  • กระทู้: 1,743
  • Respect: +16
    • ดูรายละเอียด
Re: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« ตอบกลับ #2 เมื่อ: ธันวาคม 21, 2009, 09:30:45 AM »
0
 ;D ;D ;D ตอบได้โดนใจจริงๆๆครับ thank ให้เลยครับ  ขอบคุณครับ   ;D ;D

doramon

  • บุคคลทั่วไป
Re: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« ตอบกลับ #3 เมื่อ: ธันวาคม 21, 2009, 17:44:59 PM »
0
ตัว clientdataset จะ ดึงข้อมูลมาไว้ในตัวมัน  แล้วกรณีเรา  (add,edit,update) มันจะทำใน  memory  ก่อน ซึ่งไม่ได้มีผลกับ ข้อมูล server จริง  (ไม่ทำให้ server ทำงานหนัก)  อย่าง กรณี user แก้ไข เปลี่ยนแปลง ข้อมูลที่ grid (หน้าจอการเงิน)  ก็ไม่ได้มีผลกับข้อมูลจริง ที่ server  จนกระทั่งใช้ คำสั่ง post  คือการบันทึกลงใน memory  และใช้คำสั่ง applyupdate(-1)  คือการบันทึกเข้า server จริง เฉพาะที่มีการเปลี่ยนแปลง (delta) ครับ ซึ่งรูปแบบการใช้งาน
 
    Zconnecttion --> Zquery-->datasetprovider-->clientdateset-->datasource

แต่เนื่องจาก เราใช้ functon HOSxP_Getdatset('select........')  ฟังก์ชั่นนี้ จะสร้าง รูปแบบข้างบน แบบ runtime ไว้ให้อยู่แล้วครับ  ซึ่ง ก็จะ ส่งค่า data ของ clientdatset มาให้   
   cds1.data := HOSxP_Getdataset('select....');
ส่วน ขั้นตอนบันทึก 
   HOSxP_UpdateDelta(cds1.delta,'select....')  บันทีกเฉพาะมีการเปลี่ยนแปลง delta 
        ซึ่ง รูทีนนี้ มีคำสั่ง applyupdate(-1) อยู่แล้วครับ
และข้อดีอีกอย่าง สามารถ ทำ database แบบ local ได้ ก็ พวกไฟล์ cds น่ะครับ  รวมทั่้ง ไฟล์ xml ด้วยครับ จากคุณสมบัติ clientdateset ครับ  และอีกอย่างครับ กรณี จะเขียน เป็น 3 tier หนีไม่พ้นครับ ต้องใช้ clientdataset ครับ

ส่วน Zquery กรณีเรา  (add,edit,update) แล้ว post มันส่งคำสั่ง ไปที่ server ทันที  เหมาะกับการเขียน c/s ครับ

 




ไม่ทัน   ;D

ออฟไลน์ ไพโรจน์

  • Newbie
  • *
  • กระทู้: 8
  • Respect: 0
    • ดูรายละเอียด
Re: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« ตอบกลับ #4 เมื่อ: ธันวาคม 23, 2009, 13:30:07 PM »
0
ขออธิบายเพิ่มเติม ในส่วนการสร้าง Object แบบ Runtime ครับ
ปกติ เราต้องประกาศตัวแปร เป็น ประเภท oject นั้นๆ เช่น
var
  tc : Tclientdataset;   ประกาศตัวแปร tc เป็นประเภท Clientdataset

begin
  tc := Tclientdataset.create(ระบุความเป็นเจ้าของของ Oject ที่สร้าง);
end;   
    พารามิเตอร์ ที่ระบุ มี 3 แบบ ครับ
  nil ,self และ Application
 
    ทำไมต้องระบุ ความเป็นเจ้าของ   เพราะ มันจะทำหน้า free Oject ให้เราเอง (คืนหน่วยความจำ)
    ถ้า ระบุ  nil (ไม่มีเจ้าของ)  เราต้อง free เอง
  tc := Tclientdataset.create(nil);
  try
     .....
     ......
  finally
   tc.free;
  end;
 
     ถ้าระบุ Self หมายถึง Form ที่ Oject เราเกาะอยู่  Form จะทำหน้าที่ Free ให้เราเอง
   tc := Tclientdataset.create(self);
 
    ถ้าระบุ Application หมายถึง โปรแกรม exe เรา เมื่อปิดโปรแกรม จะ free ให้เรา
   tc := Tclientdataset.create(Application);

   กรณี เราสร้าง Class เราไม่ต้องระบุเจ้าของ ครับ เช่น
 var  sl : TStringlist;
 
 begin
     sl := TStringlist.create;
     try
       ....
       ....
     finally
        sl.free;
  end;

 
 ถ้าอธิบายผิดพลาดประการใด ขออภัยด้วยครับ  หรือรบกวนผู้รู้ อธิบาย ให้ถูกต้องอีกที ครับ
 หรือ รบกวน อ.อ๊อด  ด้วยครับ  ผมเองก็มือใหม่ ครับ   :) :)



 

ออฟไลน์ LDHP

  • Full Member
  • ***
  • กระทู้: 128
  • พิศมัย พื้นนวล พยาบาลชำนาญการ - โรงพยาบาลลำดวน
  • Respect: 0
    • ดูรายละเอียด
Re: Zquery กับ CIientdataset มันดีแตกต่างกันไงคับ
« ตอบกลับ #5 เมื่อ: กันยายน 04, 2010, 23:25:43 PM »
0
หาคำตอบมานานมากแล้ว ว่าทำไมจะต้อง เป็น
 tc := Tclientdataset.create(nil);
ขอบคุณมากมาย
master : ibm 3350 xeon 2.66GHz ram 2G  HD 144
  cenos 5.3 mysql 5.1.30

     slave : P4  2.8GHz  ram 2G HD 80G
        redhat 5.0 mysql 5.0.41


ขอขอบคุณท่านอาจารย์ทั้งหลายนะค่ะ ที่ช่วยเหลือให้ความรู้มากมาย