Exceldeki verileri veritabanına yazma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Exceldeki verileri veritabanına yazma

Mesaj gönderen rapsodim »

Excelde bulunan verileri delphi ile veritabanına nasıl yazabilirim.bu konu ile ilgili yardım ederseniz sevinirim.şimdiden teşekkürler
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

1. verileri .csv formatında kaydedin. csv formatında veriler alanların arasına ; konarak kaydedilir. Ufak bir program yazıp, bunları veritabanına atabilirsiniz.

2. SQL Server kullanıyorsanız, Enterprise manager'dan direk Excel dosyasından import yapabilirsin.

Kolay gelsin.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Yeterli Gelmedi

Mesaj gönderen rapsodim »

İlginiz için tşkr ederim fakat somut olarak koda ihtiyacım var.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

somut kod derken; bu senin excel dosyana ve veritabanına göre değişir. ancak şöyle birşey olacak :

Kod: Tümünü seç

//.csv'yi normal text dosya gibi işleyebilirsin.
//dosya sonuna gelene kadar, csv'den bir satır oku

Table1.Append;
Table1.FieldByName('Alan1').AsString := Copy(satir, 1, Pos(satir, ';')); // ;'e kadar olan kısım alan1
Table1.FieldByName('Alan2').AsString := Copy(.....); 
...
Table1.Post;

//csv'yi CloseFile kapat
Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Uses kısmına ComObj yi eklemeyi unutma.

Kod: Tümünü seç

var 
    book:variant; 
    excel,sheet:variant; 
    satir, sutun:integer; 
    str:string; 
begin 

    excel := createOleObject('Excel.application'); 
    OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls'; 
    if opendialog1.Execute then 
    begin 
        book:= Excel.WorkBooks.Open(OpenDialog1.FileName); 
        try 
            Screen.Cursor := crHourGlass; 
            ProgressBar1.Visible := True; 
            label1.Visible := True; 
            sheet := book.worksheets[1]; 
            for satir:=2 to 2500 do 
            begin 
                str := sheet.cells[satir, 1]; 
               // iF (str <> '') then 
                if (str <> '') And (str <> '') then 
                begin 
                    Update; 
                    Label1.Caption := str; 
                    ProgressBar1.Position  := satir; 
                    AdoDataset1.Append; 
                    for sutun:=1 to 11 do 
                        AdoDataset1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun]; 
                    AdoDataset1.Post; 
                end; 
            end; 
            Excel.quit; 
            excel:=Unassigned; 
        finally 
            Screen.Cursor := crDefault; 
            ProgressBar1.Visible := False; 
            Label1.Visible := False; 
        end; 
    end; 

End; 
Bu Kodu ben Kullanıyorum XLS uzantılı Excel Dosyasından veri çeker.

Birde Arkadaşım Bu konuyu daha önce çok tartışmıştık sana tafsiyem vakit kazanmak istiyorsan formda arama yapman olacaktır.

Kolay Gelsin.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

procedure TForm1.Button2Click(Sender: TObject);

var
book:variant;
excel,sheet:variant;
satir, sutun:integer;
str:string;
begin

excel := createOleObject('Excel.application');
OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
if opendialog1.Execute then
begin
book:= Excel.WorkBooks.Open(OpenDialog1.FileName);
try
Screen.Cursor := crHourGlass;
ProgressBar1.Visible := True;
label1.Visible := True;
sheet := book.worksheets[1];
for satir:=2 to 2500 do
begin
str := sheet.cells[satir, 1];
// iF (str <> '') then
if (str <> '') And (str <> '') then
begin
Update;
Label1.Caption := str;
ProgressBar1.Position := satir;
table1.Append;
for sutun:=1 to 11 do
table1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
table1.Post;
end;
end;
Excel.quit;
excel:=Unassigned;
finally
Screen.Cursor := crDefault;
ProgressBar1.Visible := False;
Label1.Visible := False;
end;
end;
olarak yani table1 de tanımladıgım veritabına yazmak istedim ve sizin adodataset1 olanları değiştirdim fakat hata veriyor.Progressbar ,label ve OpenDialog1 ekledim.aktarımını yapacagım dosyayı secıyorum sorun yok ama ac dedıgımde "project1.exe raised exception class ElistError with message 'list index out of bounds (2)' progress stopped.use step run to continue" şeklinde bir hata verdi.default database olan DBDEMOS ve tree.db şeklinde oluşturdugum veritabanını kullanıyorum.alians ile baglı degılım .Yardımınız için teşekkür ederim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Büyük bir ihtimalle uses kısmına ComObj yi eklemeyi unutmuş olabilirsin.


uses ComObj; //Bu satırı ekle implementation satırının altına


Birde unutmadan EXCEL deki ve Tablondaki Sutun sayılarının aynı olmasına dikkat et.


Kolay gelsin.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

yaptım fakat fayda etmedı sorun basba bır sey olsa gerek ne dersınız?
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Arkadaşım senin için değiştirdim test ettim çalışıyor. Umarım işini görür kodu aynen kopyala yapiştır yapıyorum sende yaparsın.


Kod: Tümünü seç

uses ComObj;

procedure TForm1.Button2Click(Sender: TObject); 
var 
    book:variant; 
    excel,sheet:variant; 
    satir, sutun:integer; 
    str:string; 
begin 

    excel := createOleObject('Excel.application'); 
    OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls'; 
    if opendialog1.Execute then 
    begin 
        book:= Excel.WorkBooks.Open(OpenDialog1.FileName); 
        try 
            Screen.Cursor := crHourGlass; 
            sheet := book.worksheets[1]; 
            for satir:=1 to 2500 do 
            begin 
                str := sheet.cells[satir, 1]; 
                if (str <> '') then 
                begin 
                    Update; 
                    Table1.Append; 
                    for sutun:=1 to 11 do 
                        Table1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun]; 
                    Table1.Post; 
                end; 
            end; 
            Excel.quit; 
            excel:=Unassigned; 
        finally 
            Screen.Cursor := crDefault; 
        end; 
    end; 

End; 

procedure TForm1.FormShow(Sender: TObject);
begin
    Table1.Open;
end;

procedure TForm1.FormClose(Sender: TObject;  var Action: TCloseAction);
begin
    Table1.Close;
end;
Bu Program 11 sütünlü 2500 satırlı bir excel dosyasından veri alır ve aktardığı tabloda 11 sutunlu olması lazımdır. Ama hesaplama yaparken şurda karıştırma excel de sutun sayıları 1 den başlar 1..11 tablolarda ise 0 dan başlar 0..10 eğer problemler devam ederse. Programını ve tablonu huseyin@durmus.net adresine postala.

Bir de tablonun alanlarını metin olarak tanımlamayı unutma çünkü ben bu şekilde yaptım. Diğer türlü problem olabilir.


Kolay Gelsin.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

teşekkür ederim

Mesaj gönderen rapsodim »

Arkadasım teşekkür ederim ilgin içi çalıştı.ne demişler bana bir harf öretenin kölesi olurum.günümüzde bu yok fakat gün gelir benimde umarım bir yardımım dokunur
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Rica ederim.Önemli değil yardımcı olabildiysem ne mutlu bana iyi çalışmalar.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Mesaj gönderen Serim »

mrb,

bende excelden tabloma veri aktarmak istiyorum. ve yukarıdaki kodlardan yararlanarak bişiler yapmaya çalıştım ama projeyi çalıştırıp butona tıkladığım zaman aşağıdaki hatayı alıyorum:

Project AKTIF.exe raised exception class EDatabaseError with message ''AD' is not a valid integer value for field 'ALICI_PK''.

ALICIDATA isimli datasete post etmek istiyorum. bu tablo aynı zamanda başka tablolarla master detay olarak bağlantılı.ALICI_PK alanı primary key olan otomatik artan alan.Acaba exceldeki sütunla tablomdaki sütun eşleştirmesindemi bi hata var dicem ama öyle olsa bile nasıl çözceğimi bilemedim :oops:
kolay gelsin iyi çalışmalar..

veritabanı firebird, delphi 7 kullanıyorum.
Bilginin temelini sağlam at depremde zarar görmesin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
sanırım

alan isimleri denk gelmiyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Mesaj gönderen Serim »

ewt sorun bencede öle ama kodları göndersem nereyi değiştirmem gerektiğini bulabilirmiyiz?

Kod: Tümünü seç

procedure Taliciform.Button5Click(Sender: TObject);
var 
    book:variant;
    excel,sheet:variant;
    satir, sutun:integer;
    str:string;
begin 
    excel := createOleObject('Excel.application');
    OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
    if opendialog1.Execute then
    begin
      book:= Excel.WorkBooks.Open(OpenDialog1.FileName);
      try
        Screen.Cursor := crHourGlass;
        sheet := book.worksheets[1];
        for satir:=1 to 2500 do
        begin
            str := sheet.cells[satir, 1];
            if (str <> '') then
            begin
                Update;
                dm.ALICIDATA.Append;
                for sutun:=1 to 2 do
                   dm.ALICIDATA.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
                dm.ALICIDATA.Post;
            end;
        end;
        Excel.quit;
        excel:=Unassigned;
        finally
              Screen.Cursor := crDefault;
        end;
        end;
end;
Bilginin temelini sağlam at depremde zarar görmesin
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Mesaj gönderen Serim »

o sorunu çözdüm :)

Kod: Tümünü seç

dm.ALICIDATA.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
yerine

Kod: Tümünü seç

dm.ALICIDATA.Fields[sutun].AsString :=sheet.cells[satir, sutun];
yazdım, düzeldi.

tşkler..
Bilginin temelini sağlam at depremde zarar görmesin
Cevapla