Arsip: Masalah Paramater pada Procedure ???

 
user image
more 11 years ago

ranum

saya punya masalah neh, saya mau masukin tabel dari SQL server ke StringGrid, saya coba buiat procedure tapi kok gak bisa ya ... Malah ada pesan error 'not enough actutal paramater' Ada yang bisa bantu ...??? Coding saya seperti ini :

procedure Utama(Item:Integer);
var
 Utama : String;
begin
try
  DataModule1.ADOConnection1.BeginTrans;
  with DataModule1.ADOQuery1 do
  begin
    Utama :=  'SELECT KodeKls, KlsBrg AS Klasifikasi, COUNT(KdTrans) AS Jumlah'+
              'FROM tbl_raw_data'+
              'GROUP BY KodeKls, KlsBrg'+
              'ORDER BY Jumlah DESC';
    DataModule1.ADOQuery1.Active := False;
    DataModule1.ADOQuery1.SQL.Add(Utama);
    DataModule1.ADOQuery1.Active := True;
  end;
  DataModule1.ADOConnection1.CommitTrans;
except
  DataModule1.ADOConnection1.RollbackTrans;
end;
end;
procedure TItemsetGeneratorForm.FormShow(Sender: TObject);
var
i : integer;
begin
  Utama(Utama);
  if DataModule1.ADOQuery1.RecordCount <> 0 then
  begin
    StringGrid1.RowCount := DataModule1.ADOQuery1.RecordCount+1;
    for i := 0 to DataModule1.ADOQuery1.RecordCount-1 do
    begin
      StringGrid1.Cells[0,i+1] := DataModule1.ADOQuery1.Fields[0].AsString;
      StringGrid1.Cells[1,i+1] := DataModule1.ADOQuery1.Fields[1].AsString;
      StringGrid1.Cells[2,i+1] := DataModule1.ADOQuery1.Fields[2].AsString;
      DataModule1.ADOQuery1.Next;
    end;
  end;
end;
user image
more 11 years ago

delphinewbie

procedure TItemsetGeneratorForm.FormShow(Sender: TObject); var i : integer; begin Utama(Utama); <- kayanya disini errornya mungkin sebaiknya anda tidak menggunakan nama prosedur untuk nama variabel seperti pada prosedur utama anda mendeklarasikan variabel lokal dengan nama utama juga..
user image
more 11 years ago

ImanD

@ranum pesan error tersebut memang merujuk pada apa yg di tunjuk @delphinewbie. klo menurut saya setelah kamu benerin masalah di atas ada error lg yakni procedure utama harus terdaftar pada TItemsetGeneratorForm, nama variable local ga boleh sama dengan nama procedure dan error syntax SQL yg di tampung pada variable local Utama ga ada spasi

procedure TItemsetGeneratorForm.Utama(Item:Integer); // jangan lupa daftarkan pada Private declarations atw Public declarations sesuai kebutuhan
var 
 Utama : String; // variable ganti
begin 
  try 
    DataModule1.ADOConnection1.BeginTrans; 
    with DataModule1.ADOQuery1 do 
    begin 
      Utama :=  'SELECT KodeKls, KlsBrg AS Klasifikasi, COUNT(KdTrans) AS Jumlah'+ // jangan lupa tambah spasi di ujung string
                'FROM tbl_raw_data'+         // jangan lupa tambah spasi di ujung string atw awal string
                'GROUP BY KodeKls, KlsBrg'+  // jangan lupa tambah spasi di ujung string atw awal string
                'ORDER BY Jumlah DESC';      // jangan lupa tambah spasi awal string jika di ujung string sebelumnya ga di kasih spasi
      DataModule1.ADOQuery1.Active := False; 
      DataModule1.ADOQuery1.SQL.Add(Utama); 
      DataModule1.ADOQuery1.Active := True; 
    end; 
    DataModule1.ADOConnection1.CommitTrans; 
  except 
    DataModule1.ADOConnection1.RollbackTrans; 
  end; 
end;
notes: parameter Item ga dipake, buat apa ya? atw jika ga mau di daftar procedure utama simpan di dalam procedure FormShow.

procedure TItemsetGeneratorForm.FormShow(Sender: TObject); 
  procedure Utama; 
  var 
   VarUtama : String; 
  begin 
    try 
      DataModule1.ADOConnection1.BeginTrans; 
      with DataModule1.ADOQuery1 do 
      begin 
        VarUtama :=  'SELECT KodeKls, KlsBrg AS Klasifikasi, COUNT(KdTrans) AS Jumlah '+
                     'FROM tbl_raw_data '+         
                     'GROUP BY KodeKls, KlsBrg '+ 
                     'ORDER BY Jumlah DESC ';     
        DataModule1.ADOQuery1.Active := False; 
        DataModule1.ADOQuery1.SQL.Add(VarUtama); 
        DataModule1.ADOQuery1.Active := True; 
      end; 
      DataModule1.ADOConnection1.CommitTrans; 
    except 
      DataModule1.ADOConnection1.RollbackTrans; 
    end; 
end;

var 
i : integer; 
begin 
  Utama;
  if DataModule1.ADOQuery1.RecordCount <> 0 then 
  begin 
    StringGrid1.RowCount := DataModule1.ADOQuery1.RecordCount+1; 
    for i := 0 to DataModule1.ADOQuery1.RecordCount-1 do 
    begin 
      StringGrid1.Cells[0,i+1] := DataModule1.ADOQuery1.Fields[0].AsString; 
      StringGrid1.Cells[1,i+1] := DataModule1.ADOQuery1.Fields[1].AsString; 
      StringGrid1.Cells[2,i+1] := DataModule1.ADOQuery1.Fields[2].AsString; 
      DataModule1.ADOQuery1.Next; 
    end; 
  end; 
end;
user image
more 11 years ago

ranum

Terima Kasih semuanya .... Akan saya coba rubah seperti saran bang ImanD :) Soal paramater item aku khan merujuk pada deklarasi procedure yg aku baca di buku seperti di bawah ini procedure <Nama Procedure>(Paramater); <Deklarasi_variabel_Lokal> Begin <Pernyataan>; ..................... ..................... <pernyataan>; End; Tapi aku bingung juga mau di kasi paramater apa, akhirnya aku kasi paramater item, meski aku juga bingung paramater item itu dipakai buat apa :D
user image
more 11 years ago

ImanD

@ranum good job bro, tetap semangat. saya akan kasih pencerahan sedikit u/ masalah Parameter Jika prosedur yg kita buat tidak memerlukan parameter maka ga usah pke parameter. contoh bisa di lihat dari postingku di atas tanpa parameter. semangat terus ya.
user image
more 11 years ago

ranum

Wait .. nanya Lagi dunk, setelah codingnya aku rubah menjadi seperti ini (Mengikuti Saran bang ImanD )

procedure TItemsetGeneratorForm.FormShow(Sender: TObject);
  procedure Utama;
  var
    VarUtama : String;
    begin
    try
      DataModule1.ADOConnection1.BeginTrans;
      with DataModule1.ADOQuery1 do
    begin
      VarUtama := 'SELECT KodeKls, KlsBrg AS Klasifikasi, COUNT(KdTrans) AS Jumlah '+
                  'FROM tbl_raw_data '+
                  'GROUP BY KodeKls, KlsBrg '+
                  'ORDER BY Jumlah DESC ';
      DataModule1.ADOQuery1.Active := False;
      DataModule1.ADOQuery1.SQL.Add(VarUtama);
      DataModule1.ADOQuery1.Active := True;
    end;
    DataModule1.ADOConnection1.CommitTrans;
  except
  DataModule1.ADOConnection1.RollbackTrans;
  end;
  end;
var
i : integer;
begin
  Utama;
  if DataModule1.ADOQuery1.RecordCount <> 0 then
  begin
    StringGrid1.RowCount := DataModule1.ADOQuery1.RecordCount+1;
    for i := 0 to DataModule1.ADOQuery1.RecordCount-1 do
    begin
      StringGrid1.Cells[0,i+1] := DataModule1.ADOQuery1.Fields[0].AsString;
      StringGrid1.Cells[1,i+1] := DataModule1.ADOQuery1.Fields[1].AsString;
      StringGrid1.Cells[2,i+1] := DataModule1.ADOQuery1.Fields[2].AsString;
      DataModule1.ADOQuery1.Next;
    end;
  end;
end;
Sudah tidak ada pesan error lagi dan sudah bisa aku Run, Tetapi ketika aku klik menu Form Itemset Generator tiba tiba muncul pesan Debugger Exception Notification yang isinya seperti ini : "Operation is not allowed when object is closed" Itu kesalahannya karen apa yak ? Ada yang bisa bantu lagi ?
user image
more 11 years ago

ranum

Ternyata setelah dihilangkan Try and Except Masalah sudah terselesaikan terima kasih ....
more ...
  • Pages:
  • 1
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com