IWDBGrid'de başka bir tablo çekme sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

İyi çalışmalar,

Bir intraweb projesi geliştiriyorum. IWDBgrid'de bir tablo çekiyorum. Bu tabloyla işim bittikten sonra aynı gride başka bir tablo çekmek istediğimde access violation hatası alıyorum.

Kodlar şöyle:

Kod: Tümünü seç

unit uHome;

interface

uses
  Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Vcl.Controls,
  IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompGrids,
  Data.DB, IWDBGrids, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
  FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.VCLUI.Wait,
  FireDAC.Comp.UI, FireDAC.Phys.MySQL, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
  Vcl.Forms, IWVCLBaseContainer, IWContainer, IWHTMLContainer,
  IWHTML40Container, IWRegion, IWCompLabel, Vcl.Menus, IWCompMenu,
  Datasnap.DBClient;

type
  TfrmHome = class(TIWAppForm)
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    DataSource1: TDataSource;
    FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    IWRegion1: TIWRegion;
    IWLabel1: TIWLabel;
    IWMenu1: TIWMenu;
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    N21: TMenuItem;
    N31: TMenuItem;
    mnuLog: TMenuItem;
    N22221: TMenuItem;
    N33331: TMenuItem;
    Hakknda1: TMenuItem;
    mnuPass: TMenuItem;
    IWDBGrid1: TIWDBGrid;
    DataSource2: TDataSource;
    FDQuery2: TFDQuery;
    procedure IWAppFormCreate(Sender: TObject);
    procedure mnuLogClick(Sender: TObject);
    procedure mnuPassClick(Sender: TObject);
  public
  end;

implementation

{$R *.dfm}

uses
UserSessionUnit;


procedure TfrmHome.IWAppFormCreate(Sender: TObject);
begin

  //Burada hiçbir sorun yok.
  //Veriler sorunsuz bir şekilde gridde görünüyor.

  FDConnection1.Params.Add('Database=dbayrecords');
  FDConnection1.Params.Add('User_Name=root');
  FDConnection1.Params.Add('Password=hkn68');
  FDConnection1.Params.Add('CharacterSet=utf8');
  FDConnection1.Params.Add('DriverID=MySQL');

  FDQuery1.SQL.Clear;
  FDQuery1.SQL.add('select * from tblogs');
  DataSource1.DataSet:=FDQuery1;
  FDQuery1.Active:=true;
  IWDBGrid1.DataSource:=DataSource1;
  IWDBGrid1.Caption:='Log Kayıtları';

  IWLabel1.Caption:='Hoş geldin '+(WebApplication.Data as TIWUserSession).name+
   '! Leveliniz '+ inttostr((WebApplication.Data as TIWUserSession).level);

end;

procedure TfrmHome.mnuLogClick(Sender: TObject);
begin

  //Bu komutlar çalıştığında hata alıyorum.
  // Bazen access violation hatası bazen de dataset not edit or insert module hatası
  DataSource1.DataSet.EnableControls;
  DataSource1.DataSet.Close;
  DataSource1.DataSet.Open;
  DataSource1.DataSet.DisableControls;
  
  FDQuery1.Active:=false;
  FDQuery1.SQL.Clear;
  FDQuery1.SQL.add('select * from tblogs');
  DataSource1.DataSet:=FDQuery1;
  FDQuery1.Active:=true;
  IWDBGrid1.DataSource:=DataSource1;
  IWDBGrid1.Caption:='Log Kayıtları';
  
end;

procedure TfrmHome.mnuPassClick(Sender: TObject);

begin

  //Bu komutlar çalıştığında hata alıyorum.
  // Bazen access violation hatası bazen de dataset not edit or insert module hatası
  DataSource1.DataSet.EnableControls;
  DataSource1.DataSet.Close;
  DataSource1.DataSet.Open;
  DataSource1.DataSet.DisableControls;



  FDQuery1.Active:=false;
  FDQuery1.SQL.Clear;
  FDQuery1.SQL.add('select * from tbpasswords');
  DataSource1.DataSet:=FDQuery1;
  FDQuery1.Active:=true;
  IWDBGrid1.DataSource:=DataSource1;
  IWDBGrid1.Caption:='Kullanıcılar ve Şifreleri';

end;

end.


Yardımlarınız için şimdiden teşekkürler.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen xxxjedixxx »

DataSource'un Data seti ile sürekli oynuyorsun. Buna hiç gerek yok. Formun OnCreate'inde bir kez tanımlaman yeterli olacaktır. Anladığım kadarıyla DataSet olarak Table yerine Query kullandığın için grid üzerinden kayıtlarda herhangi bir değişiklik yapmıyorsun.

Kod: Tümünü seç

procedure TfrmHome.IWAppFormCreate(Sender: TObject);
begin
  with FDConnection1 do
  begin
     Params.Add('Database=dbayrecords');
     Params.Add('User_Name=root');
     Params.Add('Password=hkn68');
     Params.Add('CharacterSet=utf8');
     Params.Add('DriverID=MySQL');
  end;
  DataSource1.DataSet := FDQuery1;
  IWDBGrid1.DataSource := DataSource1;

  FDQuery1.SQL.Text := 'select * from tblogs';
  FDQuery1.Active:=true;
  IWDBGrid1.Caption := 'Log Kayıtları';

  IWLabel1.Caption := 'Hoş geldin '+(WebApplication.Data as TIWUserSession).name+
   '! Leveliniz '+ inttostr((WebApplication.Data as TIWUserSession).level);
end;

procedure TfrmHome.mnuLogClick(Sender: TObject);
begin
  with FDQuery1 do
  begin
    Active := False;
    SQL.Text := 'select * from tblogs';
    Active := True;
  end;
  IWDBGrid1.Caption:='Log Kayıtları';
end;

procedure TfrmHome.mnuPassClick(Sender: TObject);
begin
  with FDQuery1 do
  begin
    Active := False;
    SQL.Text := 'select * from tbpasswords';
    Active := True;
  end;
  IWDBGrid1.Caption:='Kullanıcılar ve Şifreleri';
end;
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

İlginize çok teşekkür ederim.

Ancak grid yalnızca log kayıtlarını gösteriyor, şifrelerin olduğu tbpasswords tablosunu göstermiyor.
SQL.clear dememe rağmen sonuç aynı.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Bu arada TFDTable classı ile yazdığınız kodları uyguladım sonuç değişmedi. Grid salt okunur olmayacak, log kayıtları hariç kimi verilerde değişiklik yapmak istiyorum.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen xxxjedixxx »

Yazdığım kodu denediniz mi? Farketmediniz sanırım.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Evet, yazdığınız kodu denedim. gride baktığımda hep aynı tablo yükleniyor. IWAppFormCreate'de yüklenen tablo menulere tıkladığımda değişmiyor, yalnızca grid caption'ı değişiyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Sizin anlatımınıza göre yazdığım kodlar bunlar:

Kod: Tümünü seç

unit uHome;

interface

uses
  Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Vcl.Controls,
  IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompGrids,
  Data.DB, IWDBGrids, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
  FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.VCLUI.Wait,
  FireDAC.Comp.UI, FireDAC.Phys.MySQL, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
  Vcl.Forms, IWVCLBaseContainer, IWContainer, IWHTMLContainer,
  IWHTML40Container, IWRegion, IWCompLabel, Vcl.Menus, IWCompMenu,
  Datasnap.DBClient;

type
  TfrmHome = class(TIWAppForm)
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    DataSource1: TDataSource;
    FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    IWRegion1: TIWRegion;
    IWLabel1: TIWLabel;
    IWMenu1: TIWMenu;
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    N21: TMenuItem;
    N31: TMenuItem;
    mnuLog: TMenuItem;
    N22221: TMenuItem;
    N33331: TMenuItem;
    Hakknda1: TMenuItem;
    mnuPass: TMenuItem;
    IWDBGrid1: TIWDBGrid;
    FDTable1: TFDTable;
    procedure IWAppFormCreate(Sender: TObject);
    procedure mnuLogClick(Sender: TObject);
    procedure mnuPassClick(Sender: TObject);
  public
  end;

implementation

{$R *.dfm}

uses
UserSessionUnit;


procedure TfrmHome.IWAppFormCreate(Sender: TObject);
begin

  with FDConnection1 do
  begin
     Params.Add('Database=dbayrecords');
     Params.Add('User_Name=root');
     Params.Add('Password=hkn68');
     Params.Add('CharacterSet=utf8');
     Params.Add('DriverID=MySQL');
  end;



  FDQuery1.SQL.Clear;
  FDQuery1.SQL.add('select * from tblogs');
  DataSource1.DataSet:=FDQuery1;
  FDQuery1.Active:=true;
  IWDBGrid1.DataSource:=DataSource1;
  IWDBGrid1.Caption:='Log Kayıtları';

  IWLabel1.Caption:='Hoş geldin '+(WebApplication.Data as TIWUserSession).name+
   '! Leveliniz '+ inttostr((WebApplication.Data as TIWUserSession).level);

end;

procedure TfrmHome.mnuLogClick(Sender: TObject);
begin

  with FDQuery1 do
  begin
    Active := False;
    SQL.Clear;
    SQL.Text := 'select * from tblogs';
    Active := True;
  end;
  IWDBGrid1.Caption:='Log Kayıtları';


end;

procedure TfrmHome.mnuPassClick(Sender: TObject);

begin


  with FDQuery1 do
  begin
    Active := False;
    SQL.Clear;
    SQL.Text := 'select * from tbpasswords';
    Active := True;
  end;
  IWDBGrid1.Caption:='Kullanıcılar ve Şifreleri';

end;

end.
Boş sayfa döndürüyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen xxxjedixxx »

Olmaması lazım. SQL.Add('...'); yazmıyorsunuz değil mi? Zira bu şekilde query.clear etmezseniz son satırdaki sorgunun sonucunu görürsünüz. Bu yüzden ben hep SQL.Text := '...' şeklinde kullanırım. Hem tek satırda halletmiş oluyorum.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Evet daha önceki kodlarım sQl. add şeklinde sizin kodlarınız ile değiştirdim. .clear propertyini eklemek gerekmiyor. Kodu tamamıyla dediğiniz gibi yazdım ancak kimi zaman boş sayfa döndörüyor kimi zaman da accessviolation hatası veriyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen xxxjedixxx »

Peki, şöyle birşey dener misin?

Kod: Tümünü seç

  with FDQuery1 do
  begin
    Active := False;
    SQL.Clear; // buna gerek yok
    SQL.Text := 'select * from tbpasswords';
    Active := True;
    if not IsEmpty then begin Last; First; end;
  end;
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Anlamadığım şey oncreate olayında tabloyu gride ekliyor. Daha sonra aynı tabloyu ya da başka bir tabloyu gride çekmek istediğimizde hata veriyor. Dataset'i boşaltmak gerekiyor mu?
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Gene hata veriyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen xxxjedixxx »

DataSet dediğimiz zaten FDQuery1 nesnesinin kendisidir. Active := False dediğinde boşaltıyor. Gerçekten anlamadım. Debug yaparak satır satır çalıştırır mısın? Nerede patlıyor.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

Kod: Tümünü seç

function TField.GetDisplayText: string;
begin
  Result := '';
  if Assigned(FOnGetText) then
    FOnGetText(Self, Result, True) else
    GetText(Result, True);
end;
fdquery1.active:=true denince FOnGetText(Self, Result, True) else satırında hata veriyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: IWDBGrid'de başka bir tablo çekme sorunu

Mesaj gönderen PROGRAMADOR »

İlk tabloyu çekerken sorun yok. İkinci tabloda sorun veriyor. grid için yapmamız gereken bir şey var mıdır?
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla