TFDTable.Gotokey Access Violation Hataası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mkucuktepe
Üye
Mesajlar: 13
Kayıt: 30 Oca 2021 10:55

TFDTable.Gotokey Access Violation Hataası

Mesaj gönderen mkucuktepe »

Arkadaşlar Delphi 7 yazdığım kodlar Rad Studio da çalışmadı
kod:
procedure Tsdtmf.siradegistir(Tables:String;aramaalani,Degistirilecekalan,suankiID,degisecekID:integer);
var
suankisira,degiseceksira:integer;
sl1,sl2:string;
Table_degistir:TFDtable;
tables_degistir_SRC:TDatasource;
Begin
Table_degistir:=TFDTable.create(nil);
tables_degistir_SRC:=Tdatasource.Create(nil);
Table_degistir.Connection:=sdtmf.mksuruconnection;
Table_degistir.Tablename:=Tables;
tables_degistir_SRC.DataSet:= Table_degistir;
Table_degistir.CachedUpdates:=True;
Table_degistir.FieldDefs.Update;
Table_degistir.IndexFieldNames:=Table_degistir.FieldDefs.Items[0].Name ;
Sl1:=Table_degistir.FieldDefs.Items[1].Name;
Sl2:=Table_degistir.FieldDefs.Items[2].Name;
Table_degistir.open();

if Table_degistir.locate(Table_degistir.FieldDefs.Items[aramaalani].Name,suankiID,[loCaseInsensitive]) then
Begin
Table_degistir.GotoKey;
suankisira:=Table_degistir.Fields[Degistirilecekalan].Value;
End;
End;

Verdiği Hata mesajı da :
Acces Violation at the address 008CAA8C in module read of address 00000002

delphi 7 de çalışan procedure şimdi rad studio da çalışmıyor. Ayrıca ; delphi 7 de yazılmış kod ve companentler neden üst versiyonda eksik ve yanlışlarla dolu hata veriyor?
Yardımınız için şimdiden teşekkür ederim
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: TFDTable.Gotokey Access Violation Hataası

Mesaj gönderen ertank »

Merhaba,

Hatayı hangi satırda aldığınızı net olarak belirtmemişsiniz. Ancak konu başlığına bakınca GotoKey satırında olduğunu tahmin ediyorum.

Paylaştığınız kod ile yapmak istediğiniz tam olarak nedir? Bir tabloda, belli bir satırdaki belli bir kolona ait değeri değiştirmek gibi anlaşılıyor.

Eğer amacınız bu ise TFDTable.GotoKey kullanımınız hatalı. Bu komut öncesinde bir yerde TFDTable.SetKey kullanmadığınız için hata alıyor olmanız normal.

Diğer taraftan, amacınız mevcut kaydı bulmak ise TFDTable.Locate zaten sizi istediğiniz kayda odaklamış olur. Kaydı bulduktan sonra ekstra TFDTable.GotoKey kullanmanıza gerek yok.

Tabi hata farklı bir satır için geliyor olabilir. RAD Studio'da sağ üst kısımda kalan Proje Yöneticisi içinde projeniz için DEBUG modu seçili olduğu halde F9 tuşu ile debug run yaparsanız, hata aldığınızda gelen mesaja da Break butonunu tıklayarak işleyişi durdurur iseniz sol üst kısımda call stack listesini görürsünüz.

Call Stack hata oluşan son prosedür/fonksiyonu en üstte olacak şekilde gösterir. Bu fonksiyon her zaman gerçek hata olan yeri veya sebebini anlamanıza yardımcı olmaz. Bazı hataların kaynağını bulabilmek için listede aşağı doğru inerek size ait kodların olduğu ilk prosedür/fonksiyonu tespit etmelisiniz. Bunu tespit ettiğinizde üzerine çift tıklayarak ilgili satıra gidersiniz. sol alt kısımda Local Variables içinde de yerel değişkenlerin değerlerini görürsünüz. Bu bilgileri kullanarak hata kaynağını daha sağlıklı tespit edebilirsiniz.
mkucuktepe
Üye
Mesajlar: 13
Kayıt: 30 Oca 2021 10:55

Re: TFDTable.Gotokey Access Violation Hataası

Mesaj gönderen mkucuktepe »

Evet Gotokey Satırında hata alıyorum. Amacım Anne, Baba, hastalik gibi tablolara (Sql server Veritabanı)tek tek FDTable oluşturmak yerine bir procedure ile ulaşarak örneğin Anne tablosunu belirtmiş isem anne tablosunda arama yapıp eğer kayıt var ise o kayda gitmek istiyorum dediğim gibi Delphi 7 de çalışıyordu kodlar burada hata veriyor
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: TFDTable.Gotokey Access Violation Hataası

Mesaj gönderen ertank »

Daha önce kullandığınız veritabanı ve bileşenler ile şu anda kullandıklarınızdan farklı olmalı. Yeni bileşenlerin kullanımına uygun kodlar yazmalısınız.
GotoKey kullanımınızın hatalı olduğunu daha önce de yazmıştım. Delphi 7 ile kullanıyor iken de hatalı kullanmışsınız. Özetle o satıra hiç ihtiyacınız olmamalı. Silip kodun doğru çalıştığını test edebilirsiniz.
Cevapla