Acceess de ADO Bileşenleri ile Kriterlere göre Sıralama ve..
HBV15.08.2005 - 20:47:07
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)
//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.

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.


//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;
 
Uğur198216.08.2005 - 16:35:55
merhaba;

http://www.delphiturkiye.com/forum/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.

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..

select count(ID) as KayitSayisi from TABLO_ADI

Label1.Caption := IntToStr(Query1.FieldByName('KayitSayisi').AsInteger);


iyi günler...
 
HBV16.08.2005 - 17:10:57
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ıbey17.08.2005 - 12:38:11
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;
 
HBV17.08.2005 - 20:40:00
Ç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;

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.
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.
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ıbey18.08.2005 - 10:26:10
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;
 
HBV18.08.2005 - 18:57:20
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.
 
HBV19.08.2005 - 08:19:10
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.
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com