Arsip: Zeos 7 ZQuery error Access violation saat open

 
user image
more 11 years ago

delphi_boy

Salam kenal para master Delphi semuanya. Saya newbie di sini dan ingin meminta bantuan atas permasalahan yg saya temui dlm membuat aplikasi database dg Delphi 7. Saya menggunakan Firebird 2.5 dan koneksi databasenya menggunakan Zeos DB0 7.0.0-dev (versi yg stable 6.6 blm support Firebird 2.5). Setting koneksi database TZConnection (dibuat namanya ZKonesi) dibuat sbb: Database: D:\My Project\Penjualan Firebird\Data\DATA.FDB HostName: localhost Password: masterkey Protocol: firebird-2.5 TransactionIsolationLevel: tiReadCommited User: sysdba Saya menempatkan sebuah komponen TZQuery dengan setting properti sbb: Connection: ZKoneksi SQL:
SELECT beli., beli_detil. , supplier.namasup, barang.namabrg
FROM barang INNER JOIN (supplier INNER JOIN (beli INNER JOIN beli_detil
ON beli.nofaktur = beli_detil.nofaktur) ON supplier.kodesup = beli.supplier)
ON barang.kodebrg = beli_detil.kodebrg
where beli.nofaktur = :nofakt
Params [nofakt]: 1. Datatype: ftString 2. ParamType: ptInput 3. Size: 255 Properti lainnya dlm nilai defaultnya (tidak diubah). Nah saat mengeksekusi perintah berikut di dalam method OnClick pada button terjadi error "Access violation at address 00406C52 in module 'Project1.exe'. Read of address 66646866":
ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text; // asumsikan EdtNo.Text = 'FB001'
ZQryBeli.Open;
Padahal SQL query yg dimasukkan dlm komponen ZQuery tsb tdk masalah jika dijalankan di Firebird secara langsung (saya memakai tool FlameRobin) Udah googling tetapi saya tidak menemukan solusi permasalahan ini. Mohon pencerahannya dari para master Delphi di sini. Terima kasih
user image
more 11 years ago

Penjahat

Halo delphi_boy... Sepertinya letak kesalahan berada pada code yang tidak kamu tulis disini. coba kirimkan unit.pas yang menampung syntax tersebut, hal ini sangat membantu untuk melakukan analisa thanks...
user image
more 11 years ago

musafir

ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text; // asumsikan EdtNo.Text = 'FB001' ZQryBeli.Open; apa karena ZQryBeli.Open; tidak menggunakan ZQryBeli.executesql? Kayaknya sehc....
user image
more 11 years ago

delphi_boy

@Penjahat: Halo delphi_boy... Sepertinya letak kesalahan berada pada code yang tidak kamu tulis disini. coba kirimkan unit.pas yang menampung syntax tersebut, hal ini sangat membantu untuk melakukan analisa thanks...
Ok, di sini ada 2 unit yg saling berhubungan. Yang pertama unit data modul tempat komponen2 database berada. Kodingnya sbb:

unit UDmJual;
interface
uses
  SysUtils, Classes, DB, RpRave, RpDefine, RpBase, RpSystem, IdGlobal,
  IdHash, IdHashMessageDigest, Dialogs, WinSkinData,
  ZAbstractRODataset, ZAbstractDataset, ZAbstractTable, ZDataset,
  ZAbstractConnection, ZConnection;
type
  TDmJual = class(TDataModule)
    DsBarang: TDataSource;
    DsKategori: TDataSource;
    DsSatuan: TDataSource;
    DsSupplier: TDataSource;
    DsPlgn: TDataSource;
    DsBeli: TDataSource;
    DsTempBeli: TDataSource;
    DsJual: TDataSource;
    DsJualTemp: TDataSource;
    DsUser: TDataSource;
    SkinData1: TSkinData;
    ZKoneksi: TZConnection;
    ZTbBarang: TZTable;
    ZTbBarangKODEBRG: TStringField;
    ZTbBarangNAMABRG: TStringField;
    ZTbBarangKATEGORI: TStringField;
    ZTbBarangSATUAN: TStringField;
    ZTbBarangSTOK: TFloatField;
    ZTbBarangHRGBELI: TFloatField;
    ZTbBarangHRGJUAL: TFloatField;
    ZTbBarangDISKON: TFloatField;
    ZTbBarangTIPEDISK: TStringField;
    ZTbBarangKET: TMemoField;
    ZTbKategori: TZTable;
    ZQuery1: TZQuery;
    ZTbSatuan: TZTable;
    ZTbSupplier: TZTable;
    ZTbPlgn: TZTable;
    ZTbBeli: TZTable;
    ZTbBeliTemp: TZTable;
    ZTbBeliTempKODEBRG: TStringField;
    ZTbBeliTempQTY: TIntegerField;
    ZTbBeliTempHARGA: TFloatField;
    ZTbBeliTempKET: TStringField;
    ZTbBeliTempTOTHRG: TCurrencyField;
    ZTbBeliTempNAMABRG: TStringField;
    ZTbJual: TZTable;
    ZTbJualTemp: TZTable;
    ZTbJualTempKODEBRG: TStringField;
    ZTbJualTempQTY: TIntegerField;
    ZTbJualTempHARGA: TFloatField;
    ZTbJualTempKET: TStringField;
    ZTbJualTempTOTHRG: TCurrencyField;
    ZTbJualTempNAMABRG: TStringField;
    ZTbUser: TZTable;
    ZTbUserUSERID: TStringField;
    ZTbUserPASS: TStringField;
    ZTbUserUSERLEVEL: TSmallintField;
    ZTbUserLASTLOG: TDateTimeField;
    ZTbSetting: TZTable;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
    procedure ZTbBarangKETGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure ZTbKategoriAfterScroll(DataSet: TDataSet);
    procedure ZTbSatuanAfterScroll(DataSet: TDataSet);
    procedure ZTbBeliTempCalcFields(DataSet: TDataSet);
    procedure ZTbBeliTempAfterOpen(DataSet: TDataSet);
    procedure ZTbBeliTempAfterPost(DataSet: TDataSet);
    procedure ZTbBeliTempAfterDelete(DataSet: TDataSet);
    procedure ZTbJualTempCalcFields(DataSet: TDataSet);
    procedure ZTbJualTempAfterOpen(DataSet: TDataSet);
    procedure ZTbJualTempAfterDelete(DataSet: TDataSet);
    procedure ZTbJualTempAfterPost(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
    userid:string;
    userlevel:integer;
    company:string;
  end;
var
  DmJual: TDmJual;
function MD5Hash(text:string):string;
implementation
{$R .dfm}
uses Forms, UKategori, USatuan, UAddEdtBeli, UAddEdtJual;
function MD5Hash(text:string):string;
begin
  with TIdHashMessageDigest5.Create do
  try
    Result := TIdHash128.AsHex(HashValue(text));
  finally
    Free;
  end;
end;
procedure TDmJual.DataModuleCreate(Sender: TObject);
begin
  ZKoneksi.Database:=ExtractFilePath(Application.ExeName)+'Data\Data.fdb';
  ZKoneksi.Connect;
  ZTbSetting.Open;
  ZTbSetting.Locate('var','company',[]);
  company:=ZTbSetting.FieldByName('nilai').AsString;
  ZTbSetting.Close;
end;
procedure TDmJual.DataModuleDestroy(Sender: TObject);
begin
  ZKoneksi.Disconnect;
end;
procedure TDmJual.ZTbBarangKETGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  if length(text)>30 then Text:=copy(Sender.AsString,1,30)+'...'
    else Text:=trim(Sender.AsString);
end;
procedure TDmJual.ZTbKategoriAfterScroll(DataSet: TDataSet);
begin
  if DataSet.State=dsBrowse then
  with FrmKategori do
  begin
    EdtKode.Text:=DataSet.fieldbyname('kodekat').AsString;
    EdtNama.Text:=DataSet.fieldbyname('namakat').AsString;
    EdtKet.Text:=DataSet.fieldbyname('ket').AsString;
  end;
end;
procedure TDmJual.ZTbSatuanAfterScroll(DataSet: TDataSet);
begin
  if DataSet.State=dsBrowse then
  with FrmSatuan do
  begin
    EdtKode.Text:=DataSet.fieldbyname('kodesat').AsString;
    EdtNama.Text:=DataSet.fieldbyname('namasat').AsString;
  end;
end;
procedure TDmJual.ZTbBeliTempCalcFields(DataSet: TDataSet);
begin
  ZTbBeliTemp.FieldByName('tothrg').AsCurrency:=ZTbBeliTemp.FieldByName('qty').AsInteger 
    ZTbBeliTemp.FieldByName('harga').AsCurrency;
end;
procedure TDmJual.ZTbBeliTempAfterOpen(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qtyharga) from beli_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtBeli.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
procedure TDmJual.ZTbBeliTempAfterPost(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qty harga) from beli_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtBeli.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
procedure TDmJual.ZTbBeliTempAfterDelete(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qtyharga) from beli_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtBeli.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
procedure TDmJual.ZTbJualTempCalcFields(DataSet: TDataSet);
begin
  ZTbJualTemp.FieldByName('tothrg').AsCurrency:=ZTbJualTemp.FieldByName('qty').AsInteger 
    ZTbJualTemp.FieldByName('harga').AsCurrency;
end;
procedure TDmJual.ZTbJualTempAfterOpen(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qtyharga) from jual_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtJual.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
procedure TDmJual.ZTbJualTempAfterDelete(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qty harga) from jual_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtJual.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
procedure TDmJual.ZTbJualTempAfterPost(DataSet: TDataSet);
begin
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('select sum(qtyharga) from jual_temp');
  DmJual.ZQuery1.Open;
  FrmAddEdtJual.EdtSubtot.Text:=DmJual.ZQuery1.Fields[0].AsString;
  DmJual.ZQuery1.Close;
end;
end.
Satu lagi unit yg memuat koding pemanggilan query tadi:

unit UAddEdtBeli;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, ExtCtrls, Menus, DB, ADODB,
  RpCon, RpConDS, RpBase, RpSystem, RpDefine, RpRave, ZDataset,
  ZAbstractRODataset, ZAbstractDataset, ZStoredProcedure;
type
  TFrmAddEdtBeli = class(TForm)
    GroupBox1: TGroupBox;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    EdtNo: TEdit;
    DtpTgl: TDateTimePicker;
    CboSupp: TComboBox;
    EdtKet: TEdit;
    DBGrid1: TDBGrid;
    BtnSave: TButton;
    BtnCancel: TButton;
    LblSupp: TLabel;
    EdtSubtot: TEdit;
    Label5: TLabel;
    PopupMenu1: TPopupMenu;
    MnuTmbh: TMenuItem;
    MnuHps: TMenuItem;
    BtnPrint: TButton;
    RvProject1: TRvProject;
    RvSystem1: TRvSystem;
    RvDSBeli: TRvDataSetConnection;
    ZStoredProc1: TZStoredProc;
    ZQryBeli: TZQuery;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CboSuppSelect(Sender: TObject);
    procedure BtnSaveClick(Sender: TObject);
    procedure BtnCancelClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure MnuTmbhClick(Sender: TObject);
    procedure MnuHpsClick(Sender: TObject);
    procedure BtnPrintClick(Sender: TObject);
  private
    { Private declarations }
  public
    //subtotal:currency;
    editmode:boolean;
  end;
var
  FrmAddEdtBeli: TFrmAddEdtBeli;
implementation
uses UDmJual;
{$R  .dfm}
procedure TFrmAddEdtBeli.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DmJual.ZTbBeliTemp.Close;
  DmJual.ZQuery1.SQL.Clear;
  DmJual.ZQuery1.SQL.Add('delete from beli_temp');
  DmJual.ZQuery1.ExecSQL;
end;
procedure TFrmAddEdtBeli.CboSuppSelect(Sender: TObject);
begin
  with DmJual.ZQuery1 do
  begin
    SQL.Clear;
    SQL.Add('select namasup from supplier where kodesup='''+CboSupp.Text+'''');
    Open;
    LblSupp.Caption:=Fields[0].AsString;
    Close;
  end;
end;
procedure TFrmAddEdtBeli.BtnSaveClick(Sender: TObject);
begin
  with DmJual do
  begin
    if length(trim(EdtNo.Text))=0 then
    begin
      MessageDlg('No. faktur pembelian belum diisi',mtWarning,[mbOK],0);
      EdtNo.SetFocus;
      exit;
    end;
    if length(trim(CboSupp.Text))=0 then
    begin
      MessageDlg('Supplier belum dipilih',mtWarning,[mbOK],0);
      CboSupp.SetFocus;
      exit;
    end;
    if length(trim(EdtKet.Text))=0 then
    begin
      MessageDlg('Keterangan belum diisi',mtWarning,[mbOK],0);
      EdtKet.SetFocus;
      exit;
    end;
    if ZTbBeliTemp.IsEmpty then
    begin
      MessageDlg('Detail pembelian belum diisi',mtWarning,[mbOK],0);
      DBGrid1.SetFocus;
      exit;
    end;
    ZTbBeliTemp.First;
    while not ZTbBeliTemp.Eof do
    begin
      if length(trim(ZTbBeliTemp.FieldByName('kodebrg').AsString))=0 then
      begin
        MessageDlg('Kode barang belum diisi',mtWarning,[mbNo],0);
        DBGrid1.SetFocus;
        exit;
      end;
      DmJual.ZQuery1.SQL.Clear;
      DmJual.ZQuery1.SQL.Add('select kodebrg from barang where kodebrg='''+
        DBGrid1.DataSource.DataSet.FieldByName('kodebrg').AsString+'''');
      DmJual.ZQuery1.Open;
      if DmJual.ZQuery1.IsEmpty then
      begin
        MessageDlg('Kode barang "'+DBGrid1.DataSource.DataSet.FieldByName('kodebrg').
          AsString+'" tidak ada',mtWarning,[mbNo],0);
        DBGrid1.SetFocus;
        exit;
      end;
      DmJual.ZQuery1.Close;
      if ZTbBeliTemp.FieldByName('qty').AsInteger<=0 then
      begin
        MessageDlg('Jumlah harus lebih besar dari nol',mtWarning,[mbNo],0);
        DBGrid1.SetFocus;
        exit;
      end;
      if ZTbBeliTemp.FieldByName('harga').AsCurrency<=0 then
      begin
        MessageDlg('Harga harus lebih besar dari nol',mtWarning,[mbNo],0);
        DBGrid1.SetFocus;
        exit;
      end;
      ZTbBeliTemp.Next;
    end;
    if (not editmode) and ZTbBeli.Locate('nofaktur',EdtNo.Text,[]) then
    begin
      MessageDlg('No. faktur pembelian sudah ada',mtWarning,[mbOK],0);
      EdtNo.SetFocus;
      exit;
    end;
    // cek stok minus
    if (DmJual.ZTbBeliTemp.State=dsEdit) or (DmJual.ZTbBeliTemp.State=dsInsert) then
      DmJual.ZTbBeliTemp.Post;
    ZStoredProc1.Close;
    ZStoredProc1.ParamByName('fakturbeli').Value:=EdtNo.Text;
    ZStoredProc1.Open;
    while not ZStoredProc1.Eof do
    begin
      if ZStoredProc1.FieldByName('akhir').AsInteger<0 then
      begin
        MessageDlg('Kode barang "'+ZStoredProc1.fieldbyname('kodebrg').AsString
          +'" stok tidak cukup. Stok saat ini adalah '+ZStoredProc1.
          fieldbyname('allqty').AsString,mtWarning,[mbOK],0);
        exit;
      end;
      ZStoredProc1.Next;
    end;
    ZKoneksi.StartTransaction;
    try
      if editmode then ZTbBeli.Edit else ZTbBeli.Append;
      ZTbBeli.FieldByName('nofaktur').AsString:=EdtNo.Text;
      ZTbBeli.FieldByName('tanggal').AsDateTime:=DtpTgl.Date;
      ZTbBeli.FieldByName('supplier').AsString:=CboSupp.Text;
      ZTbBeli.FieldByName('ket').AsString:=EdtKet.Text;
      ZTbBeli.Post;
      if editmode then
      begin
        ZQuery1.SQL.Clear;
        ZQuery1.SQL.Add('delete from beli_detil where nofaktur='''+EdtNo.Text+'''');
        ZQuery1.ExecSQL;
      end;
      ZQuery1.SQL.Clear;
      ZQuery1.SQL.Add('INSERT INTO beli_detil(nofaktur,kodebrg,qty,harga,ket) SELECT '''
        +EdtNo.Text+''',kodebrg,qty,harga,ket FROM beli_temp');
      ZQuery1.ExecSQL;
      if not editmode then
      begin
        ZQuery1.SQL.Clear;
        ZQuery1.SQL.Add('INSERT INTO fifo(notrans,trans) values ('''+EdtNo.Text+
          ''',''B'')');
        ZQuery1.ExecSQL;
      end;
      ZKoneksi.Commit;
      MessageDlg('Data telah disimpan',mtInformation,[mbOK],0);
      //Close;
      BtnSave.Enabled:=editmode;
      BtnCancel.Caption:='Tutup';
    except
      on e:EDatabaseError do
      begin
        MessageDlg('Data gagal disimpan.'+#13+e.Message,mtError,[mbOK],0);
        ZKoneksi.Rollback;
      end;
    end;
  end;
end;
procedure TFrmAddEdtBeli.BtnCancelClick(Sender: TObject);
begin
  DmJual.ZTbBeli.Cancel;
  if DmJual.ZKoneksi.InTransaction then DmJual.ZKoneksi.Rollback;
  Close;
end;
procedure TFrmAddEdtBeli.FormShow(Sender: TObject);
begin
  EdtSubtot.Text:='0';
  with DmJual.ZQuery1 do
  begin
    SQL.Clear;
    SQL.Add('select kodesup from supplier');
    Open;
    while not Eof do
    begin
      CboSupp.Items.Add(Fields[0].AsString);
      Next;
    end;
    Close;
  end;
  if editmode then
  begin
    Caption:='Edit Data Pembelian';
    DtpTgl.SetFocus;
    DmJual.ZQuery1.SQL.Clear;
    DmJual.ZQuery1.SQL.Add('INSERT INTO beli_temp(kodebrg,qty,harga,ket) SELECT kodebrg,'+
      'qty,harga,ket FROM beli_detil WHERE nofaktur='''+EdtNo.Text+'''');
    DmJual.ZQuery1.ExecSQL;
  end
  else
  begin
    Caption:='Tambah Data Pembelian';
    EdtNo.SetFocus;
  end;
  DmJual.ZTbBeliTemp.Open;
end;
procedure TFrmAddEdtBeli.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_RETURN then
    if not (ActiveControl is TDBGrid) then Perform(WM_NEXTDLGCTL, 0, 0);
end;
procedure TFrmAddEdtBeli.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if DBGrid1.selectedindex < (DBGrid1.fieldcount -1) then
    begin
      DBGrid1.selectedindex := DBGrid1.selectedindex +1;
      if DBGrid1.SelectedIndex=1 then
      begin
        if length(trim(DBGrid1.DataSource.DataSet.Fields[0].AsString))=0 then
        begin
          MessageDlg('Kode barang belum diisi',mtWarning,[mbNo],0);
          DBGrid1.selectedindex := DBGrid1.selectedindex -1;
          exit;
        end;
        DmJual.ZQuery1.SQL.Clear;
        DmJual.ZQuery1.SQL.Add('select kodebrg from barang where kodebrg='''+
          DBGrid1.DataSource.DataSet.FieldByName('kodebrg').AsString+'''');
        DmJual.ZQuery1.Open;
        if DmJual.ZQuery1.IsEmpty then
        begin
          MessageDlg('Kode barang tidak ada',mtWarning,[mbNo],0);
          DBGrid1.selectedindex := DBGrid1.selectedindex -1;
          exit;
        end;
        DmJual.ZQuery1.Close;
        DmJual.ZQuery1.SQL.Clear;
        DmJual.ZQuery1.SQL.Add('select hrgbeli from barang where kodebrg='''+
          DBGrid1.DataSource.DataSet.FieldByName('kodebrg').AsString+'''');
        DmJual.ZQuery1.Open;
        if (DBGrid1.DataSource.DataSet.State=dsEdit) or (DBGrid1.DataSource.DataSet.State=dsInsert) then
          DBGrid1.DataSource.DataSet.FieldByName('harga').AsCurrency:=DmJual.ZQuery1.Fields[0].AsCurrency;
        DmJual.ZQuery1.Close;
      end;
      if DBGrid1.SelectedIndex=3 then
      begin
        if DBGrid1.DataSource.DataSet.Fields[2].AsInteger<=0 then
        begin
          MessageDlg('Jumlah harus besar dari nol',mtWarning,[mbNo],0);
          DBGrid1.selectedindex := DBGrid1.selectedindex -1;
          exit;
        end;
      end;
      if DBGrid1.SelectedIndex=4 then
      begin
        if DBGrid1.DataSource.DataSet.Fields[3].AsCurrency<=0 then
        begin
          MessageDlg('Harga harus besar dari nol',mtWarning,[mbNo],0);
          DBGrid1.selectedindex := DBGrid1.selectedindex -1;
          exit;
        end;
      end;
    end
    else
    begin
      if DBGrid1.DataSource.DataSet.RecNo=DBGrid1.DataSource.DataSet.RecordCount then
        DBGrid1.DataSource.DataSet.Append
      else DBGrid1.DataSource.DataSet.Next;
      DBGrid1.selectedindex := 0;
    end;
  end;
end;
procedure TFrmAddEdtBeli.MnuTmbhClick(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.Insert;
end;
procedure TFrmAddEdtBeli.MnuHpsClick(Sender: TObject);
begin
  if not DBGrid1.DataSource.DataSet.IsEmpty then
    DBGrid1.DataSource.DataSet.Delete;
end;
procedure TFrmAddEdtBeli.BtnPrintClick(Sender: TObject);
begin
  // dari hasil debugging di sini terjadi error Access violation
  ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text;
  ZQryBeli.Open;
  RvProject1.SetParam('perusahaan',DmJual.company);
  RvProject1.ProjectFile:='Laporan\FakturBeli.rav';
  RvProject1.Execute;
  ZQryBeli.Close;
end;
end.
user image
more 11 years ago

delphi_boy

@musafir: ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text; // asumsikan EdtNo.Text = 'FB001' ZQryBeli.Open; apa karena ZQryBeli.Open; tidak menggunakan ZQryBeli.executesql? Kayaknya sehc....
Yg ada ZQryeli.ExecSQL tetapi itu untuk query yg tidak mengembalikan resultset, spt UPDATE, DELETE, INSERT, dst; untuk SELECT memang memakai method Open.
user image
more 11 years ago

zuryafix

Nah saat mengeksekusi perintah berikut di dalam method OnClick pada button terjadi error "Access violation at address 00406C52 in module 'Project1.exe'. Read of address 66646866":
Kalo boleh tau, button yang diklik itu apakah memanggil button pemanggilan form atau bukan? Jika event on clicknya merupakan pemanggilan form, artinya ada salah dalam pemesanan memori dalam atribut kapan saat memori difungsikan dan kapan saat memori dilepas. :D
user image
more 11 years ago

delphi_boy

@zuryafix:
Nah saat mengeksekusi perintah berikut di dalam method OnClick pada button terjadi error "Access violation at address 00406C52 in module 'Project1.exe'. Read of address 66646866":
Kalo boleh tau, button yang diklik itu apakah memanggil button pemanggilan form atau bukan? Jika event on clicknya merupakan pemanggilan form, artinya ada salah dalam pemesanan memori dalam atribut kapan saat memori difungsikan dan kapan saat memori dilepas. :D
Bukan pemanggilan form, tetapi eksekusi Rave Report:
procedure TFrmAddEdtBeli.BtnPrintClick(Sender: TObject);
begin
  // dari hasil debugging di sini terjadi error Access violation
  ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text;
  ZQryBeli.Open;
  RvProject1.SetParam('perusahaan',DmJual.company);
  RvProject1.ProjectFile:='Laporan\FakturBeli.rav';
  RvProject1.Execute;
  ZQryBeli.Close;
end; 
Tapi udah di-debugging gak ada masalah di pemanggilan laporan Rave Report-nya, tetapi di pemanggilan ZQryBeli.Open [bisa dipastikan dengan menghilangkan perintah eksekusi laporan Rave Report][/quote]
user image
more 11 years ago

Penjahat

Halo delphi_boy.... codingnya lumayan complicated.... terlalun banyak TDataSetNotifyEvent, AfterDelete, AfterPost, AfterScroll, AfterOpen....dll tapi sepertinya semua event tersebut tidak ada yg berhubungan dengan ZQryBeli, apakah saya benar ? kalau iya coba begini... 1, pada query ini;
SELECT beli., beli_detil. , supplier.namasup, barang.namabrg 
FROM barang INNER JOIN (supplier INNER JOIN (beli INNER JOIN beli_detil 
ON beli.nofaktur = beli_detil.nofaktur) ON supplier.kodesup = beli.supplier) 
ON barang.kodebrg = beli_detil.kodebrg 
where beli.nofaktur = :nofakt 
:nofakt diganti dengan nilai asli (yg diharapkan). artinya sementara tidak passing via parameter kemudian... comment dulu beberapa line code berikut:
procedure TFrmAddEdtBeli.BtnPrintClick(Sender: TObject); 
begin 
  // dari hasil debugging di sini terjadi error Access violation 
  // ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text; 
  ZQryBeli.Open; 
  // RvProject1.SetParam('perusahaan',DmJual.company); 
  // RvProject1.ProjectFile:='Laporan\FakturBeli.rav'; 
  // RvProject1.Execute; 
  ZQryBeli.Close; 
end;
berikutnya beritahu saya apa yg terjadi.....
user image
more 11 years ago

delphi_boy

@Penjahat: Halo delphi_boy.... codingnya lumayan complicated.... terlalun banyak TDataSetNotifyEvent, AfterDelete, AfterPost, AfterScroll, AfterOpen....dll tapi sepertinya semua event tersebut tidak ada yg berhubungan dengan ZQryBeli, apakah saya benar ? kalau iya coba begini... 1, pada query ini;
SELECT beli., beli_detil. , supplier.namasup, barang.namabrg 
FROM barang INNER JOIN (supplier INNER JOIN (beli INNER JOIN beli_detil 
ON beli.nofaktur = beli_detil.nofaktur) ON supplier.kodesup = beli.supplier) 
ON barang.kodebrg = beli_detil.kodebrg 
where beli.nofaktur = :nofakt 
:nofakt diganti dengan nilai asli (yg diharapkan). artinya sementara tidak passing via parameter kemudian... comment dulu beberapa line code berikut:
procedure TFrmAddEdtBeli.BtnPrintClick(Sender: TObject); 
begin 
  // dari hasil debugging di sini terjadi error Access violation 
  // ZQryBeli.ParamByName('nofakt').Value:=EdtNo.Text; 
  ZQryBeli.Open; 
  // RvProject1.SetParam('perusahaan',DmJual.company); 
  // RvProject1.ProjectFile:='Laporan\FakturBeli.rav'; 
  // RvProject1.Execute; 
  ZQryBeli.Close; 
end;
berikutnya beritahu saya apa yg terjadi.....
Iya, agak complicated memang krn pengembangan dr database sebelumnya yg menggunakan Ms Access... :D Sudah coba spt saran sdr. Penjahat, saya ganti query-nya menjadi:
SELECT beli., beli_detil. , supplier.namasup, barang.namabrg
FROM barang INNER JOIN (supplier INNER JOIN (beli INNER JOIN beli_detil
ON beli.nofaktur = beli_detil.nofaktur) ON supplier.kodesup = beli.supplier)
ON barang.kodebrg = beli_detil.kodebrg
where beli.nofaktur = 'FB001'
Dan pada event button click-nya sudah di-comment spt yg anda sarankan, tetapi hasilnya tetap muncul error Access violation yg sama (alamat memorinya jg sama)
user image
more 10 years ago

Penjahat

Query seperti ini;
SELECT beli., beli_detil. , supplier.namasup, barang.namabrg 
FROM barang INNER JOIN (supplier INNER JOIN (beli INNER JOIN beli_detil 
ON beli.nofaktur = beli_detil.nofaktur) ON supplier.kodesup = beli.supplier) 
ON barang.kodebrg = beli_detil.kodebrg 
where beli.nofaktur = 'FB001'
1. query tersebut bisa berjalan lancar pada FlameRobin, betul?.... 2. Tidak ada satu parameterpun pada Component ZQryBeli, betul?... 3. Tidak ada satupun TDataSetNotifyEvent (afteropen, beforeclose dll..) yang di assign ke ZQryBeli, betul?... 4. Tidak ada satupun code yang berhubungan dengan ZQryBeli kecuali ZQryBeli.Open, betul?... kalau memang itu betul semua, ma'af saya tidak bisa memberikan solusi, kecuali 1 saran yang menurut saya hanya ini penyebabnya: cek apakah ZQryBeli sudah di create?.
more ...
  • Pages:
  • 1
  • 2
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com