Arsip: Masalah di DBGrid yang memakai lebih dari 1 TQuery

 
user image
more 16 years ago

Random

Karena beberapa alasan, sebuah form yang saya buat itu memakai sebuah DBGrid, yang digunakan untuk menampilkan 2 tabel secara bergantian. Kalo kondisi A terpenuhi, maka record dari TabelA yang ditampilkan. Juga sebaliknya untuk kondisi B. Masing-masing memakai sebuah TQuery. Sementara yang menjadi 'wadah' dari kedua TQuery, adalah sebuah TQuery lainnya yang dibuat memakai perintah Union. Karena memakai 2 TQuery, otomatis property DataSource dan DataFieldnya juga saya sesuaikan. Di form tersebut juga ada tombol prev dan next. Nah, di situlah masalah terjadi.

if Trim(dtmItemRequest.qryUnion2.FieldValues['final_yn']) = 'N' then
begin
   edID.DataField := 'ordreq_id';   // ->
   edDate.DataField := 'ordreq_date';   // ->
   edProjectName.DataField := 'project_name';
   edReqPerson.DataField := 'emp_name';
   cboOrderType.DataField := 'ordreq_type';
   edID.DataSource := dtmItemRequest.dscOrdReqH;
   edDate.DataSource := dtmItemRequest.dscOrdReqH;
   edProjectName.DataSource := dtmItemRequest.dscOrdReqH;
   edReqPerson.DataSource := dtmItemRequest.dscOrdReqH;
   cboOrderType.DataSource := dtmItemRequest.dscOrdReqH;
   dbgOrdReq.Columns[2].FieldName := 'ordreq_itemqty';
   dbgOrdReq.Columns[3].FieldName := 'ordreq_itempriceusd';
   dbgOrdReq.Columns[4].FieldName := 'ordreq_itempriceidr';
   dbgOrdReq.Columns[5].FieldName := 'ordreq_stotalpriceusd';
   dbgOrdReq.Columns[6].FieldName := 'ordreq_stotalpriceidr';
   dbgOrdReq.DataSource := dtmItemRequest.dscOrdReqD;
   InitQuery(dtmItemRequest.qryOrdReqH, 'ucode_ordreq', dtmItemRequest.qryUnion2.FieldValues['ucode_ordreqfinal']);
   InitQuery(dtmItemRequest.qryOrdReqD, 'ucode_ordreq', dtmItemRequest.qryUnion2.FieldValues['ucode_ordreqfinal']);
end
else
begin
   edID.DataField := 'ordreqfinal_id';   // ->
   edDate.DataField := 'ordreqfinal_date';   // ->
   edProjectName.DataField := 'project_name';
   edReqPerson.DataField := 'emp_name';
   cboOrderType.DataField := 'ordreqfinal_type';
   edID.DataSource := dtmItemRequest.dscOrdReqFinalH;
   edDate.DataSource := dtmItemRequest.dscOrdReqFinalH;
   edProjectName.DataSource := dtmItemRequest.dscOrdReqFinalH;
   edReqPerson.DataSource := dtmItemRequest.dscOrdReqFinalH;
   cboOrderType.DataSource := dtmItemRequest.dscOrdReqFinalH;
   dbgOrdReq.Columns[2].FieldName := 'ordreqfinal_itemqty';
   dbgOrdReq.Columns[3].FieldName := 'ordreqfinal_itempriceusd';
   dbgOrdReq.Columns[4].FieldName := 'ordreqfinal_itempriceidr';
   dbgOrdReq.Columns[5].FieldName := 'ordreqfinal_stotalpriceusd';
   dbgOrdReq.Columns[6].FieldName := 'ordreqfinal_stotalpriceidr';
   dbgOrdReq.DataSource := dtmItemRequest.dscOrdReqFinalD;
   InitQuery(dtmItemRequest.qryOrdReqFinalH, 'ucode_ordreqfinal', dtmItemRequest.qryUnion2.FieldValues['ucode_ordreqfinal']);
   InitQuery(dtmItemRequest.qryOrdReqFinalD, 'ucode_ordreqfinal', dtmItemRequest.qryUnion2.FieldValues['ucode_ordreqfinal']);
InitQuery itu prosedur buat open TQuery-nya, sesuai parameter yang dikirim. Sementara, isi dari tombol Prev adalah :

dtmItemRequest.qryUnion2.Prior;
if not dtmItemRequest.qryUnion2.Bof then
begin
   PrevNext := true;
   ClearForm;
   Connect2;
   IsiForm;
   FinanceMenu;
end
else
begin
   application.MessageBox('This is the first record.','Info',MB_OK);
   dtmItemRequest.qryUnion2.First;
end;
prevnext := false;
Di bagian yang saya kasih tanda " // -> ", terkadang memunculkan pesan error : edDate: Field 'ordreq_date' not found. Susahnya, kayaknya ga ada 'patokan' tertentu kapan error itu terjadi. Bisa tiba-tiba aja di sebuah record muncul pesan error. Tapi ketika dicoba lagi, ga error. Nah, kira-kira kenapa ya masalahnya ?
user image
more 16 years ago

DelphiExpert

nil kan terlebih dahulu property DataSource sebelum mengeset DataField property / set DataSource terlebih dahulu sebelum set DataField property
user image
more 16 years ago

bagussb

bro.. ini hanya sekedar saran aja.. dibanding ngeset ulang semua property untuk query yang baru kenapa ngga query barunya aja dibuat alias untuk nama fieldnya... jadinya ngga usah ngeset ulang property komponentnya.. jadinya query kira2 seperti ini : SELECT ordreqfinal_id AS ordreq_id, ordreqfinal_date AS ordreq_date, ... dst..
user image
more 16 years ago

MrLee

kayaknya enak di akal-akalin gini; Buat dua buah DBgrid; DBGrid yg ingin di tampilkan VISIBLE:=True; DBGrid yg tidak ingin di tampilkan VISIBLE:=False; Mudah-mudahan bisa berguna;
user image
more 16 years ago

Random

Aduh maaf, kayaknya pas ngepost kemarin, saya 'mabok' deh. Ga ada hubungannya saya nyebut-nyebut DBGridnya, karena sebetulnya ID dan Date itu pakenya DBEdit.... Kalo di DBGridnya kayaknya malah ga error... (tapi emang bener kalo property DataSource di DBGridnya juga disesuaikan) @DE : yang ngeset DataSource dulu sebelum DataField kemarin udah saya coba, tapi masih tetap error. Nanti saya coba dulu yang me-nil-kan itu.. @bagussb : ah, kayaknya bisa juga. Soalnya kalo ga salah inget, errornya kayaknya selalu di xxx_id sama xxx_date. Untuk field yang namanya sama, ga terjadi.... Tapi saya musti cek dulu sih konsekuensinya, soalnya ada banyak proses lain yang memakai isi TQuery tsb.. @MrLee : Err... kesalahan ngejelasin pertanyaannya udah saya koreksi yah. Jadi masalahnya bukan di DBGridnya. Tapi emang sebenernya itu ide saya pertama kali sih, cuma ya itu... masa untuk tiap field yang pake komponen DBEdit atau DBComboBox, dipake dua komponen... kesannya jadi ga efisien... apalagi kalo field yang mau ditampilkan makin banyak
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com