Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
null okuma problemi
#1
for i:=1 to 10 do
 begin

 PuanlamaDagitimMerkezi.SQLQuery1.SQL.Clear;
 PuanlamaDagitimMerkezi.SQLQuery1.SQL.Add('select * from TBL_OYUNLARGECICI where ID='+IntToStr(i));
 PuanlamaDagitimMerkezi.SQLQuery1.Open;

 if(PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value<>null) then begin
    if(PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value<>'') then begin s:=s+1; os:=os+1;
     BID[s]:=PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value;

bu sekilde denedim gene ayni
  if not(PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value=Null) then
                                                                     begin
                                                                     BID[i]:=PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value;


                                                                     end;  

arkadaslar id 1 iken veriyi aliyor sorun yok ama id 2 oldugunda BID null oldugu halde id1 in bilgilerini id2 nin gibi ekliyor.
ayni kod delphi7 de sorunsuz calisiyor ama lazarusda boyle bir sorunla karsilastim sebebi ne olabilir acaba

BID dizimde 1 bilgi olmasi gerekirken 10 adet ayni bilgi oluyor
bunun sebebi ne olabilir acaba 

saygilar.
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#2
SQL yakasında NULL'a düşmeyecek şekilde sorguları SELECT içinde halletmeye çalışın.

Örneğin BID bir string ifade ise

SELECT COALESCE(BID, '') as BID

BID bir sayı ise

SELECT COALESCE(BID, 0) as BID

gibi

böylece NULL durumunda daima varsayılan olarak verdiğiniz parantezdeki değer neyse o olacaktır.

bir de DÖNGÜ içerisinde NEXT demeyi unutmuş olabilir misiniz ... Aynı değer dediğiniz için sordum
PuanlamaDagitimMerkezi.NEXT; demezseniz bir sonraki kayda geçmez hep ilk kayıtta kalır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
for i:=1 to 10 do
begin

PuanlamaDagitimMerkezi.SQLQuery1.SQL.Clear;
PuanlamaDagitimMerkezi.SQLQuery1.SQL.Add('select * from TBL_OYUNLARGECICI where ID='+IntToStr(i));
PuanlamaDagitimMerkezi.SQLQuery1.Open;

if not(PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value=null) then
begin
BID[i]:=PuanlamaDagitimMerkezi.SQLQuery1.fieldbyname('BID').value;


end;
PuanlamaDagitimMerkezi.SQLTransaction1.Commit;
end;

bu sekilde gorev yapiyor dogrumu uldum bilmiyorum.

sagolun hocam
COALESCE komutuyla sorgu icinde null durumunu bakmayi ogrenecegim.
saygilar
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#4
Transaction Commit işlemi sadece ekleme veya değişiklik yaptığınızda kullanırsınız.
İlişkisel veritabanları ağ trafiğini ekonomik kullanmak için yerelde çektiğiniz veriler üzerinde ekleme çıkarma düzeltme yapma imkanı verir. İşiniz bittiğini değerlendirdiğiniz veya belli bir tazeleme zaman aralığı geçmişse, bu değişmiş içerik COMMIT ile ağ üzerinden merkez veritabanına işlenmek üzere gönderilir.

Ben gözümden kaçmış sorgu içinde NEXT demenize lüzum yokmuş, zaten öğrenci sayınız kadar kere veritabanını açıyor ve ilgili öğrenciye ID bazında odaklanıyormuşsunuz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
//ilğili veritabanına bağlanalım----
DMvtLANE.IBConnection1.Password:=_vtSifre;
   DMvtLANE.IBConnection1.Connected:=false;
   DMvtLANE.IBConnection1.DatabaseName:=_LanePcYol1+'\system\db\OYUNLAR1.FDB';
   DMvtLANE.IBConnection1.Connected:=True;
   DMvtLANE.SQLTransaction1.Active:=True; 



sql:='UPDATE TBL_OYUNLARGECICI set BID=----------------------------------------------';
                   DMvtLANE.SQLQuery1.Close;
                   DMvtLANE.SQLQuery1.SQL.Clear;
                   DMvtLANE.SQLQuery1.SQL.Add(sql);
                   DMvtLANE.SQLQuery1.ExecSQL;     



s:='UPDATE TBL_OYUNDURUM set OYNDRM=1-----------------------------------------------';
DMvtLANE.SQLQuery1.Close;
DMvtLANE.SQLQuery1.SQL.Clear;
DMvtLANE.SQLQuery1.SQL.Add(s);
DMvtLANE.SQLQuery1.ExecSQL;    
DMvtLANE.SQLTransaction1.CommitRetaining;  

anladim hocam veritabaniyla ilgili cok sorun yaasiyorum bu ara  
bir veritabanim var icinde 2 adet tablom var bir procedure icinde ikisindede guncelleme yapmam lazim.
birinci tablodaki guncellemeyi yapmiyordu hatada vermiyordu ama ikinci tablodaki guncellemeyi yapiyordu.
birinci tabloda guncelleme yaptiktan sonra commit vardi onu kaldirdim gene ayni bazen calisiyor iki tablodada guncelleme yapiyor sonra yapmiyor birseyi atliyorum ama ne

veritabanina surekli bagli kalmak mi daha dogru yoksa her procedurede gidip once veritabanina baglanip sonra guncelleme yapmak mi daha dogru
saygilar sunarim.
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#6
Bir veritabanına iki veya daha fazla farklı bilgisayar ile erişiyorsanız bir bilgisayardaki her update işlemi ardından CommitRetaining yapmak doğru bir yaklaşımdır.

Ayrıca her bilgisayar için sürekli açık bir veritabanı kullanmayıp, onun yerine gerektiğinde açıp veriyi alıp veritabanını kapatmak en sağlıklısı.

Değerlendirmeyi offline yaparsınız.

Eğer veritabanı üzerinden birbiri ile hızla konuşması gereken bilgisayarlar varsa bu durumda "Event Notification" anahtar kelimeleri ile araştırmanızı geliştirin. Çünkü veritabanında bir değişiklik oluştutuğunda bilgisayarlara TCP üzerinden yayın yapılarak bir değişiklik olduğu haberini yayabilir, o zaman veritabanı açılıp değişikliğin ne olduğuna bakılmasını tetikleyebilirsiniz.

Bu arada bilgisayarların firewall ayarları da önemlidir. Bazı portların açık olması lazım ki (5000, 3050 vb.) sunucu ile istemci bilgisayarlar arasındaki haberleşme sağlıklı olsun.

Bunlar size araştırmanız ve veritabanı tasarımınız konusunda anahtar olsun.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
bir ana bilgisayarim local agda 6 adet baska bilgisayarim var. ana bilgisayardan ihtiyacim oldugunda diger bilgisayar veritabanlarina baglanip datami kaydedip cikiyorum.
diger bilgisayarlar verilen gorevi tamamlayinca ana bilgisayara baglanip gorev tamam bilgisi veriyor baska baglanti yapmiyorlar tum baglantilari ana bilgisayar yapiyor.
cok buyuk problem yasamiyorum ama programda zaman zaman cok donma oluyor fiziksel baglantida bir problem olmamasina ragmen bazen istedigim bilgisayara baglanamayabiliyorum.
takilmalar harici bir sorun yasamiyorum.

bu sorunu benzer programlar server yazarak cozmusler ana bilgisayar daki ana program ana bilgisayardaki server a datayi gonderiyor.
server o bilgiyi bagli bilgisayara belki ilk seferinde belki ucuncu denemesinde gonderiyor boylece server arka planda calistigi icin kullanici birsey hissetmiyor.
ben bu olayi yapmadim ihtiyac aninda direk ilgili pc ye baglanip datayi kaydediyorum.

ilerde bende benzer bir yapiyi deneyecegim insallah.
becerebildigim kadar.
saygilar sunarim.
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  store procedure problemi sadikacar60 10 2.597 26-02-2024, Saat: 14:37
Son Yorum: sadikacar60
  Firebird 3.0 bağlantı problemi? Hsavci 3 1.934 15-04-2021, Saat: 09:47
Son Yorum: emozgun
Thumbs Up iki tablodan iç içe sorgu problemi (sorun çözüldü) baloglurecep 16 12.076 16-04-2020, Saat: 02:04
Son Yorum: pro_imaj
  Return ID okuma akuyumcu63 11 9.722 24-12-2019, Saat: 09:34
Son Yorum: Fesih ARSLAN
  Güncellenen Kayıt Sayısını Okuma akuyumcu63 1 2.280 13-12-2019, Saat: 13:42
Son Yorum: akuyumcu63



Konuyu Okuyanlar: 1 Ziyaretçi