Resimdeki hatanın sebebi ne olabilir ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Resimdeki hatanın sebebi ne olabilir ?

Mesaj gönderen baloglurecep »

Arkadaşlar yazdığım okul programında derleme esnasında hata yok. Exe çalışmaya başladıktan bir süre sonra (süre de belli olmuyor. Bazen üç beş dakika sonra, bazen bir saat bazen daha uzun zaman sonra) aşağıda resimlerini ekledim hatalar çıkmaya başlıyor. Tahminim timer nesnesi içine yazdığım kod kısmında ama nerde niçin verdiğini bulamadım. desteklerinizi bekler saygılar sunarım.

1. resim: invalid pointer operation.
2. resim :acces violation at adress 00401d27 in module "okul.exe" write of adress 9a35e1dc
Dosya ekleri
hata2.png
hata2.png (8.21 KiB) 1528 kere görüntülendi
hata1.png
hata1.png (4 KiB) 1528 kere görüntülendi
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Resimdeki hatanın sebebi ne olabilir ?

Mesaj gönderen mrmarman »

Bu kadar veri ile cevap vermek güç. En azından timer içindeki kodu buraya yazsaydın... Neyi yinelediğini bilirdik en azından.

Zamana veya duruma bağlı bir nesne create ediyor veya free ediyor olabilir misin, paralel işlem yapan başka timer, kullanıcı var mıdır gibi soruların cevabı da lazım.
Resim
Resim ....Resim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Resimdeki hatanın sebebi ne olabilir ?

Mesaj gönderen baloglurecep »

mrmarman hocam timer nesnesine bağlı ekranda tarih ve saati labelde gösteren kod ile aşağıdaki procedur kodlarım var.

Kod: Tümünü seç

procedure TANA_FORM.DersZaman;
var gun:string;
gunid,id:integer;
baslama:tdatetime;
  begin

  //DERS PROGRAMI GOSTER
gunid:=DayOfWeek(Now);
case gunid of
  2:gun:='PAZARTESI';
  3:gun:='SALI';
  4:gun:='CARSAMBA';
  5:gun:='PERSEMBE';
  6:gun:='CUMA';
else
  gun:='HAFTASONU';
  end;

DM.DERS_PROG_SEC.Close;   // Su anki dersi sec
DM.DERS_PROG_SEC.SQL.Text:='SELECT DERS FROM DERS_SAATLERI WHERE (TIME() > CDate(GIRIS)) AND (TIME() < CDate(CIKIS))';
DM.DERS_PROG_SEC.Open;

if DM.DERS_PROG_SEC.RecordCount=0 Then // ders saati değil ise sonraki dersi sec
  Begin
  DM.DERS_PROG_SEC.Close;
  DM.DERS_PROG_SEC.SQL.Text:='SELECT top 1 DERS FROM DERS_SAATLERI WHERE (TIME() < CDate(GIRIS))';
  DM.DERS_PROG_SEC.Open;
  End;

DM.DERS_PROG_GOSTER.Close;
if DM.DERS_PROG_SEC.RecordCount<>0 Then
  Begin
  DM.DERS_PROG_GOSTER.SQL.Text:='SELECT SINIFLAR.SINIF, DERS_P.'+gun+' AS bgun,DERS_P.'+gun+'_O AS OGRETMEN,DERS_P.K_DERS  FROM DERS_P INNER JOIN SINIFLAR ON DERS_P.S_ID = SINIFLAR.Kimlik WHERE K_DERS='+QuotedStr(DM.DERS_PROG_SEC.FIELDBYNAME('DERS').ASSTRING);
  DM.DERS_PROG_GOSTER.Open;
  End;

//DERS PROGRAMI GOSTER SON


  DM.DERS_PROG_SEC.Close;
  DM.DERS_PROG_SEC.SQL.Text:='SELECT DERS,CDate(GIRIS) as gg,CDate(CIKIS) as cc FROM DERS_SAATLERI order by GIRIS';
  DM.DERS_PROG_SEC.Open;


  DM.DERS_PROG_SEC.First;
  if Time < DM.DERS_PROG_SEC.FieldByName('gg').AsDateTime Then
    Begin //Ders Baslamamıs
     BILGI.Caption:='DERSLERİMİZ HENÜZ BAŞLAMADI...';
        DM.DS_DERS_PROG_GOSTER.Enabled:=FALSE;
         label_durum.Caption:='DERSİN BİTMESİNE '+TimeToStr(TIME-(DM.DERS_PROG_SEC.FieldByName('GG').AsDateTime) );

    End;

  DM.DERS_PROG_SEC.Last;
  if Time > DM.DERS_PROG_SEC.FieldByName('cc').AsDateTime Then
    Begin //Ders Bitmiş
    BILGI.Caption:='DERSLER BİTTİ.';
        DM.DS_DERS_PROG_GOSTER.Enabled:=FALSE;
        label_durum.Caption:='';
    End;

if DM.DERS_PROG_SEC.RecordCount>0 Then
  Begin

   if (GUN='HAFTASONU')then BEGIN
        BILGI.Caption:='HAFTA SONU';
        DM.Q_nobet_source.DataSet.Active:=FALSE;
        DM.DS_DERS_PROG_GOSTER.DataSet.Active:=FALSE;
       EXIT;
    END;

  DM.DERS_PROG_SEC.First;

   While Not(DM.DERS_PROG_SEC.Eof) Do
      Begin
     if (Time >DM.DERS_PROG_SEC.FieldByName('GG').AsDateTime) Then
      Begin
      DM.DS_DERS_PROG_GOSTER.Enabled:=TRUE;
      BILGI.Caption:='ŞUAN '+ DM.DERS_PROG_SEC.FieldByName('DERS').AsString+'TEYİZ';
      label_durum.Caption:='DERSİN BİTMESİNE '+TimeToStr(TIME-(DM.DERS_PROG_SEC.FieldByName('CC').AsDateTime) );
      //Break;
      End;

       if (Time > DM.DERS_PROG_SEC.FieldByName('CC').AsDateTime)Then
           Begin
        BILGI.Caption:='ŞUAN TENEFÜSTEYİZ.';
        DM.DS_DERS_PROG_GOSTER.Enabled:=FALSE;
        label_durum.Caption:='';
       // Break;
        End;

    	DM.DERS_PROG_SEC.Next;

       End;  
     End;
   End;

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Resimdeki hatanın sebebi ne olabilir ?

Mesaj gönderen mrmarman »

ilk hata timer nesnesi içinde ardışık veritabanı erişimi sıkıntılıdır. Çünkü timer bir thread olarak çalışır, saniye mertebesinde interval gibi kısa aralıklarla daha tablo erişimi aktifleşmeden bir daha erişim bir daha erişim sonra al sana çöküş.

Zaman takibi için seyrek bir sorgu olmalı. Bu timer içinde atıyorum dakikada bir veritabanına erişime kadar seyrek olmalı. Sana bir fikir, gerçekleşmesini beklediğin saati bir değişkende tutup, o an gerçekleşene kadar tabloya geri dönme. Böylece erişim süresi alarm aralığı kadar olacaktır. Alarm gerçekleşince aynı değişkene bir sonraki saati alırsın.
Resim
Resim ....Resim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Resimdeki hatanın sebebi ne olabilir ?

Mesaj gönderen baloglurecep »

Teşekkür ederim hocam hemen girişimlere başlıyorum.
Cevapla