Veritabanındaki bilgilerden istenilenin çıktısını almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
gince
Üye
Mesajlar: 46
Kayıt: 20 Nis 2004 04:09

Veritabanındaki bilgilerden istenilenin çıktısını almak

Mesaj gönderen gince »

merhaba arkadaşlar benim yapmak istediğimiz veritabanındaki bilgilerden istediklerimin raporunu almak istiyorum yani. Veritabanındaki bütün verilerim gelecek ben bunların yanına birer checkbox koyacağım. Bu check boxlardan seçtiklerimin bilgilerini raporunu alacağım. Şöyleki 10 tane verim var ben bu verilerden 5 tanesini seçiyorsam quickreportda da bu 5 tanesinin bilgilerini alacağım. Bunu nasıl yapabilirmiyim.Dbgridde böyle bir seçim yapabilirmiyim.
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Dbgridde yapamazsın. CheckDbgrid diye bi comp. var. Onunla yapabilirsin... Gayet de güzel ve mantıklı çalışıyor. Quickrep tarafındada bir query de işaretlenmişleri filtre edersin hallolur...

Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

@sair hocam şöyle bi method olabilirmi? tıklanan gridlerin bi fieldında update yapıp (o update yapılmış alana göre) renk verme işlemi yapıp sonra raporda ona göre query alsak? olabilemazmı? :)
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

olabilir, hatta satırları secerek secilen satırları bir dongu
ile QR nin OnNeedData olayında da bastırılabilir.
ÜŞENME,ERTELEME,VAZGEÇME
gince
Üye
Mesajlar: 46
Kayıt: 20 Nis 2004 04:09

Mesaj gönderen gince »

gkimirti yazdı:olabilir, hatta satırları secerek secilen satırları bir dongu
ile QR nin OnNeedData olayında da bastırılabilir.
peki bunu nasıl yapabilirim. Birde checkgrid comp. kurdum ama normal dbgridden pek farklı değil gibi.Check boxları göremiyorum. Bunu nasıl yapacağım
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

checkbox larını forma koy ve sonra rapor tuşunun içerisinde raporlamada kullandığın query'i değiştir yani

Kod: Tümünü seç

query1.sql.add('select ');
if checkbox1.checked then
query1.sql.add('alan1');

if checkbox2.checked then
query1.sql.add('alan2');

query1.sql.add(' from tabloismi');

gibi sorgunu hazırlarsan başka birşey yapmadan istediğine kavuşursun.
bu arada imla hataları olabilir. :)
Oldeye Software
http://www.oldeye.com
gince
Üye
Mesajlar: 46
Kayıt: 20 Nis 2004 04:09

Mesaj gönderen gince »

feinpus yazdı:checkbox larını forma koy ve sonra rapor tuşunun içerisinde raporlamada kullandığın query'i değiştir yani

Kod: Tümünü seç

query1.sql.add('select ');
if checkbox1.checked then
query1.sql.add('alan1');

if checkbox2.checked then
query1.sql.add('alan2');

query1.sql.add(' from tabloismi');

gibi sorgunu hazırlarsan başka birşey yapmadan istediğine kavuşursun.
bu arada imla hataları olabilir. :)
yalnız kullacağım checkbox sayısı belli değil yani sql sonucu veritabanından kaç kayıt gelirse o kadar checkbox koymam gerekiyor.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

//tabloda tıklayınca ilgili alanı set edecek kod
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
quetable.Edit;
quetable.FieldByName('checkfield').asboolean :=
  NOT quetable.FieldByName('checkfield').asboolean ;
quetable.Post;
end;

// bu tıklanan alanı kırmızı yapacak
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  if gdSelected in State then exit;
  if quetable.FieldByName('checkfield').asboolean then
    dbgrid1.Canvas.Brush.Color := clRed
  else
  dbgrid1.Canvas.Brush.Color := clWhite;

  dbgrid1.DefaultDrawDataCell(Rect, Field,State);
end;

// buda rapora göndereceğin query başka şartlar varsa and ile devam et.
procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLMEMQuery1.Close;
  with SQLMEMQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT *');
      SQL.Add('FROM WGHQUE');
      SQL.Add('WHERE 1=1');
      SQL.Add('AND WGHQUE.checkfield = TRUE')
      end;
  try
   SQLMEMQuery1.Open;
   except
     // do nothing
   end;
   rvproject1.Execute; // ben rave reportta denedim sonuç iyi :)
end;
normal dbgrid kullanmak isttersen buda iş görüyor denendi :P
.-.-.-.-.-.-.-. ^_^
gince
Üye
Mesajlar: 46
Kayıt: 20 Nis 2004 04:09

Mesaj gönderen gince »

checkgrid comp. kullanımı hakkında yardım alabilirmiyim.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

bahsettiğin komponenti kurmadım delphi 7 için yok. 5 için vardı. dosyalarına baktım. herhangibir boolean alanı true veya false yapıyor. beya string alan ise 'T' ve 'F' yapıyor.

yani üstteki koda gerek kalmıyor :( .sadece eğer databasininboolean desteği varsa

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLMEMQuery1.Close;
  with SQLMEMQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT *');
      SQL.Add('FROM WGHQUE');
      SQL.Add('WHERE 1=1');
      SQL.Add('AND WGHQUE.checkfield = TRUE')
      end;
  try
   SQLMEMQuery1.Open;
   except
     // do nothing
   end;
   rvproject1.Execute; // ben rave reportta denedim sonuç iyi :)
end; 
veya vtde boolean yoksa string alanda

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLMEMQuery1.Close;
  with SQLMEMQuery1 do
    begin
      SQL.Clear;
      SQL.Add('SELECT *');
      SQL.Add('FROM WGHQUE');
      SQL.Add('WHERE 1=1');
      SQL.Add('AND WGHQUE.checkfield = ''T''')
      end;
  try
   SQLMEMQuery1.Open;
   except
     // do nothing
   end;
   rvproject1.Execute; // ben rave reportta denedim sonuç iyi :)
end; 
.-.-.-.-.-.-.-. ^_^
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

Mesaj gönderen celalatak »

Merhaba
Benimde benzer bir sorunum olmuştu. Dbgridde işaretlenen alanlar raporlanıyordu. Çözümümü anlatayım uygun bulursan kullanırsın. Çözüm pardox için firebirde de kolaylıkla uyarlanır.


Veritabanında boolean bir alan tanımlanacak; benimki hesap . Table bileşeninde dinamik alan tanımlayacaksiniz ben aciklama olarak tanımladım( dbgridede işaretlenen alanlar true-false olarak görünmesin işaretlenen alanda ödenecek ibaresini yazmasını istedim) .
Form üzerine birde DBCheckBox ekle datafieldi databasedeki boolean alan olsun.

Dbgridin olayları

Kod: Tümünü seç

procedure TfrmOdemeAl.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.Columns[DBGrid1.SelectedIndex].FieldName='aciklama' THEN
         DBCheckBox1.Visible:=true
         else
         DBCheckBox1.Visible:=false;
end;

Kod: Tümünü seç

procedure TfrmOdemeAl.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
if (gdfocused in state) and (column.FieldName='aciklama') then
        begin
        dbcheckbox1.SetBounds(rect.Left+dbgrid1.Left+1,
        rect.Top+dbgrid1.Top+1,rect.Right-rect.Left+1,
        rect.Bottom-rect.Top+1);
        end;

end;

table' onCalcField olayına

Kod: Tümünü seç

procedure TfrmOdemeAl.Table1CalcFields(DataSet: TDataSet);
begin

if table1hesap.Value=true then table1aciklama.Value:='Ödenecek'
        else table1aciklama.Value:='';

end;
raporlama esnasında hesap alanında true değerleri filitreyip yazdırıyorum.
bir sonraki raporlamada sorun yaratmaması içinde raporlamadan sonra hepsini false yapıyorum.

*** Kodlarınızı CODE tagı içine alın. mege
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

CheckDbGrid in üstüne sağ tıkla, Columns editore gir. New butonuna tıkla. Alan oluştur. O alanı objeckt inspectorden checkbox koyacağın fielda bağla. üstte seçimi var. (adını unuttum) Orayı da Checkbox olarak seç. Tamamdır. Ancak Checkbox koyacağın alan varchar veya char bir alan olmalı.. Çünkü T ve F harflerini kendisi otomatik kaydediyor. Numeric alan kabul etmiyor. Gridin ilginç özelliği de şu. Checkbox a tıklandığı anda veritabanına kayıt yapıyor. Yani ayrıca post göndermek gerekmiyor. işaretli olan kayda T harfini atıyor.. Daha sonra bir Query koy.. Ve Check için ayrılan fielddaki T harfi olanları seç.. Raporla..


Sevgiler..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
gince
Üye
Mesajlar: 46
Kayıt: 20 Nis 2004 04:09

Mesaj gönderen gince »

sair yazdı:CheckDbGrid in üstüne sağ tıkla, Columns editore gir. New butonuna tıkla. Alan oluştur. O alanı objeckt inspectorden checkbox koyacağın fielda bağla. üstte seçimi var. (adını unuttum) Orayı da Checkbox olarak seç. Tamamdır. Ancak Checkbox koyacağın alan varchar veya char bir alan olmalı.. Çünkü T ve F harflerini kendisi otomatik kaydediyor. Numeric alan kabul etmiyor. Gridin ilginç özelliği de şu. Checkbox a tıklandığı anda veritabanına kayıt yapıyor. Yani ayrıca post göndermek gerekmiyor. işaretli olan kayda T harfini atıyor.. Daha sonra bir Query koy.. Ve Check için ayrılan fielddaki T harfi olanları seç.. Raporla..


Sevgiler..
dediklerinizi yaptım ama olmadı. formun üzerine bir checkbox koyacakmıyız. Ya size zahmet ama biraz daha ayrıntılı yazarmısın. teşekkür ederim
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

checkbox falan koymayacaksın. yahu gridin columns editorun de var ya seçimli olarak.. columns editore girin alanı seçin. object inspectorde arayın.. bende kurulu değil hatırlamıyorum hangi özellik olduğunu..

Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Cevapla