Numaratör tarzı SiraNr'ı hak. ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

s.a. arkadaşlar;
benim problemim şöyle: yeni butonuna bastığımda Numbers tablosunun SiraNr alanını 1 den başlayarak her bastığımda 1 artarak SiraNr alanına eklenmesini istiyorum taki 100 olana kadar eğer 100 ise numbers tablosundaki SiraNr alanına 0 atayıp tekrar birden başlamasını istiyorum bi nevi bankadaki numaratör gibi arkadaşlar.. yazdığım kodlar aşağıda arkadaşlar yanlış yada mantıkta eksik yaptığım şeyler olabilir yardım eden ilgilenen arkadaşlara şimdiden teşekkür ederim hayırlı çalışmalar Allaha emanet olun..

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 100 do
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('update numbers set siranr=siranr+1');
dbedit1.Text:=inttostr(i);
Query1.ExecSQL;
end;
end;
bir başka deneme:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
if ((dbedit1.Text)='100') then begin
i:=0;
i:=i+1;
dbedit1.Text:=inttostr(i);
end
else
i:=i+1;
dbedit1.Text:=inttostr(i);
end;
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

arkadaşlar denemelerimi yazıyorum ama istediğimi yapamıyorum..
tableB'nin Table1CalcFields olayına aşağıdaki kodu yazıyorum bu seferde eklenen yeni kayıt en başta oluyo..

Kod: Tümünü seç

Table1.FieldByName('SiraNr').AsInteger := Table1.RecNo + 1;
bir başka deneme sadece 1 yazdırabiliyorum butona ikinci kez tıkladığımda bir işlem gerçekleşmiyor..

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=0;
if i<5 then
begin
i:=i+ 1
end
else
i:=0;
dbedit1.Text:=inttostr(i);
end;
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen ibrahimcoban »

Kod: Tümünü seç

type
  TYuzeKadar = class
  protected
    Fsayi: integer;
    procedure SetSayi(const Value: integer);
    function Artir: integer;
  public
    constructor create;
    property Sayi: integer read Artir write SetSayi;
  end;

constructor TYuzeKadar.create;
begin
  sayi := 0;
end;

function TYuzeKadar.Artir: integer;
begin
  if fSayi = 100 then Fsayi := 0;
  inc(Fsayi);
  Result := FSayi;
end;

procedure TYuzeKadar.SetSayi(const Value: integer);
begin
  Fsayi := Value;
end;

http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşım öncelikle ilgin için teşekkürler ama verdiğin kodları nereye uyarlıycam anlamadım hangi kodu buttonun click olayına yazıp tablodaki SiraNr alanına yazdırıcam.. yinede yardımın için Allah razı olsun hayırlı çalışmalar..
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

arkadaşlar aşağıdaki kod ile veritabanında SiraNr alanını otomatik artsın olarak yaptım ve sıra numarasını küçükten büyüğe sıraya koyarak DbGrdide gösteriyo.. fakat SıraNr numarası 20'ye ulaştığında tekrardan 1'den başlamasını nasıl yapabilirim.. ilgilenen arkadaşların yardımlarını ve fikirlerini bekliyorum.. hayırlı çalışmalar herkese..

Kod: Tümünü seç

procedure TForm2.Button1Click(Sender: TObject);
begin
table1.Post;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From test Order By SiraNr');
Query1.open;
table1.Refresh;
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen conari »

Otomatik olarak artsın yaptıysan ona artık müdahale edemezsin.9999999999999999999999.. olana kadar gider.

Burdaki kodlarıda hiç anlamadım Table ne Query ne?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen ibrahimcoban »


Numaratör tarzı SiraNr'ı hak. ?
sevturk » Sal Şub 10, 2009 8:55

s.a. arkadaşlar;
benim problemim şöyle: yeni butonuna bastığımda Numbers tablosunun SiraNr alanını 1 den başlayarak her bastığımda 1 artarak SiraNr alanına eklenmesini istiyorum taki 100 olana kadar eğer 100 ise numbers tablosundaki SiraNr alanına 0 atayıp tekrar birden başlamasını istiyorum bi nevi bankadaki numaratör gibi arkadaşlar.. yazdığım kodlar aşağıda arkadaşlar yanlış yada mantıkta eksik yaptığım şeyler olabilir yardım eden ilgilenen arkadaşlara şimdiden teşekkür ederim hayırlı çalışmalar Allaha emanet olun..
şimdi ilkinde bunu demişsin ve buradan anladığım;
1 den 100 kadar sayı artacak 100 den sonra bire tekrar dönecek.
Ben de sana bir sınıf tanımladım ve bu işi yapıyor.

Bu sınıfı formun ilk oluşturulduğunda veya istediğin bir yerede create edebilirsin.
var
sayac :TYuzeKadar;
begin
sayac:=TYuzeKadar.create;
end;

sonrada herhangi bir yerde bunu şöyle kullanabilirsin.
=sayac.sayi;

formun destroy olayında da bunu free etmeyi unutma.
arkadaşlar aşağıdaki kod ile veritabanında SiraNr alanını otomatik artsın olarak yaptım ve sıra numarasını küçükten büyüğe sıraya koyarak DbGrdide gösteriyo.. fakat SıraNr numarası 20'ye ulaştığında tekrardan 1'den başlamasını nasıl yapabilirim.. ilgilenen arkadaşların yardımlarını ve fikirlerini bekliyorum.. hayırlı çalışmalar herkese
2. sinde bunu demişsin.
Autoinc alanlara müdahale etme şansın yok fakat 2.bir alan daha tanımlayıp sayacı buraya yazabilirsin.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşıma;
"Autoinc alanlara müdahale etme şansın yok" bunu bilmiyordum söylediğin iyi oldu boşuna uğraşmış olmayacağım.. söylediklerinizi yarın deneyip cevabı yazıcam Allahın izninyle.. yardımlarınız için teşekkür ederim hayır çalışmalar..
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşıma;
1.) "=sayac.sayi;" bu komutu buttonun click olayına nasıl yazıcam böyle çalışmıyoda..
2.) "formun destroy olayında da bunu free etmeyi unutma." bunu nasıl yapacağımıda bilmiyorum dostum..
verdiğin kodları anlatımınla denedim ama kesinlikle benim bilgisizliğimden yapamadım.. ilgin için teşekkür ederim umarım yardımlarına devam edersin çünkü programım olduğu gibi bu olay yüzünden yatıyo.. Allaha emanet olun hayırlı çalışmalar..
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen ibrahimcoban »

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TYuzeKadar = class
  protected
    Fsayi: integer;
    procedure SetSayi(const Value: integer);
    function Artir: integer;
  public
    constructor create;
    property Sayi: integer read Artir write SetSayi;
  end;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    sayac: TYuzeKadar; // burada sayac nesnesini tanımlıyoruz.
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TYuzeKadar.create;
begin
  sayi := 0;
end;

function TYuzeKadar.Artir: integer;
begin
  if fSayi = 100 then Fsayi := 0;
  inc(Fsayi);
  Result := FSayi;
end;

procedure TYuzeKadar.SetSayi(const Value: integer);
begin
  Fsayi := Value;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if sayac = nil then sayac := TYuzeKadar.create; // sayac nesnesi daha önce oluşturulmamışsa oluşturuyoruz..
  ShowMessage(inttostr(sayac.Sayi)); // her tuşa bastığımızda sayac değerini gösteriyor..
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
// eğer sayaç oluşturulmuşsa yok ediyoruz.
  if sayac <> nil then sayac.Free;

end;

end.

Sanırım yukarıdaki program ile anlarsın.
Buttona her bastığımızda ekrana sayaç değerini gösteriyor.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşım yardımın ve ilgin teşekkür ederim Allah razı olsun emeğine sağlık.. Allaha emanet olun Allah ilminizi arttırsın.. hayırlı çalışmalar..
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen ibrahimcoban »

Amin,cümlemizden, cümlemizin.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşıma;
izninle son bi eksiği daha danışmak istiyorum dostum.. programı veya formu açıp kapadığımda sayaç tekrar 1'den başlıyo ama ben kaldığı sayıdan devam etmesini istiyorum.. bu şartı nasıl sağlayabilirim? hayırlı çalışmalar..
ibrahimcoban
Üye
Mesajlar: 163
Kayıt: 11 Eki 2005 10:44
İletişim:

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen ibrahimcoban »

Bu çok normal değil mi ?
Çünkü nesne hafızadan yok (free) oluyor.
Ama şöyle yapabiliriz; registry veya ini dosyasında sayaç değerini tutabiliriz.
Örnek aşağıda.

Kod: Tümünü seç

unit yuzekadar;

interface

uses classes, sysutils, forms, inifiles;

type
  TYuzeKadar = class
  protected
    Fsayi: integer;
    procedure SetSayi(const Value: integer);
    function Artir: integer;

  public
    constructor create;
    property Sayi: integer read Artir write SetSayi;
  end;


implementation

constructor TYuzeKadar.create;
begin
  sayi := 0;
end;

function TYuzeKadar.Artir: integer;
var
  ifiles: TIniFile;
begin
// burada sayac değerini dosyayadan alıp artırıp tekrar dosyaya yazıyor.
  ifiles := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'sayac.ini');
  Fsayi := ifiles.ReadInteger(Application.Title, 'sayac', 0);
  if fSayi = 100 then Fsayi := 0;
  inc(Fsayi);
  Result := FSayi;
  ifiles.WriteInteger(Application.Title, 'sayac', Fsayi);
  ifiles.Free;
end;

procedure TYuzeKadar.SetSayi(const Value: integer);
begin
  Fsayi := Value;
end;

end.

Kolay gelsin.
http://ibrahimcoban.com/
Lazarus, Kol-Ce,Delphi ve C#
sevturk
Üye
Mesajlar: 117
Kayıt: 23 Nis 2006 01:04

Re: Numaratör tarzı SiraNr'ı hak. ?

Mesaj gönderen sevturk »

ibrahimcoban adlı arkadaşıma;
vallahi yardımınız için çok teşekkür ederim sizin için dua etmekten başka elimden bişey gelmez Allah razı olsun hayırlı çalışmalar..
Cevapla