Beruflich Dokumente
Kultur Dokumente
{ Private declarations }
interface public
{ Public declarations }
uses end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, DBTables, ComCtrls, IBDatabase, var
IBCustomDataSet, IBQuery, ExtCtrls; FApriori: TFApriori;
C : integer;
type
TFApriori = class(TForm) implementation
Query: TQuery;
Panel1: TPanel; uses DateUtils;
Panel2: TPanel;
Panel3: TPanel; {$R *.dfm}
Label1: TLabel;
Label2: TLabel; procedure TFApriori.FormShow(Sender: TObject);
EdtMinTransaksi: TEdit; begin
EdtMinConfidence: TEdit; C := 0;
BitBtn1: TBitBtn; Memo1.Clear;
Panel4: TPanel; end;
BitBtn2: TBitBtn; -----------------------------------------------------------------------------------------------------------
Memo1: TMemo; procedure TFApriori.BitBtn2Click(Sender: TObject);
Bevel2: TBevel; begin
Bevel3: TBevel; Close;
Bevel1: TBevel; end;
Label3: TLabel; -----------------------------------------------------------------------------------------------------------
EdtTotalTransaksi: TEdit; procedure TFApriori.Button1Click(Sender: TObject);
Query1: TQuery; var Awal,Akhir,Selisih,Waktu:Double;
Button1: TButton; begin
Edit1: TEdit; Awal := GetTickCount;
Label4: TLabel; Apriori;
procedure FormShow(Sender: TObject); Akhir := GetTickCount;
procedure BitBtn2Click(Sender: TObject); Selisih := Akhir - Awal;
procedure Button1Click(Sender: TObject); Waktu := Selisih / 1000;
procedure apriori; Edit1.Text:= ''+chr(10)+FloatToStr(waktu)+' Detik';
end;
except
procedure TFApriori.apriori; end;
var i,j,k,temp,total_transaksi, min_transaksi : integer;
min_confidence : real; Close;
keluar: boolean; SQL.Text :=
antecedent, konklusi : string; ' INSERT INTO C1 '+
begin ' SELECT KodeBuku, count(NoTrans) '+
min_transaksi := StrToInt(EdtMinTransaksi.text); ' FROM [Pinjam Details] '+
min_confidence := StrToFloat(EdtMinConfidence.Text); ' GROUP BY KodeBuku '+
Memo1.Clear; ' HAVING count(NoTrans) >= ' +
with Query do //SQL : select NoTrans, count(KodeBuku) from [Pinjam Details] group by NoTrans IntToStr(min_transaksi) +
begin ' ORDER BY KodeBuku';
Close; ExecSQL;
SQL.Text := //end of mengambil item yang memenuhi syarat (C1)
' SELECT count(NoTrans) '+
' FROM Pinjam '; //mengambil item yang memenuhi syarat (C2 dst)
Open; while not keluar do
begin
EdtTotalTransaksi.Text := Fields[0].AsString; inc(C);
total_transaksi := Fields[0].AsInteger;
Close;
//mengambil item yang memenuhi syarat (C1) SQL.Text := 'DROP TABLE C' + IntToStr(C);
C := 1; try
Close; ExecSQL;
SQL.Text := 'DROP TABLE C1'; except
try end;
ExecSQL;
except //buat tabel
end; Close;
SQL.Text := ' CREATE TABLE C' + IntToStr(C) + ' ( ';
Close; for i := 1 to C do
SQL.Text := SQL.Add(' ITEM' + IntToStr(i) + ' INTEGER, ');
' CREATE TABLE C1 ( '+ SQL.Add(' JML INTEGER)');
' ITEM1 INTEGER, '+ try
' JML INTEGER)'; ExecSQL;
try except
ExecSQL; end;
//hapus isi tabel yg tidak memenuhi syarat
//isi tabel Close;
Close; SQL.Text := ' DELETE FROM C'+ IntToStr(C) +
SQL.Text := 'INSERT INTO C'+ IntToStr(C) + ' WHERE JML <= '+
' SELECT DISTINCT '; FloatToStr(min_transaksi);
try
for i := 1 to C-1 do ExecSQL;
SQL.Add (' P.ITEM' + IntToStr(i) +', '); except
SQL.Add(' Q.ITEM' + IntToStr(C-1) +', '+ end;
' (SELECT COUNT(O.NOTRANS) '+
' FROM Pinjam O '+ //cek isi tabel
' WHERE (SELECT COUNT (*) FROM [Pinjam Details] D '+ Close;
' WHERE D.KODEBUKU IN ('); SQL.Text := ' SELECT * FROM C'+ IntToStr(C) ;
Open;
for i := 1 to C-1 do
SQL.Add (' P.ITEM' + IntToStr(i) +', '); if IsEmpty then keluar := true;
SQL.Add(' Q.ITEM' + IntToStr(C-1) +') '+ end; //end of while not keluar do
' AND D.NOTRANS= O.NOTRANS) >= '+ IntToStr(C) + ') '+
' FROM C'+ IntToStr(C-1) + ' P, C'+ IntToStr(C-1) + ' Q '+ //end of mengambil item yang memenuhi syarat (C2 dst)
' WHERE Q.ITEM'+ IntToStr(C-1) + ' > P.ITEM' + IntToStr(C-1) );
//Hitung confidence
for i := 2 to C-1 do for i := 2 to C-1 do
SQL.Add(' AND P.ITEM' + IntToStr(i) + ' > P.ITEM' + IntToStr(i-1) ); begin
SQL.Add(' ORDER BY '); Close;
for i := 1 to C-1 do SQL.Text := 'SELECT * FROM C' + IntToStr(i) + ' ORDER BY JML DESC';
SQL.Add (' P.ITEM' + IntToStr(i) +', '); Open;
SQL.Add(' Q.ITEM' + IntToStr(C-1)); while not eof do
try begin
ExecSQL; temp := 0;
except for j := i downto 1 do
end; begin
Query1.Close;
Query1.SQL.Text := ' SELECT JML FROM C' + IntToStr(i-1) + ' WHERE ';
for k := 1 to i-1 do
begin
Query1.SQL.Text := Query1.SQL.Text + ' item' + IntToStr(k) + ' = ' ;
if temp = k then
begin end; //end of with query do
Query1.SQL.Text := Query1.SQL.Text + Fields[temp].AsString + ' and '; end;
temp := temp + 2
end else end.
begin
Query1.SQL.Text := Query1.SQL.Text + Fields[temp].AsString + ' and ';
temp := temp + 1
end
end;
Query1.SQL.Text := copy(Query1.SQL.Text,1, length(Query1.SQL.Text)-7);
Query1.Open;