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.
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
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 Uygulama yükleme hatası [Çözüldü] codder71 3 304 23-02-2024, Saat: 22:42
Son Yorum: codder71
  Delphi 12 Boş Form Derleme Hatası [Çözüldü] codder71 4 470 21-02-2024, Saat: 22:09
Son Yorum: codder71
  (ÇÖZÜLDÜ - Kısmen) D11 Mobile SDK gönderim hatası shooterman 13 1.186 06-12-2023, Saat: 23:56
Son Yorum: 3ddark
  Open failed: ENOENT (no such file or directory) hatası kajmerantime 0 238 01-12-2023, Saat: 10:07
Son Yorum: kajmerantime
  Rad Studio 11.3 RequestPermissions Hatası [Çözüldü] Mesut 0 474 18-07-2023, Saat: 14:30
Son Yorum: Mesut



Konuyu Okuyanlar: 1 Ziyaretçi