Nesneler Nasıl Tanımlanır (oop)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Nesneler Nasıl Tanımlanır (oop)

Mesaj gönderen haydarxxx »

slm

MDIForm a ağırdığım MDIChild formdaki butonların içindeki kodları nasıl çalıştırabilirim.

Access violation at address 0055c2b7 in module 'OdemeEmri.exe'. Read of address 000002f8

nesne/ler henüz oluşturulmamış olduğu forumda da geçiyor bunla ilgili maklelrede baktım ama hiç bir şey anlamadım.nesne nedir nasıl oluşturuluyor kaldıki MDIForm dan MDIChild formu

Kod: Tümünü seç

procedure TForm3.BitBtn3Click(Sender: TObject); //MDIForm 
begin 
if Assigned(Form8) then 
Form8.BringToFront 
else 
Application.CreateForm(Tform8,Form8); 
end; 
ile formu create ediyorum ve fsMDIChild 

procedure TForm8.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
Action := caFree; 
Form8 := nil; 
end; 

bu koşulda açılan MDIChild formdaki edit,post işlemlerini yapabiliyorum ama diğer butonları çalıştıramıyorum.öreneğin

Kod: Tümünü seç

procedure TForm8.suiButton9Click(Sender: TObject);
function rakyazf(tutar: real; tur: integer): string;
  const
    b1: array[1..9] of string =
    ('BİR', 'İKİ', 'ÜÇ', 'DÖRT', 'BEŞ', 'ALTI', 'YEDİ', 'SEKİZ', 'DOKUZ');
    b2: array[1..9] of string =
    ('ON', 'YİRMİ', 'OTUZ', 'KIRK', 'ELLİ', 'ALTMIŞ', 'YETMİŞ', 'SEKSEN',
      'DOKSAN');
    b3: array[1..6] of string =
    ('KATRİLYON', 'TRİLYON', 'MİLYAR', 'MİLYON', 'BİN', '');
  var
    gr: array[1..6] of string[3];
    sn: array[1..6] of string;
    bs: array[1..3] of integer;
    tutars, tutart, tutark, sonuct, sonuck: string;
    i, l: integer;
  begin
    tutars := floattostr(tutar);

    if pos(DecimalSeparator, tutars) = 0 then
      tutars := tutars + DecimalSeparator+'00'; 
    tutart := copy(tutars, 1, (pos(DecimalSeparator, tutars) - 1));
    tutark := copy(tutars, (pos(DecimalSeparator, tutars) + 1), 2);
    tutart := stringofchar('0', (18 - (length(trim(tutart))))) + tutart;
    tutark := tutark + stringofchar('0', (2 - (length(trim(tutark))))); 
    for i := 1 to 6 do
      gr[i] := copy(tutart, 1 + (3 * (i - 1)), 3); 

    for l := 1 to 6 do
    begin
      bs[1] := strtoint(copy(gr[l], 1, 1));
      if bs[1] <> 0 then
        (if bs[1] <> 1 then
            sn[l] := sn[l] + b1[bs[1]] + 'YÜZ'
          else
            sn[l] := sn[l] + 'YÜZ');
      bs[2] := strtoint(copy(gr[l], 2, 1));
      if bs[2] <> 0 then
        sn[l] := sn[l] + b2[bs[2]];
      bs[3] := strtoint(copy(gr[l], 3, 1));
      if bs[3] <> 0 then
        sn[l] := sn[l] + b1[bs[3]];
      if length(trim(sn[l])) <> 0 then
        sn[l] := sn[l] + b3[l];
    end;

    if sn[5] = 'BİRBİN' then
      sn[5] := 'BİN';
    for i := 1 to 6 do
      sonuct := sonuct + sn[i];
    if strtoint(copy(tutark, 1, 1)) <> 0 then
      sonuck := sonuck + b2[strtoint(copy(tutark, 1, 1))];
    if strtoint(copy(tutark, 2, 1)) <> 0 then
      sonuck := sonuck + b1[strtoint(copy(tutark, 2, 1))];
    if tur = 0 then
      result := sonuct + '.TL / ' + sonuck + '.KR ';
    if tur = 1 then
      result := sonuct + '.TL ';
    if tur = 2 then
      result := sonuck + '.KR ';
  end;
begin
IBDataSet_BURS.FetchAll;
IBDataSet_BURS.First; //döngü başlangıcı
While not IBDataSet_BURS.Eof do
begin
IBDataSet_BURS.Edit;
IBDataSet_BURS.FieldByName('DVERGI').Value:= IBDataSet_BURS.FieldByName('BODENEK').Value* Form2.IBDataSet_KURUMSABIT.FieldByName('DORANI').Value;
IBDataSet_BURS.FieldByName('EGECEN').Value:= IBDataSet_BURS.FieldByName('BODENEK').Value-IBDataSet_BURS.FieldByName('DVERGI').Value;
IBDataSet_BURS.Post;

IBDataSet_BURS.Next;
end;
 IBTransaction1.CommitRetaining;


//alttplam
with  IBQuery1 do
IBDataSet_ALTTOPLAM.edit;

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select sum(BODENEK) as TOPLAM_BURUTTOPLAM from TBL_BURS ');
IBQuery1.Open;
IBDataSet_ALTTOPLAM.FieldByName('BTOPLAM').value:=FloatToStr(IBQuery1.FieldByName('TOPLAM_BURUTTOPLAM').AsFloat);


IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select sum(DVERGI) as TOPLAM_DAMGATOPLAM from TBL_BURS ');
IBQuery1.Open;
IBDataSet_ALTTOPLAM.FieldByName('DTOPLAM').value:=FloatToStr(IBQuery1.FieldByName('TOPLAM_DAMGATOPLAM').AsFloat);


IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select sum(EGECEN) as TOPLAM_ELEGECENTOPLAM from TBL_BURS ');
IBQuery1.Open;
IBDataSet_ALTTOPLAM.FieldByName('ETOPLAM').value:=FloatToStr(IBQuery1.FieldByName('TOPLAM_ELEGECENTOPLAM').AsFloat);


IBDataSet_ALTTOPLAM.post;
IBTransaction1.CommitRetaining;


//alttoplam

//nakit kodlarına geçiş
with  IBQuery2 do
form9.IBDataSet_HESAP.edit; //NAKIT BİLGİSİNİN HESAPLANMASI İÇİN  GÖNDERİMİ

IBQuery2.Close;
IBQuery2.SQL.Clear;
IBQuery2.SQL.Add('select sum(BODENEK) as TOPLAM_ODENEK from TBL_BURS ');
IBQuery2.Open;
form9.IBDataSet_HESAP.FieldByName('NAKIT').value:=FloatToStr(IBQuery2.FieldByName('TOPLAM_ODENEK').AsFloat);

form9.IBDataSet_HESAP.FieldByName('DAMGA').value:=form9.IBDataSet_HESAP.FieldByName('NAKIT').value*form2.IBDataSet_KURUMSABIT.FieldByName('DORANI').value;
form9.IBDataSet_HESAP.FieldByName('GELIR').value:=form9.IBDataSet_HESAP.FieldByName('NAKIT').value*form2.IBDataSet_KURUMSABIT.FieldByName('GORANI').value;
form9.IBDataSet_HESAP.FieldByName('EGECEN').value:=form9.IBDataSet_HESAP.FieldByName('NAKIT').value-(form9.IBDataSet_HESAP.FieldByName('DAMGA').value+form9.IBDataSet_HESAP.FieldByName('GELIR').value); //ele geçen
form9.IBDataSet_HESAP.FieldByName('YNAKIT').value:='Yukarıda Yazılı   #'+(rakyazf(form9.IBDataSet_HESAP.FieldByName('NAKIT').value, 0))+'#   Tahakku Ettilmiştir.Ödemesi/Mahsubu Gerekir'; //tahakkuk yazı
form9.IBDataSet_HESAP.FieldByName('YGECEN').value:='Yanlız   #'+(rakyazf(form9.IBDataSet_HESAP.FieldByName('EGECEN').value, 0))+'#   Aldım';  //elegeçen yazı
form9.IBDataSet_HESAP.FieldByName('KESINTITOPLAM').value:=form9.IBDataSet_HESAP.FieldByName('GELIR').value+form9.IBDataSet_HESAP.FieldByName('DAMGA').value;




form9.IBDataSet_HESAP.post;
form9.IBTransaction1.CommitRetaining;

Form1.IBQuery1.SQL.Clear;
Form1.IBQuery1.SQL.Add('select count(*) from TBL_NAKIT_DEYAT where IDNAKIT='+FORM1.dbEdit1.text+'' );
Form1.IBQuery1.open;



Form1.IBDataSet_DETAY.FetchAll;
Form1.IBDataSet_DETAY.First; //döngü başlangıcı
While not Form1.IBDataSet_DETAY.Eof do
begin
if  (form1.IBDataSet_DETAY.FieldByName('KB').value='N') or (form1.IBDataSet_DETAY.FieldByName('KB').value='n') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('BORC').Value:= Form9.IBDataSet_HESAP.FieldByName('NAKIT').value;
//Kamu Personel İlaç Giderleri
Form1.IBDataSet_DETAY.post;
 end;
if  (form1.IBDataSet_DETAY.FieldByName('KB').value='D') or (form1.IBDataSet_DETAY.FieldByName('KB').value='d') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('BORC').Value:= Form9.IBDataSet_HESAP.FieldByName('DAMGA').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;
if  (form1.IBDataSet_DETAY.FieldByName('KB').value='G') or (form1.IBDataSet_DETAY.FieldByName('KB').value='g') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('BORC').Value:= Form9.IBDataSet_HESAP.FieldByName('GELIR').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;
if  (form1.IBDataSet_DETAY.FieldByName('KB').value='K') or (form1.IBDataSet_DETAY.FieldByName('KB').value='k') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('BORC').Value:= Form9.IBDataSet_HESAP.FieldByName('KESINTITOPLAM').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;

if  (form1.IBDataSet_DETAY.FieldByName('KB').value='E') or (form1.IBDataSet_DETAY.FieldByName('KB').value='e') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('BORC').Value:= Form9.IBDataSet_HESAP.FieldByName('EGECEN').value;
//Verilen Gönderme Emirleri Hesabı
Form1.IBDataSet_DETAY.post;
end;

if  (form1.IBDataSet_DETAY.FieldByName('KA').value='N') or (form1.IBDataSet_DETAY.FieldByName('KA').value='n') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('ALACAK').Value:= Form9.IBDataSet_HESAP.FieldByName('NAKIT').value;
//Kamu Personel İlaç Giderleri
Form1.IBDataSet_DETAY.post;
 end;

if  (form1.IBDataSet_DETAY.FieldByName('KA').value='D') or (form1.IBDataSet_DETAY.FieldByName('KA').value='d') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('ALACAK').Value:= Form9.IBDataSet_HESAP.FieldByName('DAMGA').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;
if  (form1.IBDataSet_DETAY.FieldByName('KA').value='G') or (form1.IBDataSet_DETAY.FieldByName('KA').value='g') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('ALACAK').Value:= Form9.IBDataSet_HESAP.FieldByName('GELIR').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;
if  (form1.IBDataSet_DETAY.FieldByName('KA').value='K') or (form1.IBDataSet_DETAY.FieldByName('KA').value='k') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('ALACAK').Value:= Form9.IBDataSet_HESAP.FieldByName('KESINTITOPLAM').value;
//Damga Vergisi
Form1.IBDataSet_DETAY.post;
end;

if  (form1.IBDataSet_DETAY.FieldByName('KA').value='E') or (form1.IBDataSet_DETAY.FieldByName('KA').value='e') then
begin

Form1.IBDataSet_DETAY.edit;
Form1.IBDataSet_DETAY.fieldbyname('ALACAK').Value:= Form9.IBDataSet_HESAP.FieldByName('EGECEN').value;
//Verilen Gönderme Emirleri Hesabı
Form1.IBDataSet_DETAY.post;
end;

form1.IBDataSet_DETAY.Next;
end;
form1.IBTransaction1.CommitRetaining;






with Form1.IBQuery2 do  //borç alttoplam
Form1.IBQuery2.Close;
Form1.IBQuery2.SQL.Clear;
Form1.IBQuery2.SQL.Add('select sum(BORC) as TOPLAM_BORC from TBL_NAKIT_DEYAT where IDNAKIT='+FORM1.DBEdit1.text+'');
Form1.IBQuery2.Open;
form1.IBDataSet_ALTTOPLAM.Edit;
form1.JvDotNetDBEdit4.text:=FloatToStr(Form1.IBQuery2.FieldByName('TOPLAM_BORC').AsFloat);
form1.IBDataSet_ALTTOPLAM.post;
form1.IBTransaction1.CommitRetaining;

with Form1.IBQuery2 do  //ALACAK alttoplam
Form1.IBQuery2.Close;
Form1.IBQuery2.SQL.Clear;
Form1.IBQuery2.SQL.Add('select sum(ALACAK) as TOPLAM_ALACAK from TBL_NAKIT_DEYAT where IDNAKIT='+FORM1.DBEdit1.text+'');
Form1.IBQuery2.Open;
form1.IBDataSet_ALTTOPLAM.Edit;
form1.JvDotNetDBEdit2.text:=FloatToStr(Form1.IBQuery2.FieldByName('TOPLAM_ALACAK').AsFloat);
form1.IBDataSet_ALTTOPLAM.post;
form1.IBTransaction1.CommitRetaining;

if  form1.JvDotNetDBEdit4.text<>form1.JvDotNetDBEdit2.text  then
begin
form1.JvDotNetDBEdit2.color:=clRed;
form1.JvDotNetDBEdit2.color:=clRed;
end;
if  form1.JvDotNetDBEdit4.text=form1.JvDotNetDBEdit2.text  then
begin
form1.JvDotNetDBEdit2.color:=clWindow;
form1.JvDotNetDBEdit2.color:=clWindow;
end;
showmessage('işlem tmm');

 end;
kod ço uzun oldu ama belki buraya göre bir tarif veren olur diye belirteyim dedim kısacası bu durumda nesne nasıl tanımlanıyor :!: :?:
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bu kodlara biraz göz attım ve gördümkü paldır küldür nerede hangi form varsa direk kullanmaya başlamışsın. Bunun yerine en başta her formu kontrollü olarak oluşturacak bir kaç satır yazman belki sorununu giderebilir.

Kod: Tümünü seç

procedure TForm8.suiButton9Click(Sender: TObject);
function rakyazf(tutar: real; tur: integer): string;
  const
    b1: array[1..9] of string =
.
.
.
begin
  if not Assigned(Form1) then Application.CreateForm(TForm1, Form1);
  if not Assigned(Form2) then Application.CreateForm(TForm8, Form2);
  if not Assigned(Form8) then Application.CreateForm(TForm9, Form8);
  if not Assigned(Form9) then Application.CreateForm(TForm2, Form9);
IBDataSet_BURS.FetchAll;
IBDataSet_BURS.First; //döngü başlangıcı
.
.
.
end;
gibi bir kodla formlarını kontrollü olarak en başta oluşturursan bu hata ortadan kalkabilir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam ilginiz için teşekkür ediyorum.Dediğinizi verdiğiniz gibi yaptım

Kod: Tümünü seç

function rakyazf(tutar: real; tur: integer): string; 
  const 
    b1: array[1..9] of string = 
. 
. 
. 
begin 
  if not Assigned(Form1) then Application.CreateForm(TForm1, Form1); 
  if not Assigned(Form2) then Application.CreateForm(TForm8, Form2); 
  if not Assigned(Form8) then Application.CreateForm(TForm9, Form8); 
  if not Assigned(Form9) then Application.CreateForm(TForm2, Form9); 
IBDataSet_BURS.FetchAll; 
IBDataSet_BURS.First; //döngü başlangıcı 
. 
. 
. 
end;
ama aynı hatayı alıyorum

Kod: Tümünü seç

Access violation at address 0055c2b7 in module 'OdemeEmri.exe'. Read of address 000002f8 
raporlarımı şu şekilde açmaya çalışıyordum
form7.quickrep1.preview; diye ondada aynı hatayı veriyordu ama sonra sizin verdiğiniz kodla denedim

if not Assigned(Form7) then Application.CreateForm(TForm7, Form7);
form7.quickrep1.preview;

rapor ön izlemesini artık görebiliyorum eyvallah

if not Assigned(Form2) then Application.CreateForm(TForm8, Form2); mantını anlamadığım için kodlarınızı

Kod: Tümünü seç

 if not Assigned(Form1) then Application.CreateForm(TForm1, Form1);
  if not Assigned(Form2) then Application.CreateForm(TForm2, Form2);
  if not Assigned(Form8) then Application.CreateForm(TForm8, Form8);
  if not Assigned(Form9) then Application.CreateForm(TForm9, Form9);
şeklinde yaptım hata vermedi biraz işlemin mantığından da bahsederseniz sevinirim ayrıca bu Create olayını ana formun activesine yazsak direk yazdığımızdada sorun olmuyor yani her forma ekleme yerine nede olsa hepsi anaform içinde çalışıyor mantık doğru mu bilmiyorum

çok teşekkür ediyorum
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Küçük bir kopyala yapıştır hatası yapmışım :oops: ama sen düzeltmişsin. Buradaki mantık olmayan nesneleri oluşturmaktı o kadar 8)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Teşekkürler
Cevapla