Son Kayıt Bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Son Kayıt Bulma

Mesaj gönderen ozcank »

Arkadaşlar ben Table1 de Button1 e bastığım zaman kaydın bir fazlasını yazdırıyordum ,fakat kayıtlardan herhangi birtanesini sildiğim zaman; mesela kayıt 350 ise 351 atıyordu kayıt silince 350 atıyor 350 de kayıt olsa bile.
Bunu nasıl engelleyebilirim son kayıt neyse bir fazlasını yazdırmalıyım.

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject);
Var
KS,K1,K2:Variant;
begin
KS:=IntToStr(Table1.RecordCount);
K1:=1;
K2:=KS+K1;
DBCheckBox1.ValueChecked:='1';
Button1.Enabled:=False;
Button2.Enabled:=True;
Table1.Append;
Table1SISTAR.Value:=Date;
DBEdit17.SetFocus;
DBEdit17.Text:=K2;
end;
Kullanıcı avatarı
omerdurmus
Üye
Mesajlar: 60
Kayıt: 11 Kas 2005 03:32
Konum: Amasya

Mesaj gönderen omerdurmus »

Bu durumda RecordCountu kullanmamalısın. Her kaydın için bir otomatik artan sayı alanın vardır mutlaka. Her seferinde en son kaydın oto. Art. alanındaki değeri alıp bir artır.
...
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Bu alan "Müşteri Kodu" MUSKODU ve otomatik artan bir alanım yok bu alanın son kaydının bir fazlasını alıyorum.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Sanırım müşteri kodunu verirken bir arttırarark yeni kayıt açmak ve yeni girilen müşteriye kod vermek istiyorsun. Ben uygulamalarımda autoinc alan kullanmıyorsam müşteri kod alanın max yani en yüksek değerini buldurup sonra bir arttırıyorum edit içine atayıp yoluma devam ediyorum ve kaydediyorum.

Kod: Tümünü seç

dm1.adlisayiveribqry.close;
    dm1.adlisayiveribqry.sql.clear;
    dm1.adlisayiveribqry.sql.add('select max(ADLI_NO) as adlino from ADLI_SAYI');
    dm1.adlisayiveribqry.SQL.Add('Where ADLI_YIL=:adli_yil');
    dm1.adlisayiveribqry.parambyname('adli_yil').asinteger:=strtoint(copy(datetostr(date),7,10));
    dm1.adlisayiveribqry.open;

    dm1.adliSayiIBDSet.Append;
    dbedit2.Text:=inttostr(dm1.adlisayiveribqry.fieldbyname('adlino').AsInteger+1);
    dbedit1.Text:=inttostr(strtoint(copy(datetostr(date),7,10)));
    DBEdit14.Text:=dm1.PrgGirisIBQry.fieldbyname('KULLANICI_ADI').AsString;
    jvdbdateedit1.SetFocus;
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Table kullanıyorum Table da cözümü var mı?
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Kayıt için insert değilde append kullanıyosunuz, yani;
Yeni kayıt girdisi yaptırmadan hemen önce datadaki son kayda gider ve ilgili değeri aldırırsınız, daha sonra yeni kayıtta da bu değerin bir üstünü verirsiniz.

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject);
Var
KS,K1,K2:Variant;
begin
Table1.Last;
KS := DBEdit17.Text;
K1:=1;
K2:=KS+K1;
DBCheckBox1.ValueChecked:='1';
Button1.Enabled:=False;
Button2.Enabled:=True;
Table1.Append;
Table1SISTAR.Value:=Date;
DBEdit17.SetFocus;
DBEdit17.Text:=K2;
end; 
Kolay gelsin.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Arkadaşlar bir süre kayıt denettirdim yine aynı sorunum devam ediyor şöyleki;
Mesela 400 tane kaydım var ve aradan bir kayıt sildiğim zaman o kaydın bir fazlasını yazıyor , Table sonundaki kaydın bir fazlasını almıyor.
Table1 kullanmak zorundayım program.

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject); 
Var 
KS,K1,K2:Variant; 
begin 
Table1.Last; 
KS := DBEdit17.Text; 
K1:=1; 
K2:=KS+K1; 
DBCheckBox1.ValueChecked:='1'; 
Button1.Enabled:=False; 
Button2.Enabled:=True; 
Table1.Append; 
Table1SISTAR.Value:=Date; 
DBEdit17.SetFocus; 
DBEdit17.Text:=K2; 
end; 
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

Yanlış Yol izliyorsunuz bence
Bu alanın otomaitk alan olarak yapmamış isen o zaman
bir function yazarsınız

örn

Kod: Tümünü seç


Function ensonkayitnumarasiniver():integer;

Var
sorgu:tquery;
Begin
sorgu:=tquery.create(self);
try
sorgu.close;
sorgu.sql.clear;
sorgu.sql.add('select max(MUSKODU) as ensonno from tabloadı ');
sorgu.open;
result:=sorgu.FieldByName('ensonno ').asinteger;
Finally
sorgu.free;
end;
end;
Kullanımı İse

Kod: Tümünü seç


 

var
ensonkayitno:integer;
begin
ensonkayitno:=ensonkayitnumarasiniver+1;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Arkadaşlar bu satırda hata veriyor ne yapabilirim?

Kod: Tümünü seç

sorgu:=TQuery.Create(Self);

[Error] SISFORM.pas(242): Undeclared identifier: 'Self'
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

ben delphi editöründe yazmadım o kodu
şimdi delphi editöründe tekrar düzenliyorum kodu


Kod: Tümünü seç


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  Function ensonkayitnumarasiniver():integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function tform1.ensonkayitnumarasiniver():integer;

Var
sorgu:tquery;
Begin
sorgu:=tquery.Create(self);
try
sorgu.close;
sorgu.sql.clear;
// bu satırın sonundaki kısma kendi tablonun adını yaz...
sorgu.sql.add('select max(MUSKODU) as ensonno from tabloadı ');
sorgu.open;
result:=sorgu.FieldByName('ensonno ').asinteger;
Finally
sorgu.free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ensonkayitno:integer;
begin
ensonkayitno:=ensonkayitnumarasiniver();
end;
end.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Bu şekilde değişiklik yaptım fakat bir yerde hata veriyor yardım ederseniz sevinirim.

Kod: Tümünü seç

  public
    { Public declarations }
    Function ensonkayitnumarasiniver():integer;
  end;

var
  Form3: TForm3;

implementation

uses SISGIR, PRIMPAR, SISREFR;

{$R *.DFM}

Function TForm3.ensonkayitnumarasiniver():integer;
Var
sorgu:TQuery;
Begin
sorgu:=TQuery.Create(Self);
try
sorgu.close;
sorgu.sql.clear;
sorgu.sql.add('select max(SISKOD) as ensonno from C:\SIS2003\DATA2004\SISTEMFOR ');
sorgu.open;
result:=sorgu.FieldByName('ensonno').asinteger;
Finally
sorgu.free;
end;
end;

procedure TForm3.Button1Click(Sender: TObject);
//Var
//KS,K1,K2:Variant;
//begin
//Table1.Last;
//KS := DBEdit17.Text;
//K1:=1;
//K2:=KS+K1;
var
ensonkayitno :integer;
begin
ensonkayitno:=ensonkayitnumarasiniver();
//end;
DBCheckBox1.ValueChecked:='1';
Button1.Enabled:=False;
Button2.Enabled:=True;
Table1.Append;
Table1SISTAR.Value:=Date;
DBEdit17.SetFocus;
//DBEdit17.Text:=K2;
DBEdit17.Text:=String(EnSonKayitNo);
end;
Token Not Found
Token : C
Line Number 1
ve bu satırda hata veriyor
ensonkayitno:=ensonkayitnumarasiniver();
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

İlk sorduğunu okudum da kayıt numarası bir birincil anahtar olarak kullanılamaz.. Farkında olduğun gibi kayıt silinince aynı numaralı kayıtlar yazma durumu hasıl olacaktır. O yüzden SISKOD dediğin alana eğer tabloda hiç kayıt yoksa bir aksi halde MAX ını alıp bir eklemelisin.
Bir de kullandığın VT yi yazmamışsın, sanırım Paradoks.. ve from dan sonraki kısmı tırnak içinde yazman gerekebilir :wink:

Kod: Tümünü seç

...
sorgu.sql.clear;
sorgu.sql.add('select max(SISKOD) as ensonno from ''C:\SIS2003\DATA2004\SISTEMFOR.db'' ');
sorgu.open; 
...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

oldumu acaba
Siz hayal edin...Biz yapalım TuannaSoft...
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Hayır olmadı.Bu durum devam etmekle birlikte F2 tuşu ile bir DBGrid ekranı açıyorum ve orda ad soyad listeleme ile kayıt bulduruyorum alana aktarıyorum durum şu aktardığım kayıt mesela 245 ise ve Ekle button nunada basmış ise yine son kayıdı bir fazla almıyor.Table da ve paradox da kullanmak zorundayım query cevirme şansım yok alt yapısı bozulur tamamen yardım ederseniz çok sevinirim.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Kodun son kullanılır hali ;

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject);
Var
KS,K1,K2:Variant;
begin
Table1.Last;
KS := DBEdit17.Text;
K1:=1;
K2:=KS+K1;
DBCheckBox1.ValueChecked:='1';
Button1.Enabled:=False;
Button2.Enabled:=True;
Table1.Append;
Table1SISTAR.Value:=Date;
DBEdit17.SetFocus;
DBEdit17.Text:=K2;
end;
Cevapla