ผู้เขียน หัวข้อ: getsqldata แบบหลายๆ ตัวพี่ๆ ทำกันแบบไหนแนะนำผมหน่อยครับ  (อ่าน 3264 ครั้ง)

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

ออฟไลน์ chearn

  • Newbie
  • *
  • กระทู้: 42
  • Respect: 0
    • ดูรายละเอียด
    • @pump_upp - best crypto pumps on telegram !
สวัสดีครับ ผมเพิ่งย้ายมาทำ กำลังหัดเล่น เรื่อง popup อยู่แล้วตอนนี้กำลังจะเอาค่าไตมาโชว์ครับใน SYS_VN_PRE_SCRIPT ทีนี้ ผมเขียน query ไว้แล้ว 1 ชุด ประมาณนี้

select p.sex,YEAR(current_date)-YEAR(p.birthday) as age ,opdsc.bw as weigh,(select lab_order_result from lab_order where lab_items_code = '78' and confirm ='Y' and lab_order_number = (select lab_order_number from lab_head where vn = '510506083000' and confirm_report = 'Y'))
 as test from opdscreen opdsc
left join patient p on p.hn = opdsc.hn
where opdsc.vn = '510506083000';

ค่า result ที่ได้รับมันได้ 4 ตัว ตามที่ต้องการแต่ผมจะหมดแล้ว แต่ผม จะ parse ใส่ ใน pascal ยังไงหรอครับ แบบให้มัน เป็นตัวแปล เดียวแล้ว pointer เอาได้ไหมครับ เช่น result.age, result.weight, result.lab_order....

ตอนนี้เลยใช้ท่านี้ก่อนครับ 55555 ขอคำแนะนำหน่อยครับพี่ๆ
[ Guests cannot view attachments ]

ออฟไลน์ BlueEye

  • Newbie
  • *
  • กระทู้: 40
  • Respect: +5
    • ดูรายละเอียด
ถ้าคิวรี่ออกมาแค่ row เดียว field เดียว จะใช้แบบนี้ก็ได้ครับ
fhn := GetSQLdata('select hn from ovst where vn = "'+fvn+'"');

----------------------------------------------------------------------------------
แต่ถ้าต้องการคิวรี่ออกมา row เดียว แต่หลาย field ก็ใช้แบบนี้ครับ

procedure .........
var
   sql, f1, f2: string;
   tmp: TClientDataset;

begin
   sql := 'SELECT field1, field2, ... FROM ..............';
   tmp.data := HOSxP_GetDataSet(sql);

   //เวลาจะใช้งานก็แบบนี้ครับ
   f1 := tmp.FieldByName('field1').AsString;
   f2 := tmp.FieldByName('field2').AsString;
   //ก็เอา result ที่ได้มาใส่เข้าไปใน client dataset เลยก็ได้ ****************
end;
----------------------------------------------------------------------------------
ถ้า result คิวรี่ออกมามีหลาย row
ก็เอา result ที่ได้มาใส่เข้าไปใน client dataset เลยก็ได้ ****************
หรือใช้วิธีการ loop เอาข้อมูลมาใช้ หรืออาจจะคำนวนออะไรก่อนก็ได้ครับ

procedure .........
var
   sql, f1: string;
   tmp: TClientDataset;

begin
   sql := 'SELECT field1, field2, ... FROM ..............';
   try
      tmp.data := HOSxP_GetDataSet(sql);
      while not tmp.eof do begin

               f1 := tmp.FieldByName('field1').AsString;
               tmp.Next;
          end;
   except
      on E : Exception do Exit;
   end;
end;

----------------------------------------------------------------------------------
โดยคำนึงถึงการ except error เอาไว้ด้วยเพื่อป้องกันการผิดพลาดของโปรแกรม
Si Prachan Hospital : Suphanburi
OS : CentOS 7
MySQL : MariaDB 10.1.22

ออฟไลน์ chearn

  • Newbie
  • *
  • กระทู้: 42
  • Respect: 0
    • ดูรายละเอียด
    • @pump_upp - best crypto pumps on telegram !
ถ้าคิวรี่ออกมาแค่ row เดียว field เดียว จะใช้แบบนี้ก็ได้ครับ
fhn := GetSQLdata('select hn from ovst where vn = "'+fvn+'"');

----------------------------------------------------------------------------------
แต่ถ้าต้องการคิวรี่ออกมา row เดียว แต่หลาย field ก็ใช้แบบนี้ครับ

procedure .........
var
   sql, f1, f2: string;
   tmp: TClientDataset;

begin
   sql := 'SELECT field1, field2, ... FROM ..............';
   tmp.data := HOSxP_GetDataSet(sql);

   //เวลาจะใช้งานก็แบบนี้ครับ
   f1 := tmp.FieldByName('field1').AsString;
   f2 := tmp.FieldByName('field2').AsString;
   //ก็เอา result ที่ได้มาใส่เข้าไปใน client dataset เลยก็ได้ ****************
end;
----------------------------------------------------------------------------------
ถ้า result คิวรี่ออกมามีหลาย row
ก็เอา result ที่ได้มาใส่เข้าไปใน client dataset เลยก็ได้ ****************
หรือใช้วิธีการ loop เอาข้อมูลมาใช้ หรืออาจจะคำนวนออะไรก่อนก็ได้ครับ

procedure .........
var
   sql, f1: string;
   tmp: TClientDataset;

begin
   sql := 'SELECT field1, field2, ... FROM ..............';
   try
      tmp.data := HOSxP_GetDataSet(sql);
      while not tmp.eof do begin

               f1 := tmp.FieldByName('field1').AsString;
               tmp.Next;
          end;
   except
      on E : Exception do Exit;
   end;
end;

----------------------------------------------------------------------------------
โดยคำนึงถึงการ except error เอาไว้ด้วยเพื่อป้องกันการผิดพลาดของโปรแกรม


ขอบคุณครับพี่ แบบนี้เลย