Acceess de ADO Bileşenleri ile Kriterlere göre Sıralama ve..

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Acceess de ADO Bileşenleri ile Kriterlere göre Sıralama ve..

Mesaj gönderen HBV »

Access VT` de Ado Bilesenleri Kullaniyorum,DBGridde Hem Alfabetik Hemde Kriterlere gore siralama yapmak istiyorum
Bu Sitede Buldugum,Asagidaki Kodu IBDataSet`i ADODataSet Yapib denedim olmuyor.(SelectSQL yi CommandText`le geciyorum)
Yine Sitede buldugum Kriterlere gore siralama yapan kod da Adoda Calismiyor.(ADO Bilesenlerini Ilk defa Kullaniyorum)

Kod: Tümünü seç

//Sutun Baslikllarina tiklayarak Alfabetik Siralama.Firebird ve Interbase calisiyor.
var 
OrderDir: Boolean = True; 
procedure TForm1.Grid1TitleClick(Column: TColumn); 
begin 
inherited; 
if OrderDir then 
IBDATASET1.SelectSQL.Text := 'select * from NEW_TABLE order by ' + Column.FieldName + ' ASC' 
else 
IBDATASET1.SelectSQL.Text := 'select * from NEW_TABLE order by ' + Column.FieldName + ' DESC'; 
OrderDir := not OrderDir; 
IBDATASET1.Close; 
IBDATASET1.Open; 
END; 
end. 
Yine Bir Sutuna girilen verinin sayisini almak icin Yine bu Sitede buldugum IB\FiREBiRD de calistirdigim, asagidaki kodu Access de
ADOQuery veya ADODataSet yapib deniyorum sonuc alamiyorum.

Kod: Tümünü seç

IBQuery1.SQL.Clear; 
IBQuery1.SQL.Add('select count(SUTUN1) as t1_top, count(SUTUN2) as t2_top, count(SUTUN3) as t3_top from TABLO_ADI'); 
IBQuery1.Open; 
Label1.Caption := IBQuery1.FieldByName('t1_top').AsString; 
Label2.Caption := IBQuery1.FieldByName('t2_top').AsString; 
Label3.Caption := IBQuery1.FieldByName('t3_top').AsString; 
IBQuery1.Close; 
..................................

ADO Bilesenlerinin Calimasi Table den bir farki yok deniyor. ama denedigim kodlar ADO da calismiyor.veya ben çalıştıramadım.Sitelerde ADO Bileşenleri ile bu konuda ki Kodlara pek rastlayamadım.Sadece Arama ile ilgili kodlar buldum..Şimdiden teşekkür ediyorum.

Kod: Tümünü seç

//Kriterlere göre Listeleme.
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select * From TABLE1 ');
IBQuery1.SQL.Add('Where ARSIV Like ''%'+Edit2.Text+'%'''); // içinde ... geçenler
IBQuery1.Open;
En son HBV tarafından 16 Ağu 2005 07:07 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;

viewtopic.php?t=3493&highlight=ado+s%FDralama

Ado kullanmadım ama bu kodların hepsi çalışır gibi geliyor.O kadar da karışık sorgular değil.

Kod: Tümünü seç

IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select count(SUTUN1) as t1_top, count(SUTUN2) as t2_top, count(SUTUN3) as t3_top from TABLO_ADI');
IBQuery1.Open;
Label1.Caption := Query1.FieldByName('t1_top').AsString;
Label2.Caption := Query1.FieldByName('t2_top').AsString;
Label3.Caption := Query1.FieldByName('t3_top').AsString;
IBQuery1.Close; 
Yukarıdaki kod ta herhalde kayıt sayısını bulacaksın.3 defa count kullanmana gerek yok..Şöyle yapsan yeterli..

Kod: Tümünü seç

select count(ID) as KayitSayisi from TABLO_ADI

Kod: Tümünü seç

Label1.Caption := IntToStr(Query1.FieldByName('KayitSayisi').AsInteger); 
iyi günler...
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Bu kodların hepsini denedim ADO da çalışmıyor.
IBDataSet1.SelectSQL'nin Karşılığı ADODataSet1.CommandText.
problem burada...İkinci Kod,Kayıt sayısı değil,Sutunlara girilen veri sayısı.

Ama verdiğiniz adreste bazı bulgular var onu deneyeceğim.
Çağrıbey
Üye
Mesajlar: 40
Kayıt: 26 Kas 2004 11:25
Konum: Ankara

AdoDataSet arama yapmak, kayit sayisi bulma ornekleri

Mesaj gönderen Çağrıbey »

aşağıdaki kodlar işinize yarayabilir, kendi ihtiyaciniza göre değiştirebilirsiniz
---------
procedure TForm1.IsimSoyisimArama1Click(Sender: TObject);
var
araadi,arasoyadi:string;
begin
araadi:=inputbox('İsim GİRİŞİ', 'prompt', 'İsmi');
arasoyadi:=inputbox('SOYAD GİRİŞİ', 'prompt', 'Soyismi');
AdoDataset1.Close;
AdoDataset1.commandText:=('Select * From TABLO1 Where adi like "'+araadi+'%" and soyadi like "'+arasoyadi+'%" ');
Adodataset1.open;
end;
-------------
SORT işlemi
bu işlem SQL alaninda yapilabileceği gibi, istenen veri bulunduktan sonra da aşağıdaki şekilde sıraya sokulabilir..
AdodataSet1.sort:='adi ASC, soyadi ASC, sicil ASC, kacinci_rapor DESC';
-----------
procedure TForm1.Button2Click(Sender: TObject);
begin
AdodataSet1.Close;
AdoDataSet1.Commandtext:='Select * from TABLO1 where ((adi IS NOT NULL) and (soyadi IS NULL)) order by adi';
AdoDataSet1.Open;
end;
Panel1.Caption:=('Kayıt Sayısı:' +inttostr(AdoDataSet1.FieldCount));
--------
alan içinde istenen bir kelime ya da benzerlerini aramak..
AdoDataset1.Close;
AdoDataset1.commandText:='Select * From TABLO Where soyadi in("AKSOY","AK") ';
Adodataset1.open;
Gelecek günden ne dilersen, doğacak günler onu getirir
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Çok Sağol Arkadaşım.Yalnız Bu Kod lardan değiştirdimsede hiç faydalanamadım.Sebebi Sorguları ben Edit içinde aratarak bulmak istiyorum Örnek;

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 ara:Boolean;
begin
 ara:=ADODataSet1.Locate('ADI',Edit1.Text,[loCaseInsensitive]);
 if ara=false Then
   Form1.Caption:=('ARADIGINIZ KAYIT BULUNAMADI');
end;
Yukarıdaki Kod Problemsiz Çalışıyor.Edit 'in içine aranan veriyi giriyorum okadar. Mesela Aşağıdaki Kod Hiç hata vermiyor Ama Boş liste getiriyor.Ama Diğer veritabanlarında Problemsiz çalışıyor.Onda Edit içine harfler girdikçe içinde olanlar listeleniyor.

Kod: Tümünü seç

 ADODataSet1.Close;
 ADODataSet1.CommandText:='Select * From Tablo1';
 ADODataSet1.CommandText:='Where ADI Like ''%'+Edit2.Text+'%''';
 ADODataSet1.Open;
Yine Aşağıdaki Kod,Query leri ADOQuery yapıyorum,Sütuna Girilen sadece verileri sayıyor yani satırları değil ama ADO da , DBGridde kaç kayıt varsa onu veriyor.Ama Öbür vt 'lerde 35 kayıt varsa girilen veri 15 se 15 veriyor.

Kod: Tümünü seç

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
 SQlCumle:AnsiString;
begin
 SQLCumle:='select Count(SUTUN1) as TOP1, Count(SUTUN2) as TOP2, Count(SUTUN3) as TOP3 FROM TABLE1';
 with IBQuery1 do
 begin
  close;
  sql.clear;
  sql.add(SQLCumle);
  Open;
 end;
 Label1.Caption := IntToStr(IBQuery1.FieldByName('TOP1').AsInteger);
 Label2.Caption := IntToStr(IBQuery1.FieldByName('TOP2').AsInteger);
 Label3.Caption := IntToStr(IBQuery1.FieldByName('TOP3').AsInteger);
 end;
Çağrıbey
Üye
Mesajlar: 40
Kayıt: 26 Kas 2004 11:25
Konum: Ankara

AdoDataSet ile arama(edit ile)

Mesaj gönderen Çağrıbey »

aşağıdaki kodlar işine yarayabilir.. yalnız kullandığın veritabanına göre işaretlerde değişme olabiliyor, örneğin SQL veritabanı ile ACCESS veritabanı arasında fark olabiliyor..
bu durumda da biraz gayret etmen, biraz araştırma yapman ve biraz da deneme yanılma yolu ile kendini yorman gerekiyor..
unut ma ki, yüzmeyi ilk öğrenmek her şeyi bilmek anlamına gelmiyor, ne kadar ileriye gideceğin senin gayretine bağlı birşey..
kolay gelsin.

AdoDataset'te SQL kullanarak Edit1.text'te yazılı olanı arama yapmak
procedure TForm1.Button10Click(Sender: TObject);
begin
AdoDataset1.close;
ADODataSet1.CommandText := 'Select * From ADRES Where soyadi = ' + Quotedstr(edit2.text)';
AdoDataset1.Open;
AdoDataset1.sort:='Adi ASC, Soyadi ASC';
--------------
procedure TForm1.Button5Click(Sender: TObject);
begin
AdoDataSet1.filtered:=false;
if (Edit2.Text <> ' ') And (Edit3.Text <> ' ') And (Edit4.Text <> ' ') And (Edit5.Text <> ' ') then
begin
AdoDataSet1.Close;
AdoDataset1.commandText:='Select * From ADRES Where adi='''+Edit2.Text+''' and soyadi='''+Edit3.Text+''' and ili='''+Edit4.Text+''' and ilcesi='''+Edit5.Text+''' ';
Adodataset1.open;
End;
end;
---------------
aşağıdaki örnekte ise edite yazacağın her harfe göre anında uyan kayıtlar ekrana yansır.. yalniz bu veritabanini biraz yavaşlatir.. eğer kayıt çok ise şu kadar karekterten sonra basılırsa arama yap yoksa bekle diye bir kontrol de koyabilirsin..

procedure TForm1.Button6Click(Sender: TObject);
begin
AdoDataSet1.Close;
AdoDataset1.commandText:='Select * From ADRES Where adi like '''+Edit2.Text+'%'' ';
Adodataset1.open;
End;
end;
Gelecek günden ne dilersen, doğacak günler onu getirir
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Valla Arkadaşım Çok sağol gerçekten,Allah senden razı olsun Bende deniyorum fakat aynen söylediğin gibi veritabanı farkından dolayı.uğraştırıyor.ama verdğin kodlar larda bana yol gösteriyor.Tekrar teşekkürler.
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Evet arkadaşım Kodlar tamam fakat Sütunda sadece veriyi sayan(Count) kod da problem var..sayıyı veriyor fakat silince sayı labalde yine gösteriyor!!!!!.
ikincisi Access'i diğer (ağ)makinalarda ofisi, Microsoft Access'i kurmadan nasıl çalıştırırım.Bunun için bilgi verirsen çok memnun olurum.İyi çalışmalar.
Cevapla