Sql veri karşılaştırma

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Sql veri karşılaştırma

Mesaj gönderen sltokar »

iyi günler,sizlere delphide kullanılmak üzere bir soru sormak istiyorum.

Query1.SQL.Text:='Select Count(ogretmenad) From data Where ogretmenad="'+Combobox1.Text+'"';
query1.Open;
sayi:=Query1.fields[0].AsInteger;
Query1.SQL.Text:='Select * from ogretmen where ad="'+combobox1.Text+'"';
query1.open;
if sayi=Query1.fieldbyName('kontenjan').asInteger Then
ShowMessage('Kontenjan Doldu')

benim böyle bir sql kodum var bunu combobox ın onclick olayına yazdım ve işlem yaptırıyorum.Benim istediğim bu kodu formun creatine uyarlamak ve programa girildiğinde combobox1 deki isimleri veritabanı ile karşılaştırıp eşit olan varsa onu comboboxtan silsin.
yardımlarınız için şimdiden teşekkürler.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

formun create olayı yerine onshowuna yazarak deneseniz..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

ama benim istediğim kendi yazdığım kodu kullanmak değil çünkü bu kod benim istediğim işimi görmüyor. Kodda gerekli değişiklikleri ben yapamadım,bu konuda yardım istemiştim.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Yapmak istediğinizi anlamış değilim.biraz daha açarsanız yardımcı olucaz.
tablonuz ney veritabanınız ney alanlarınız ney neyi nerden istiyorsunuz vs. gibi.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

İyi günler
konuyu biraz daha açayım o zaman.
yukarıdaki gönderdiğim örnek şöyle çalışıyor.program açıldığında ogretmen isimli veritabanındaki ad isimli alandaki bilgiler combobox1 e ekleniyor. Bende comboboxtan bir kişiyi seçtiğimde bu kişiye ait olan kayıtları data veritabanındaki ogretmenad alanlarına göre topluyor ve topladığı rakamı ogretmen isimli veribanında bulunan kontenjan alanındaki rakamla karşılaştırıyor ve eğer data veritabaından topladığı rakam ile ogretmen veritabaındaki kontenjandaki rakam eşit olursa kontenjan dolu diyerek mesajımızı bildiriyor.
benim istediğim bunu comboboxtan seçtiğimiz kişiye göre değilde.Programa girişte comboboxta bulunan kayıtları kontrol etsin ve eşit olanları comboboxtan temizlesin.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Şöyle bişey yapsanız dada dinamik bir yapı uygulamış olursunuz. Comboboxınıza hiçbişey yazmayın. Program çalıştığı sırada forum show olduğunda dbden gerekli sorgulamayı yapıp (gelmesini sitemediğiniz kısıtları veren bir sql ile) gelen öğretmenleri comboboxa ekleyin.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

şimdi biraz daha anladım o zaman şöyle yapacaksın bir döngü açıcaksın


Kod: Tümünü seç

var
         i:integer;
         begin
         for i:=0 to combobox1.items.count-1 do
        begin
        Query1.SQL.Text:='Select Count(ogretmenad) From data Where ogretmenad="'+combobox1.items[i]+'"'; 
query1.Open; 
sayi:=Query1.fields[0].AsInteger; 
Query1.SQL.Text:='Select * from ogretmen where ad="'+combobox1.items[i]+'"'; 
query1.open; 
if sayi=Query1.fieldbyName('kontenjan').asInteger Then 
ShowMessage('Kontenjan Doldu')
burda teker teker combo içindeki tüm itemleri teker teker dener .
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

sayın vedatkaba
yardımınız için tşk.
verdiğiniz koda göre işlem yaptırdım,işlem sonunda mesela comboboxta birden fazla kayıt eşit ise her kayıt için ayrı ayrı şhow message veriyor.
bunun yerine işlem sonunda showmessage yerine eşit olan kayıtları comboboxtan hiçbir mesaj vermeden silen bir komut yazmamız lazım.Bunu nasıl yapabiliriz.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

onu şöyle yapcaz mesela comboboxta o kendisi döngüyle her bir elemanı tekler teker seçmekte showmessage yerine

Kod: Tümünü seç

combobox1.DeleteSelected;
combobox1.Items.Delete(combobox1.ItemIndex);
bu iki komutta comboboxtan itemsleri siler ama combodaki veriler veritabanında kayıtlımı onunla ilgili bir ibare göremedim yazdıklarınızda.eğer veritabanında kayıtlı ise combo daki bilgiler showmessage yerine o kaydı silecek komutu yazarsınız olur. ki burda ki komutta amacımız seçilen kayıt eğer eşitse sil değilse silmez zaten.benim anlamadığım bir nokta eğer böyle olmazsa en son yazdığını komutun tamamını buraya yazmanızı rica ediyorum ne yaptığımızı nasıl yaptığınızı anlamak açısından.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

kod aşağıdadır.Ama silme işlemini malesef yapmıyor.
Bu arada comboboxın aldığı bilgiler veritabanından alınmıştır.Silme işlemi sadece comboboxtan olacak veritabanından değil.

Kod: Tümünü seç

var
  i,sayi:integer;
begin
  for i:=0 to ComboBox1.items.count-1 do
  begin
    Query1.SQL.Text:='Select Count(ogretmenad) From data Where ogretmenad="'+ComboBox1.items[i]+'"';
    query1.Open;
    sayi:=Query1.fields[0].AsInteger;
    Query1.SQL.Text:='Select * from ogretmen where   ad="'+ComboBox1.items[i]+'"';
    query1.open;
    if sayi=Query1.fieldbyName('kontenjan').asInteger Then
      combobox1.DeleteSelected;
    combobox1.Items.Delete(combobox1.ItemIndex);
  end;
end;
Not: Kodları [ code ] [ /code ] tagları içinde ve bloklu yazalım :!: edit rsimsek
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Query1.SQL.Text:='Select Count(ogretmenad) From data Where
ogretmenad="'+ComboBox1.items+'"';
query1.Open;
sayi:=Query1.fields[0].AsInteger;///
burda seçilenlerden alan indexi 0 olan veriyi sayi değişkenine atıyorsunuz.yani öğretmen sayısı


if sayi=Query1.fieldbyName('kontenjan').asInteger Then //
burdada kontenjan adlı alanın verisiyle karşılaştırma yapmışsınız..

Kod: Tümünü seç

var 
i,sayi:integer; 
begin 
for i:=0 to ComboBox1.items.count-1 do 
begin 
Query1.SQL.Text:='Select Count(ogretmenad) From data Where ogretmenad="'+ComboBox1.items[i]+'"'; 
query1.Open; 
sayi:=Query1.fields[0].AsInteger; 
Query1.SQL.Text:='Select * from ogretmen where ad="'+ComboBox1.items[i]+'"'; 
query1.open; 
if sayi=Query1.fieldbyName('kontenjan').asInteger Then 
begin
combobox1.Items.Delete(combobox1.ItemIndex); 
end else showmessage('herşey normal');
end; 
end;
kodu düzenledim böyle deneyin..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

kodu verdiğiniz gibi aynen kullandım.
Deneme amaçlı 3 kişinin sayılarını eşitledim,işlem yaptığımda
3 tane showmessage çıkıyor ama comboboxa bakıyorum hala 3 kişi silinmemiş.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

var 
i,sayi:integer; 
begin 
for i:=0 to ComboBox1.items.count-1 do 
begin 
combobox1.itemindex:=i;
Query1.SQL.Text:='Select Count(ogretmenad) From data Where ogretmenad="'+ComboBox1.items[combobox1.itemindex]+'"'; 
query1.Open; 
sayi:=Query1.fields[0].AsInteger; 
Query1.SQL.Text:='Select * from ogretmen where ad="'+ComboBox1.items[combobox1.itemindex]+'"'; 
query1.open; 
if sayi=Query1.fieldbyName('kontenjan').asInteger Then 
begin 
combobox1.Items.Delete(combobox1.ItemIndex); 
end else showmessage('herşey normal'); 
end; 
end;
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
sltokar
Üye
Mesajlar: 28
Kayıt: 28 Nis 2005 01:02

Mesaj gönderen sltokar »

son kodu denedim.comboboxta normalde 7 kişinin isimi var,bunlardan 3 ünün isminin silinmesi lazım(çünkü eşit olan onlar).Ancak 7 deva showmessage çıkıyor ve daha sonra baktığımda ise silinecek 3 kayıttan 2 tanesi silinmiş,
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

ben doğru şekilde çalıştırıyorum nasıl yaptığınızı anlamış değilim.

size örnek olark bir çalışma gönderiyorum bakın aşağıda bir butona basınca 0-20 ye kadar kayıt ekliyor ve bir butona basınca 20-0 tersten siliyor..

Kod: Tümünü seç

procedure TForm1.ekleClick(Sender: TObject);
var
i:integer;
begin
for i:=0 to 20 do
begin
combobox1.Items.Add(inttostr(i));
end;
end;

procedure TForm1.silClick(Sender: TObject);
var
i:integer;
begin
for i:=20 downto 0 do
begin
combobox1.ItemIndex:=i;
combobox1.Items.Delete(combobox1.ItemIndex);
end;
yukarıdaki kod için 2 buton bir combobox koyun ve bir deneyin..sizde göreceksiniz tamamı silinmiş.tablonuzda ki alanları yazpısını bilmediğim için bir yorum da yapamıyorum .
en son haliyle bir daha yoolarmısınız birde comboboxun içine kayıtları eklerken hangi kodu kullandınız onu da yazabirlirmisiniz.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Cevapla