excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
eskalibur_
Üye
Mesajlar: 16
Kayıt: 19 Kas 2014 03:09

excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Mesaj gönderen eskalibur_ »

Selam Arkadaşlar. 1996 dan bu güne kadar tutulmuş bir excel dosyası var tahmin ettiğiniz gibi onbinlerce kayıt var içerisinde. bu excel tablosunu veritabanına aktarıp bundan sonra program arayüzü aracılığı ile kayıt girilmesini sağlamam istendi.
normal bir excel dosyasından access veritabanına kayıpsız bir şekilde veri aktarabiliyorum.
fakat bu excel dosyasında bazı satırlarda birleştirilmiş hücreler var.

Resim
Bu sebeple aktarım esnasında birleştirilmiş satırları veritabanına aktarırken boş kayıt olarak ekliyor.

Resim

birleşik satırları bir tabloya, tek olan satırlarıda başka bir tabloya kaydetmem gerekiyor zannedersem. ama bu şekilde de boş satır atıyor nasıl yapabilirim.
kullandığım procedure

Kod: Tümünü seç

procedure exceldebilgisayisi;
var
hangisatirdaverivar:variant;
begin
try
KACSATIR:=0; // BU DEĞİŞKENLERDEKİ DEĞERLERİ SIFIRLAYALIM Kİ TEKRAR ÇAĞIRILDIĞINDA ÜZERİNE EKLESİN
KACSUTUN:=0; // BU DEĞİŞKENLERDEKİ DEĞERLERİ SIFIRLAYALIM Kİ TEKRAR ÇAĞIRILDIĞINDA ÜZERİNE EKLESİN
hangisatirdaverivar:= EXCELDOSYASI.ActiveWorkbook.worksheets[1].UsedRange; // veri çalışma kitabı 1 deki hangi satırlarda ve sütünlarda var buluyor
           KACSATIR:= hangisatirdaverivar.rows.Count; /// kaç satır bilgi olduğunu rakamsal olarak buluyor.
           KACSUTUN:= hangisatirdaverivar.columns.Count; // kaç kolonda bilgi olduğunu rakamsal olarak buluyor.
except
end;
end;
 
kafam bi türlü basmadı.
yardımcı olursanız sevinirim. şimdiden teşekkürler
Dosya ekleri
ornek.jpg
ornek.jpg (15.34 KiB) 606 kere görüntülendi
ornek2.jpg
ornek2.jpg (9.34 KiB) 606 kere görüntülendi

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Mesaj gönderen SimaWB »

Gönderdiğiniz 2. resim Access'e ait sanırım. Eğer Access'te resimdeki tabloyu elde ettiyseniz bence değişikliği bu yeni tablo üzerinden yapın. İsmi boş olan her satıra bir önceki satırdan ismi alıp yazın.
There's no place like 127.0.0.1

eskalibur_
Üye
Mesajlar: 16
Kayıt: 19 Kas 2014 03:09

Re: excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Mesaj gönderen eskalibur_ »

Evet access veritabanı. verileri ben örnek olarak rasgele yazdım. 1 2 3 4 diye artan alan tc kimlik no alanı. Yani bu alandaki veri benzersiz olmalı. Boş satırlara tekrar yazdırdığım zaman aynı tc den birden fazla olacak.

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Mesaj gönderen SimaWB »

Demek istediğim; artık siz dosyanızı veritabanına atmışsınız. Buradan sonrası size kalmış. Daha önce dediğim gibi; tablo içerisinde döngü ile hareket ettiğinizde boş alan olan satırı görürseniz bir önceki satırdan değerleri alıp başka tabloya mı atarsınız yoksa komple o satırı siler misiniz sizin bileceğiniz iş.
There's no place like 127.0.0.1

eskalibur_
Üye
Mesajlar: 16
Kayıt: 19 Kas 2014 03:09

Re: excelde birleşik hücrelerdeki verileri veritabanına aktarma yardım.

Mesaj gönderen eskalibur_ »

excelden aktarma tamam. boş kayıtları da bitane döngü ile tamamladım. sıra geldi bu kayıtları guruplandırıp ilişkilendirmeye..
aktarım yaptığım tablodan kişisel bilgileri yani tc adsoyad doğum tarihi gibi alanları alıp aynı alanları içeren başka bir tabloya kopyalamam gerekiyor.
yani tamam tablosundan kisiler tablosuna kopyalayacağım.

Kod: Tümünü seç

procedure TForm3.Button4Click(Sender: TObject);
begin
if dm.queryiliski.State in [dsbrowse] then
dm.queryiliski.SQL.Clear;
dm.queryiliski.SQL.Add('insert into kisiler (tcno, adsoyad, babaad, dogtarih, beldekoy)  SELECT tcno, adsoyad, babaad, dogtarih, beldekoy FROM tamam') ;
dm.queryiliski.ExecSQL;
end;
bu kodla istediğim alanları diğer tabloya kopyalayabiliyorum.
fakat benzersiz kayıt olarak kopyalamam gerekiyor. yani aynı tcno olan kayıtlar 1 defa kopyalanacak. bunun için sql kısmını nasıl yazmalıyım. distinct ile denedim olmadı Not Exists ile yapamadım kodda hata veriyor.

Kod: Tümünü seç

dm.queryiliski.SQL.Add('insert into kisiler (tcno, adsoyad, babaad, dogtarih, beldekoy) SELECT tcno, adsoyad, babaad, dogtarih, beldekoy FROM tamam A Where Not Exists (Select * from isimler B Where A.tcno = B.tcno AND A.adsoyad =B.adsoyad AND A.babaad =B.babaad AND A.dogtarih =B.dogtarih AND A.beldekoy =B.beldekoy) order By tcno');
bu kodun neresinde hata var. biliyorum çok kolay ya bir parantez ya bir tırnak hatası ama benim kafa basmadı.

Cevapla