Arsip: error EAccessViolation

 
user image
more 13 years ago

l1th1um

ane bikin form kayak di bawah ini klo klik cek maka dipanggil prosedur ini

procedure ambilBulan;
var
  thn,blnSblm : string;
  thnSkrg : integer;
begin
 thn := Form2.CBTahun.Text;
 if (Form2.CBBulan.Text = 'Januari') then
     begin
      thnSkrg := StrToInt(Form2.CBTahun.Text);
      thn := IntToStr (thnSkrg - 1);
      blnSblm := 'Desember';
    end
 else if (Form2.CBBulan.Text = 'Februari') then
    blnSblm := 'Januari'
 else if (Form2.CBBulan.Text = 'Maret') then
    blnSblm := 'Februari'
 else if (Form2.CBBulan.Text = 'April') then
    blnSblm := 'Maret'
 else if (Form2.CBBulan.Text = 'Mei') then
    blnSblm := 'April'
 else if (Form2.CBBulan.Text = 'Juni') then
    blnSblm := 'Mei'
 else if (Form2.CBBulan.Text = 'Juli') then
    blnSblm := 'Juni'
 else if (Form2.CBBulan.Text =  'Agustus') then
    blnSblm := 'Juli'
 else if (Form2.CBBulan.Text = 'September') then
    blnSblm := 'Agustus'
  else if (Form2.CBBulan.Text = 'Oktober') then
    blnSblm := 'September'
 else if (Form2.CBBulan.Text = 'November') then
    blnSblm := 'Oktober'
 else if (Form2.CBBulan.Text = 'Desember') then
    blnSblm := 'November';

  DM.QArtesis.SQL.Clear;
  DM.QArtesis.SQL.Add('SELECT Tahun FROM pemakaian WHERE IdCustomer = '''+ Form2.ENoBayar.Text +'''');
  DM.QArtesis.Open;
  if (DM.QArtesis.Fields[0].AsString <> thn) then
     begin
       DM.QArtesis.SQL.Clear;
       DM.QArtesis.SQL.Add('INSERT INTO pemakaian (IdCustomer, Tahun) VALUES ('''+ Form2.ENoBayar.Text +''','''+ Form2.CBTahun.Text +''')');
       DM.QArtesis.ExecSQL;
      end;
  DM.QArtesis.SQL.Clear;
  DM.QArtesis.SQL.Add('SELECT '+ blnSblm +' FROM pemakaian WHERE Tahun = '+ thn +' AND IdCustomer = '''+ Form2.ENoBayar.Text +'''');
  DM.QArtesis.Open;
   try
      Form2.ESebelum.Text := DM.QArtesis.Fields[0].AsString;
  except
      Form2.ESebelum.Text := '0';
    end;
end;
ga ada masalah dalam input, kecuali klo di bulan Januari. Misal klo kita pilih bulan Januari tahun 2007, maka s prosedur akan cari data pada Desember 2006.karena data Desember 2006 tdk ada, ane pinginnya secara otomatis ESebelum jadinya nol. tapi koq yang keluar malah EAccess Violation. Bentuk tabel pemakaian kayak gini, key-nya IdCustomer sama tahun

+++++++++++++
+ pemakaian +
+++++++++++++
+ IdCustomer+
+ Tahun     +
+ Januari   +
+ Februari  +
+ .....     +
+ Desember  +
+++++++++++++
[pas:1:e15e0b480a][/pas:1:e15e0b480a]
user image
more 13 years ago

ImanD

ni kasus dikarenakan

.
.
.
  DM.QArtesis.SQL.Clear;
  DM.QArtesis.SQL.Add('SELECT Tahun FROM pemakaian WHERE IdCustomer = '''+ Form2.ENoBayar.Text +'''');
  DM.QArtesis.Open;
 
 
  if (DM.QArtesis.Fields[0].AsString <> thn) then  // inti masalahnya disini dikarenakan data empty 
     begin
       DM.QArtesis.SQL.Clear;
       DM.QArtesis.SQL.Add('INSERT INTO pemakaian (IdCustomer, Tahun) VALUES ('''+ Form2.ENoBayar.Text +''','''+ Form2.CBTahun.Text +''')');
       DM.QArtesis.ExecSQL;
      end;
.
.
.
dan atau

  DM.QArtesis.Open;
  try
      Form2.ESebelum.Text := DM.QArtesis.Fields[0].AsString; // inti masalahnya disini dikarenakan data empty
  except
      Form2.ESebelum.Text := '0';
    end;
coba tambahin listing ini sebelum perbandingan dengan thn

if DM.QArtesis.IsEmpty then
user image
more 13 years ago

l1th1um

sip bos, problem EAccessViolation dah teratasi. cuman waktu di klik cek, klo bulannya januari, ga ada value di ESebelum trs klo ESekarang dimasukkan angka yang keluar
' is not valid integer value
user image
more 13 years ago

ImanD

itu penyebabnya adalah saat konversi angka, bisa disebabkan tidak memilih tahun atw isian tahun tidak hanya angka, coba cek ulang
user image
more 13 years ago

l1th1um

problem solved. bagian terakhir ane ganti jadi gini

  DM.QArtesis.SQL.Clear;
  DM.QArtesis.SQL.Add('SELECT '+ blnSblm +' FROM pemakaian WHERE Tahun = '+ thn +' AND IdCustomer = '''+ Form2.ENoBayar.Text +'''');
  DM.QArtesis.Open;
  if (DM.QArtesis.IsEmpty) then
     Form2.ESebelum.Text := '0'
  else   
      Form2.ESebelum.Text := DM.QArtesis.Fields[0].AsString;
sakali deui nuhun pisan :D
user image
more 13 years ago

ImanD

xiixi sudah terpecahkan toh, gpp lah ni coba daku rapiin...

procedure ambilBulan;
var
  thn, blnSblm : string;
  Code: integer;
begin
  Val(CBTahun.Text, thn, Code);
  if Code <> 0 then
    showmessage('error tahun')
  else with Form2, DM.QArtesis do
  begin
    if CBBulan.ItemIndex=0 then
    begin
      blnSblm:=CBBulan.Items.Strings[11];
      Dec(thn);
    end
    else
      blnSblm:=CBBulan.Items.Strings;
    SQL.Text:='SELECT Tahun FROM pemakaian WHERE IdCustomer='+QuotedStr(ENoBayar.Text);
    Open;
    if not IsEmpty then
    begin
      if (Fields[0].AsString <> thn) then
      begin
        SQL.Text:='INSERT INTO pemakaian (IdCustomer, Tahun) VALUES ('+QuotedStr(ENoBayar.Text)+','+QuotedStr(CBTahun.Text)+')';
        ExecSQL;
      end;
      SQL.Text:='SELECT '+blnSblm+' FROM pemakaian WHERE Tahun='+thn+' AND IdCustomer='+QuotedStr(ENoBayar.Text);
      Open;
      if not IsEmpty then
        ESebelum.Text:=Fields[0].AsString
      else
        ESebelum.Text:='0';
    end
    else
      ShowMessage('Pesan data kosong');
  end;
user image
more 13 years ago

cyber_hecker

sial malah udah solved duluan tapi karena terlanjur udah ku bikin. sekalian aja deh ku paste disini. itung-itung biar biar jumlah postingku nambah wekekekek hasil 1 (jika data ada) : hasil 2 (jika data tidak ada) : data pada tabel : kode :
unit uFBayarTagih;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, DB, ADODB;
type
  TFBayarTagih = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ENoBayar: TEdit;
    ENmBayar: TEdit;
    CBTahun: TComboBox;
    CBBulan: TComboBox;
    ESebelum: TEdit;
    ESekarang: TEdit;
    btnCheck: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Label6: TLabel;
    adoCon: TADOConnection;
    qProses: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure btnCheckClick(Sender: TObject);
  private
    { Private declarations }
    function myGetSebelum(const pBulan, pTahun: string): integer;
  public
    { Public declarations }
  end;
const
  sBulan : array of string =
    ('Januari','Februari','Maret','April','Mei','Juni',
     'Juli','Agustus','September','Oktober','November','Desember');
var
  FBayarTagih: TFBayarTagih;
implementation
{$R *.dfm}
{ for   : set nilai combobox
  para  : -
  result: -
  -----------------------------------------------------------------------------}
procedure TFBayarTagih.FormCreate(Sender: TObject);
var
  i, nAwal : integer;
begin
  with CBTahun do begin
    nAwal := 1990;
    for i := 0 to 19 do
      Items.Append(FormatFloat('0000',nAwal+i));
    ItemIndex := Items.IndexOf(FormatDateTime('yyyy',Now));
  end;
  with CBBulan do begin
    for i := 0 to 11 do
      Items.Append(sBulan[i]);
    ItemIndex := StrToInt(FormatDateTime('MM',Now))-1;
  end;
end;
{ for   : mendapatkan nilai meteran sebelum
  para  : pBulan -> text bulan sekarang
          pTahun -> nilai tahun sekarang
  result: nilai meteran berdasarkan database
  -----------------------------------------------------------------------------}
function TFBayarTagih.myGetSebelum(const pBulan, pTahun: string): integer;
var
  iSebelum :integer;
  lBulan, lTahun : string;
begin
  with CBBulan do begin
    iSebelum := Items.IndexOf(pBulan);
    if iSebelum <= 0 then begin
      iSebelum := 11;
      lTahun := FormatFloat('0000',StrToInt(pTahun) - 1);
    end else begin
      iSebelum := iSebelum - 1;
      lTahun := pTahun;
    end;
    lBulan := sBulan[iSebelum];
  end;
  with qProses do begin
    SQL.Clear;
    SQL.Append('SELECT '+lBulan+' FROM tbPemakaian');
    SQL.Append('WHERE Tahun = '+lTahun);
    SQL.Append('AND IDCustomer = '+QuotedStr(ENoBayar.Text));
    Prepared;
    Open;
    if RecordCount > 0 then
      Result := Fields[0].AsInteger else
      Result := 0;
    Close;
  end;
end;
procedure TFBayarTagih.btnCheckClick(Sender: TObject);
begin
  ESebelum.Text := FormatFloat('#,##0.##',
    myGetSebelum(CBBulan.Text, CBTahun.Text));
end;
end.
user image
more 13 years ago

l1th1um

duh jadi malu, banyak master yang bantuin :D even programnya dah solve, tp banyak masukkan how to make great code, ga kayak ane yang bertele2 g jelas :D. thx for u all ....................buat nambah postingan jd dech :D
more ...
  • Pages:
  • 1
Share to

Random Topic

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