Tabloya Aylara Göre Bilgilere Aynı Tabloya Ekleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
acelebi54
Üye
Mesajlar: 3
Kayıt: 19 Haz 2003 12:07
Konum: MANİSA
İletişim:

Tabloya Aylara Göre Bilgilere Aynı Tabloya Ekleme

Mesaj gönderen acelebi54 »

Merhaba Arkadaşlar

Benim Bir sorunum var çok uğraştım ama yapmadım.
Forumda çok araştırdım ama böyle bir kod bulamadım.

Sorunum şu….

FireBird 1.5 ve Delphi 7.0 kullanıyorum
Bu arada Access den FireBird ‘e geçtim
FIbPlus bileşenlerini kullanıyorum.
Neyse Soruma geleyim.
Personel adında bir tablom var

Yapmak istediğim ise şu!

Bu tabloya aynı tablo üzerinde olan bilgileri aktar dediğimde bilgileri bulunduğumuz ayın bir sonraki ay için aynı tabloya eklemesini istiyorum.
While döngüsüyle yaptım ancak Ocak Ayındayken Şubat ayı için eklediğimde herhangi bir sorun olmadan ekliyor, ancak Şubat, mart ve diğer aylar için ekleme yaptığımda doğal olarak
Kayıtları her ay için arttırarak gittiğinden aynı kayıttan Mart ayında ise her kayıtı 3 adet ekliyor.
Bu eklemeyi nasıl önleyebilirim.
Yada döngü yerine SQL ile yapılabilirmi

SQL ile bu konuda bir örnek verebilirmisiniz

Şimdiden teşekkür ederim.

Herkese iyi çalışmalar dilerim.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Nasıl bir kodlama yapıyorsunuz , detay verirseniz daha iyi olacak .

en basitinden bir tabloda ki kayıtları diğer bir tabloya atmak için :

Kod: Tümünü seç

insert into Table1
  select * form Table2
where ..... 
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
tam olarak nasıl bişey yaptığını anlatmamışsın ama şöyle birşey işini görebilirmi.

tabloda kopyalamak istediğin kaydı seç. appendrecord ile kayıt ekle.

Kod: Tümünü seç

tablo.appendrecord(tabloadialanladi.asvariant,tabloadialanadi.asvariant......);
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
acelebi54
Üye
Mesajlar: 3
Kayıt: 19 Haz 2003 12:07
Konum: MANİSA
İletişim:

Tabloya Ayni Bilgileri Aylara Göre Ekleme Yapma

Mesaj gönderen acelebi54 »

Merhaba aslangeri bey.
Daha önce sormuş olduğum sorumu tam anlatamadım galiba
Birde yazmış olduğum başlığa tekrar nasıl soru soruluyor bilmediğim
için buradan cevap olarak soruma devam ediyorum

Önceki başlıktan da anlaşılacağı üzere Personel tablosundaki
kayıtları (o anki tablodaki kayıtlar) her ay için Personel tablosuna
eklemek istiyorum. Personel Tablosunda AY diye bir alanım var
Personel tablosundaki kayıtları aşağıda yazmış olduğum kotlar ile
tabloya eklerken AY alanına Şubat ayı yani 02 olarak kaydedecek
Şubat ayında iken Mart ayı yani 03 olarak Şubat ayında kaç kayıt
varsa onları ekleyecek. Yani kayıt sayısını kontrol edecek.
Bir sonraki ay için ekleme yaptığımda bir önceki ay kayıtlarıyla
aynı olması gerekiyor.
Yazmış olduğum kot aşağıdadır.

if Calendar1.Month=1 then begin

PerAktar.Close;
PerAktar.SQL.Clear;
PerAktar.SQL.Add('SELECT * FROM PERSONEL');
PerAktar.SQL.Add('WHERE AY=1');
PerAktar.SQL.Add('ORDER BY ID_NO ASC');
PerAktar.Open;

Personel.First;
while not Personel.Eof do begin
if PersonelAY.Value=2 then begin
end
else
if PersonelAY.Value<>2 then begin
PerAktar.Edit;
PerAktar.Append;
PerAktar.Edit;
PerAktarID_NO.AsInteger:=PersonelID_NO.AsInteger;
//ay1:=FormatDateTime('mm',DateTimePicker1.Date);
PerAktarAY.AsInteger:=Calendar1.Month+1;
PerAktarADISOYADI.AsString:=PersonelADISOYADI.AsString;
PerAktarCALISIYORMU.AsBoolean:=PersonelCALISIYORMU.AsBoolean;
PerAktarISEGIRISTARIHI.AsDateTime:=PersonelISEGIRISTARIHI.AsDateTime;
PerAktarMAASI.AsCurrency:=PersonelMAASI.AsCurrency;

Personel.Next;
end; //while end
end;
end;
//1 ayın sonu

if Calendar1.Month=2 then begin

PerAktar.Close;
PerAktar.SQL.Clear;
PerAktar.SQL.Add('SELECT * FROM PERSONEL');
PerAktar.SQL.Add('WHERE AY=2');
PerAktar.SQL.Add('ORDER BY ID_NO ASC');
PerAktar.Open;

Personel.First;
while not Personel.Eof do begin
if PersonelAY.Value=3 then begin
end
else
if PersonelAY.Value<>3 then begin
PerAktar.Edit;
PerAktar.Append;
PerAktar.Edit;
PerAktarID_NO.AsInteger:=PersonelID_NO.AsInteger;
//ay1:=FormatDateTime('mm',DateTimePicker1.Date);
PerAktarAY.AsInteger:=Calendar1.Month+1;
PerAktarADISOYADI.AsString:=PersonelADISOYADI.AsString;
PerAktarCALISIYORMU.AsBoolean:=PersonelCALISIYORMU.AsBoolean;
PerAktarISEGIRISTARIHI.AsDateTime:=PersonelISEGIRISTARIHI.AsDateTime;
PerAktarMAASI.AsCurrency:=PersonelMAASI.AsCurrency;

Personel.Next;
end; //while end
end;
end;


/////2 ayın sonu
if Calendar1.Month=3 then begin

PerAktar.Close;
PerAktar.SQL.Clear;
PerAktar.SQL.Add('SELECT * FROM PERSONEL');
PerAktar.SQL.Add('WHERE AY=3');
PerAktar.SQL.Add('ORDER BY ID_NO ASC');
PerAktar.Open;

Personel.First;
while not Personel.Eof do begin
if PersonelAY.Value=4 then begin
end
else
if PersonelAY.Value<>4 then begin
PerAktar.Edit;
PerAktar.Append;
PerAktar.Edit;
PerAktarID_NO.AsInteger:=PersonelID_NO.AsInteger;
//ay1:=FormatDateTime('mm',DateTimePicker1.Date);
PerAktarAY.AsInteger:=Calendar1.Month+1;
PerAktarADISOYADI.AsString:=PersonelADISOYADI.AsString;
PerAktarCALISIYORMU.AsBoolean:=PersonelCALISIYORMU.AsBoolean;
PerAktarISEGIRISTARIHI.AsDateTime:=PersonelISEGIRISTARIHI.AsDateTime;
PerAktarMAASI.AsCurrency:=PersonelMAASI.AsCurrency;

Personel.Next;
end; //while end
end;
end;
Cevapla