Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Read-Only Hatası
#1
Merhaba, 
Ben multi-platform tarafinda sql server'a veri kaydetmeye calisiyorum,
Sorun windowsta derledigimde gayet duzgun calisiyor hat vermeden fakat androidde derledigimde read-only hatasi aliyorum.
isin ilginc tarafi veri okurken hicbir sikinti yok sadece veri kaydederken bu hatayi aliyorum.
procedure TForm1.btn_onaylaClick(Sender: TObject);
Var
 i:integer;
begin

if Edit1.Text='1578' then
begin
 ayarlartab_slide.ExecuteTarget(self);
 edit1.Text:='';
 exit;
end;
  if length(edit1.Text)<>11 then
  Begin
    ShowMessage('Hatalı Tc No');
    edit1.Text:='';
    Exit;
  End;
  Qry_Hasta.Close;
  Qry_Hasta.SQL.Text:='SELECT * FROM HASTA where TC_KIMLIK_NUMARASI='+QuotedStr(Edit1.Text);
  Qry_Hasta.Open;
  if Qry_Hasta.RecordCount=0 then
  Begin
  ShowMessage('Aranılan Kayıt Bulunamadı');
  Edit1.Text:='';
  Edit1.SetFocus;
 Exit;
  End;
  Qry_SiraAl.Close;
  Qry_SiraAl.SQL.Text:='SELECT * FROM HASTA_SIRA WHERE KABUL_TARIHI='+TarihDuzenlesql(date,'')+' AND HASTA_KODU='+Qry_Hasta.FieldByName('HASTA_KODU').AsString;
  Qry_SiraAl.Open;
  if Qry_SiraAl.RecordCount>0 then
  Begin
  Qry_sirakntrl.Close;
  Qry_sirakntrl.ParamByName('TC_KIMLIK_NUMARASI').Value:=edit1.Text;
  Qry_sirakntrl.Open;
  if Qry_sirakntrl.RecordCount<>0 then
  begin
  label2.Text:='MEVCUT SIRANIZ';
  siranotab_slide.ExecuteTarget(self);
  label2.Text:=Qry_sirakntrl.FieldByName('NUMARATOR_SIRASI').AsString;
  end;
    //ShowMessage('Kişi Daha Önce Sıra Almış Tekrar Alamaz...');
    edit1.Text:='';
    Exit; End;
 Qry_Sorgu.Close;
 Qry_Sorgu.SQL.Text:='SELECT MAX (NUMARATOR_SIRASI) AS SIRA FROM HASTA_SIRA WHERE KABUL_TARIHI='+TarihDuzenlesql(date,'')+' AND AH_KIMLIK_NO='+QuotedStr(initc);     //KAC KAYIT VAR SORGULU
 Qry_Sorgu.Open;
 i:=Qry_Sorgu.FieldByName('SIRA').AsInteger+1;
 Qry_SiraAl.Append;
 Qry_SiraAl.FieldByName('HASTA_KODU').Value:=Qry_Hasta.FieldByName('HASTA_KODU').AsString ;
 Qry_SiraAl.FieldByName('TC_KIMLIK_NUMARASI').Value:=Qry_Hasta.FieldByName('TC_KIMLIK_NUMARASI').AsString;
 Qry_SiraAl.FieldByName('AD').Value:=Qry_Hasta.FieldByName('AD').AsString ;
 Qry_SiraAl.FieldByName('SOYADI').Value:=Qry_Hasta.FieldByName('SOYADI').AsString ;
 Qry_SiraAl.FieldByName('AH_KIMLIK_NO').Value:=initc;
 Qry_SiraAl.FieldByName('NUMARATOR_SIRASI').AsInteger:=i;
 Qry_SiraAl.FieldByName('KABUL_TARIHI').AsDateTime:=DATE;
 Qry_SiraAl.FieldByName('KABUL_ZAMANI').AsDateTime:=NOW;
 Qry_SiraAl.Post;
 label2.Text:=i.ToString;
 siranotab_slide.ExecuteTarget(self);
 edit1.Text:='';
end;
Z5WOZZ.png
Muharrem ARSLAN
WWW
Cevapla
#2
Hatayı debug ettiniz mi? Hangi satırda hata alıyorsunuz tam olarak? Aldığınız hata mesajının tam içeriği/görüntüsü nedir?
Cevapla
#3
Merhaba,
Qry_SiraAl query'nin ReadOnly özelliğine baktınız mı? İşlem yapabilmeniz için bu özelliğin False olması gerekiyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
debug derken hocam anlamadim.
hatayi program calisirken aliyorum derlerken almiyorum aldigim hatanin tam icerigini paylastim resim olarak

(14-06-2019, Saat: 10:25)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Qry_SiraAl query'nin ReadOnly özelliğine baktınız mı? İşlem yapabilmeniz için bu özelliğin False olması gerekiyor.

evet hocam bunu denemistim daha once ama sonuc yine ayni
Muharrem ARSLAN
WWW
Cevapla
#5
Merhaba

Unidac kullanıyorsun tahmin ediyorum. Şimdi sıkıntı şöyle olabiliyor bazen şimdi se üst kodunda

Qry_SiraAl.Close;
Qry_SiraAl.SQL.Text:='SELECT * FROM HASTA_SIRA WHERE KABUL_TARIHI='+TarihDuzenlesql(date,'')+' AND HASTA_KODU='+Qry_Hasta.FieldByName('HASTA_KODU').AsString;
Qry_SiraAl.Open;

yapmışın. Fakat default olarak select * from hasta_sira daha önce yapmışsın. Dolaysıyla üsteki kod yapınca eski sorgu kayboluyor ve query artık bu sorgu üzerinde işlem yapmaya çalışıyor ve patlayabiliyor.

Biraz dandik olabilir ama örnek olarak böyle de çözebilirsin.
Bir tane daha Qry_SıraAlKayit gibi bir query koy ve aynı sekilde Qry_SıraAl gibi ayarla.

Sonra aşağıdaki insert kodunda

Qry_SiraAl.Append;
Qry_SiraAl.FieldByName('HASTA_KODU').Value:=Qry_Hasta.FieldByName('HASTA_KODU').AsString ;
Qry_SiraAl.FieldByName('TC_KIMLIK_NUMARASI').Value:=Qry_Hasta.FieldByName('TC_KIMLIK_NUMARASI').AsString;
Qry_SiraAl.FieldByName('AD').Value:=Qry_Hasta.FieldByName('AD').AsString ;
Qry_SiraAl.FieldByName('SOYADI').Value:=Qry_Hasta.FieldByName('SOYADI').AsString ;
Qry_SiraAl.FieldByName('AH_KIMLIK_NO').Value:=initc;
Qry_SiraAl.FieldByName('NUMARATOR_SIRASI').AsInteger:=i;
Qry_SiraAl.FieldByName('KABUL_TARIHI').AsDateTime:=DATE;
Qry_SiraAl.FieldByName('KABUL_ZAMANI').AsDateTime:=NOW;
Qry_SiraAl.Post;

Qry_SıraAl yerine Qry_SıraAlKayit kullanabilirsin ve bir yerde çakmasın. tabiki bu inserten once queryiyi close - open yap da hazır olsun.

Kolay gelsin
WWW
Cevapla
#6
hocam sadece bir tane Qry alip bir sorgu yaptim ve sonuc yine ayni
Muharrem ARSLAN
WWW
Cevapla
#7
Query bileseni yerine table bileseni ile kayit islemini yapsanız işinizi görmez mi?
Cevapla
#8
Oda ayni sekilde hata verdi

merhaba sorunu su sekilde cozdum unidac yerine sdac yukledim ve sorun duzeldi
https://www.devart.com/sdac/?gclid=Cj0KC...dSEALw_wcB
Muharrem ARSLAN
WWW
Cevapla
#9
Bu gibi çoklu platform uygulamalarında veri tabanı işlemlerini direkt yapmak yerine (datasnap gibi) bir ara katman üzerinden yapmakta fayda var.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Google Play Store Uygulama Yüklerken API Hatası glagher 6 93 10 saat önce
Son Yorum: Fesih ARSLAN
  [ÇÖZÜLDÜ]Android derleme hatası[ÇÖZÜLDÜ] arsl01 3 400 15-07-2020, Saat: 22:18
Son Yorum: arsl01
  IOS Simulator "Unable to create process: /Applications/PAServer-20.0.app/" Hatası elixir84 7 790 04-06-2020, Saat: 02:28
Son Yorum: elixir84
  Android deployment E0004 PAClient Hatası behcet.tolga 2 472 23-03-2020, Saat: 16:42
Son Yorum: behcet.tolga
  TabControl delete adres hatası Kerembacioglu 5 977 09-03-2020, Saat: 23:27
Son Yorum: kodamelesi



Konuyu Okuyanlar: 1 Ziyaretçi