Table ile çalışan kod Query ile çalışmadı :-(

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Table ile çalışan kod Query ile çalışmadı :-(

Mesaj gönderen mpolat »

HerkeseMerhaba,
Arkadaşlar başlığa ek olarak şunlar söyleyelebilirm:
1.Query'lerde Master-Detail ilişki söz konusu yani 3 adet Query ayrı ayrı qryANA ismindeki Query ile ilişkili.
2.Hepsinin RequestLive özelliğinin değeri True.
3.Bütün Query'lerin Active özelliğinin değeri True
4.DBGrid'ler doğru DataSource'lara bağlı
5.Herşeyi aynı olan, sadece Query ve Table nesnesi kullanımı farklı olan bir deneme yaptım Table'da istediğim çıktıyı alıyorum. Ama istenilen sorgularda da Table kullanamıyorum.
6. Kodum da aşağıdaki gibi

Kod: Tümünü seç

procedure TfrmKasaTutanak.SpeedButton1Click(Sender: TObject);
var
i,j:integer;
begin
j:=qryParaData.RecordCount;
for i:=1 to j do
 begin
 qryParaOperasyon.Insert;
 qryParaOperasyonPARAADI.AsInteger:=qryParaDataPARADI.AsInteger;
 qryParaOperasyon.Post;
 qryParaData.Next;
 end;
DBGrid3.SetFocus;
end;
yapmak istediğim şey PARADATA adındaki tablonun PARAADI alanındaki değerleri PARAOPERASYON adlı tablonun PARAADI alanına atamak. Programı çalıştırdığımda hiçbir hata mesajı almıyorum. Yukarıdaki kodu tetikleyen butona bastığımda kodun son satırı olan

Kod: Tümünü seç

DBGrid3.SetFocus;
çalışıyor sadece. Bu durumda ben yukardaki kodların da çalışabiliyor olabileceğini düşündüm. Belki de çalışıyor arka planda ama sonucu göremiyorum :-( Yardımlar için herkese şimdiden çok teşekkürler.
"İlmin anası sormaktır"
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Aslinda kodunuz dogru ve dediginiz gibi Table ile de sorunsuz calisacaktir. Programı satır satır calistirir ve de degisken degerlerine bakarsanız muhtemelen qryParaData.RecordCount sonucunda sıfır dondugunu goreceksiniz. Tam olarak nedenini bilmiyorum ama bu benim de basıma geldi Query 'nin RecordCount ozelligi bazen dogru sonucu vermiyor ve sıfır donuyor. Hangi durumlarda bunu yaptıgını tespit edemedim. Fakat delphi helpine de bakarsanız recordCount ozelligi icin Query'de kullanırken dikkatli olunması buyuk sonuclarda epey yorucu bir is oldugunu filan yaziyor. Ben bu sorunu soyle asmistim. oncesinde ufak bir query calistirarak kayit sayisini ayrica aliyordum. Ornegin:

Kod: Tümünü seç

with TQuery.Create(Self) do
begin
  DatabaseName:='DBETIS';
  SQL.Add('Select count(*) as KAYIT_SAYISI from PARADATA');
  Open;
  j:=FieldByName('KAYIT_SAYISI').AsInteger;
  Free;
end;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ayrıca kodu aşağıdaki şekilde deneyebilirsin. Böylece bütün kayıtları tarıyacağından qryParaData.RecordCount hatalı olsa bile çalışacaktır.

Kod: Tümünü seç

procedure TfrmKasaTutanak.SpeedButton1Click(Sender: TObject); 
var 
  i,j: integer; 
begin 
  qryParaData.First;
  while not qryParaData.EOF do
  begin 
    qryParaOperasyon.Insert; 
    qryParaOperasyonPARAADI.AsInteger:=qryParaDataPARADI.AsInteger; 
    qryParaOperasyon.Post; 
    qryParaData.Next; 
  end; 
  DBGrid3.SetFocus; 
end;
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

Sevgili Recep Abi ve Sevgili Fahrettin Abi öncelikle ilginiz için çok teşekkür ederim. Ve arkasından cevaba geciktiğim için de çok özür dilerim. Memleketin diğer illerinde durum nedir bilmem ama bugün Kayseri'de fırtına var ve o sebeple elektrikler sık sık gidip geliyor. Bu sebepten ben de geciktim.
Konuya gelince Recep Abi'nin kodunu denediğimde farklı bir şey olmadı. Fahrettin Abi'nin kodunu da muhtemelen benim projeye tam uyarlayamamış olmalıyım ki kodu tetikleyen butona bastığımda Tabloların olmadığına dair bir hata iletisi aldım. Aslında Recep Abi'nin kodu kafama çok iyi yattı. Çalışmayınca daha doğrusu aynı sonuçsuzluğu verince acaba atladığım bir detay mı var diye düşünmeye başladım? Abi acaba sizce 1. mesajda yazdığım öğelere ek olarak başka bir detayı atlıyor olabilir iyim? Bir fikir verebilirseniz müteşekkir kalırım.
Saygılarımla....
"İlmin anası sormaktır"
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tabi ki öncelikle ne yapacağını kodla değil de sözle anlatırsan yardımlar daha net olabilir.
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

Abi sizi sinirlendirdiysem lütfen hakkınızı helal ediniz :cry: . Baştan daha net anlatmaya çalışayım:
Şimdi Formumda 3 tane Query var. adları qryAna, qryParaData ve qryParaOperasyon.Bu tablolardan qryParaOperasyon, qryAna tablosuna ISLEMNO adında bir alanla bağlı.
Benim tam olarak yapmak istediğim şey şu: qryParaData tablosunun PARAADI alanındaki kayıtları qryParaOperasyon tablosunun PARAADI alanına aktarmak.
Bu arada bir şey daha keşfettim Recep Abi, bu yapmak istediğimiz işlemi gerek for döngüsü ile gerekse sizin tavsiye ettiğiniz gibi while-do döngüsü ile yapmak istediğimde; eğer qryParaOperasyon tablosu qryAna tablosuna bağlı değilse yapıyor. qryParaData tablosunun kayıtları tam da istediğim gibi qryParaOperasyon tablosuna aktarılıyor. Fakat ne zaman qryParaOperasyon tablosunu qryAna tablosuna bağlarsam hiçbirşey olmuyor :-)
"İlmin anası sormaktır"
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sevgili kardeşim sinirlenecek bir durum yok. Sadece tam olarak ne yapmak istediğini anlattan kastım. Kod üzerinde olayı anlatmandan ziyade, yapılacak olayı anlatmandı. Her neyse şimdi aşağıdaki insert işleminde sadece bir alana atama yapıyorsun. Tabloda başka alan yok mu? Eğer varsa ve boş kalıyorsa işlem sonunda hiç bir şey olmamış gibi görünebilir.

Bu yüzden qryAna tablosuna da ISLEMNO alanı ile master-detail bağlantın varsa aynı alandan bir de qryParaOperasyon da olmalı. Dolaysıyla insert işleminden sonraki satırı ilave etmen lazım.

Kod: Tümünü seç

...
 qryParaOperasyonPARAADI.Insert;
 qryParaOperasyonISLEMNO.Value := qryAnaISLEMNO.Value; // tipini bilmediğim için value yaptım.
qryParaOperasyonPARAADI.AsInteger:=qryParaDataPARADI.AsInteger; 
 qryParaOperasyonPARAADI.Post;
...
umarım sorun çözülür.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

mpolat yazdı:Abi sizi sinirlendirdiysem lütfen hakkınızı helal ediniz :cry:
Merhaba,

arkadaşlar burda tüm forum yönetimi ve diğer üyeler iyi niyetli bir şekilde karşılık beklemeden yardımcı oluyoruz. Bu tip ifadeleri çok gördüğüm için yazmak ihtiyacı hissettim. Soru soranlara karşı herhangi bir kızma durumu yok. Kızdığımız hususları Forum Kuralları kısmında belirttik zaten.

Ancak bazen soru soranın ne yapmak istediği tam olarak anlaşılamıyor veya verilen bilgiler tam yeterli olmuyor. Bunun için sorularla konuyu daha net anlamaya çalışıyoruz.

Son olarak, forumda herhangi bir ters durum görürseniz özel mesaj ile moderator abilerimize ve bana çekinmeden ulaştırabilirsiniz.

İyi günler.
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

Sevgili Recep Abi ve Mustafa Abi sanırım yanlış anladım. Kusura bakmayın. İnsan burada sadece yazılanları görünce insanların yüz halini göremeyince böyle yanlış düşünebiliyor. Pardon :-)
Konuya gelince walla Recep Abi ne yaparsam yapayım olmuyor. Bu işlem de sonuç vermedi. Hergün kendiliğinden bir şeyler oluyor sonunda beni delirtecek. Bugün de durduk yere "Key violation" hatası vermeye başladı şimdiye kadar böyle bir hata yoktu. Projeyi incelemek istermisiniz? Sıkıştırılmış hali sadece 173 KB .
"İlmin anası sormaktır"
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

"Key violation" hatası tabloda aynı key den var anlamındadır. Bunu paradoks kullanıyorsan ? Database Desktop tan girip fazlalık kayıtları silersen durum düzelecektir. Bu arada tabloya her insert edişinde aynı key den (sanırım burada ISLEMNO) var mı diye baktırman lazım?? dolaysıyla iş biraz daha kontrol gerektirebilir..

Yine de bu söylediklerimle sorunu çözemezsen kodu mailleyebilirsin. Ama bu en son çare olsun, malum bizim de kendi meşgalelerimiz var:)
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

Recep Abi tavsiyenize uyarak (Bu arada evet Paradox kullanıyorum) tabloya baktım. Enteresan bir manzarayla karşılaştım ki o da şu: aslında kodu tetiklediğimizde evet tabloya istediğimiz kaydı yapabiliyormuşuz. Kayıtlar tam istediğim gibi ama DBGrid'de görüntülenmiyor.Yani şu aşamada problem daha değişik bir boyut kazanmış oldu.
Kodu maille gönderme işine gelince walla abi siz "malum bizim de kendi meşgalelerimiz var :-) " deyince düşündüm de haklısınız bunca işin gücün arasında foruma yazdıklarımıza sabırla cevap vermeniz yetmiyormuş gibi bi de bizim kodlarla uğraşmanız sıkkı bir superman olmanızı gerektirir. Hayır bi de arada yetmezmiş gibi kapris yapıyoruz :oops: O yüzden vicdanıma izah edemem kod gönderme işini. Kararlı bir şekilde vazgeçtim. :-) Bana bu ilk yardımınz değil öncekiler için bir daha ve bir daha, şimdiki içinse tekrardan çok teşekkür ederim.
"İlmin anası sormaktır"
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Eger farkli bir dataset uzerinden veya compoenent uzerinden giris olursa DBGrid'in veya DBGRid'in dataset'inin refresh olamamasi ve yeni bilgileri gosterememesi normal.

Bu durumda DBGRid'in dataset'i eger TAble ise Table1.Refresh, query ise de Query1.Close; Query1.Open; kodlari ile dataset'in refresh olmasini saglayabilirsiniz.

Kolay gelsin...
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

Abi herkese çok teşekkürler Fahrettin Abi'nin Query1.Close; Query1.Open; takviye tavsiyesi üzerine istediğim çıktıyı elde ettim.
"İlmin anası sormaktır"
Cevapla