excel va ibdataset

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

excel va ibdataset

Mesaj gönderen minikçilek »

arkadaşlar exceldeki veriyi ibdataset e aktarmak istiyorum.

Kod: Tümünü seç

var
    book:variant;
    excel,sheet:variant;
    satir, sutun:integer;
    str:string;
begin
    excel := createOleObject('Excel.application');
    dmod.DSrehber.DataSet:=dmod.IBDrehber;
    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;
                   // dmod.IBTable1.Append;
                   dmod.IBDrehber.Append;
                    for sutun:=1 to 5 do
              dmod.IBDrehber.FieldByName('insert into REHBER (ADISOYADI, ISTEL, CEPTEL, CORBUSS, SIFRE) values ( :ADISOYADI, :ISTEL, :CEPTEL, :CORBUSS, :SIFRE)').Value:=sheet.cells[satir, sutun];

                        //dmod.IBTable1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
                    //dmod.IBTable1.Post;
                  //  end;
                    dmod.IBDrehber.Post;
                end;
            end; 
            Excel.quit;
            excel:=Unassigned;
             dmod.IBTable1.Refresh;
             //dmod.IBDrehber.Close;

           // dmod.IBTable1.Open;
        finally
            Screen.Cursor := crDefault;
        end;
    end; dmod.IBDrehber.Close;
    dmod.IBDrehber.Open; 
kodum bu önce ibtable a aktama yaptım sonra mastersource ilişkisi kurdum böyle oldu ama başka işlemler yapmak istediğimde hatalar verdi.onun için ibdataset e aktarmak istedim. arama yaparak böyle bir kod yazdım ama hata verdi.yardımcı olur musunuz?
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

dmod.IBDrehber.FieldByName('insert into REHBER (ADISOYADI, ISTEL, CEPTEL, CORBUSS, SIFRE) values ( :ADISOYADI, :ISTEL, :CEPTEL, :CORBUSS, :SIFRE)').Value:=sheet.cells[satir, sutun]; 

anladığım kadarı ile hatan burda

Kod: Tümünü seç

fieldbyname('alanadı')
burada SQL komutları kullanmışsın.oysa bunu

Kod: Tümünü seç

sql.add('')
diye yap.ben bu şekilde veri kayıtı yapmadım ve görmedim..hatan burda bence ..hatanı da yazmış olsaydın daha iyi olurdu.hem neden ilk önce table'la daha sonra datasete kayıt yolunu seçtin anlamadım.kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

Mesaj gönderen minikçilek »

kusura bakmayın net e yeni girebildim.interbase ile işlem yapabilmem için bir primary key tanımlamam gerekiyor dolayısı ile exceldeki verileri interbase ile aktarmaya çalıştığımda primery key de hata veriyor onun için ibtabel ile ibdateset arasında mastersource ilişkisi kurdum.aslında istediğim bu ilişkiye girmeden dirtek ibdaset kullanmak. ama işin içinden çıkamıyorum.yardımcı olursanız sevinirim...
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

primery key
de neden hata veriyor anlamadım..aslında primary key olan bir alan zaten alandır.senin master ve detail tablonun arasında nasıl bir bağlantı kuracaksın.mesela detail tabloya birden fazla kayıt girmen için detail tabloya bir foringkey oluşturman lazım,ve bağlantıyı master primary ,detail foring olarak kurman lazım.bunun nedeni primary key eşşsiz alandır.(yani bir alan primary key olarak da tanıtılırsa sadece 1 sayısını bir kere girebilirsin demek).tabloların alanlarını vs. bilemeden bir çözüm üretmek çok zor.yine dediğim gibi SQL ifadelerini yanlış yere yazıyorsun.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

Mesaj gönderen minikçilek »

arkadaşlar kodumu düzelttim [code]procedure Tfrmrehber.SpeedButton4Click(Sender: TObject);
var
book:variant;
excel,sheet:variant;
satir, sutun:integer;
str:string;
begin
dmod.IBTable1.Open;
excel := createOleObject('Excel.application');
dmod.DSrehber.DataSet:=dmod.IBDrehber;
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;
dmod.IBTable1.Append;
dmod.IBDrehber.Append;
for sutun:=1 to 5 do
dmod.IBTable1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
dmod.IBTable1.Post;
dmod.IBDrehber.Post;
end;
end;
Excel.quit;
excel:=Unassigned;
dmod.IBTable1.Refresh;
finally
Screen.Cursor := crDefault;
end;
end;
dmod.IBDrehber.Close;
dmod.IBDrehber.Open;
end;
[/code]
verdiği hata ise
project ...exe raisede exception class EIBClientError whit message 'not in edit mode' diyor
formun creatinde tablo ve dataset' i open ettim
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

ibdataset ile hangi tabloyu kullanacaksan SelectSql ine

Kod: Tümünü seç

select * from TabloAdi
yazarak DataSeti tabloya bağla..

daha sonra yazdığın kodun
Update;
// dmod.IBTable1.Append;
dmod.IBDrehber.Append;
for sutun:=1 to 5 do
dmod.IBDrehber.FieldByName('insert into REHBER (ADISOYADI, ISTEL, CEPTEL, CORBUSS, SIFRE) values ( :ADISOYADI, :ISTEL, :CEPTEL, :CORBUSS, :SIFRE)').Value:=sheet.cells[satir, sutun];

//dmod.IBTable1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
//dmod.IBTable1.Post;
// end;
dmod.IBDrehber.Post;
kısmını değiştirerek;

Kod: Tümünü seç

for sutun:=1 to 5 do
begin
  dmod.IBDrehber.Insert;
  dmod.IBDrehberADISOYADI.Value := xAd;
  dmod.IBDrehberISTEL.Value := xIstel;
  ....
  ....
  dmod.IBDrehberSIFRE.Value := sheet.cells[satir, sutun];
  dmod.IBDrehber.Post; 
end;
gibi bişey yap..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

İBDrehber anladığım kadarı ile İBdataset nesnesi..İbdataset nesnesini kullanarak kayıt ekleme yapmadığınıza göre neden append moduna alıp post ediyorsunuz anlamadım.onu kaldırın sadece ibtable la deneyin bakallım çalışcakmı.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

Mesaj gönderen minikçilek »

vedat kardeş,
ibdatasette primarey keyim otomatik artan bir alan olduğu için excel tablomdaki alanları aktardığımda primerykey alanında hata veriyor.dolayısıyla verilerimi ibtable a aktarıyorum ibdaset kullanmamdaki amaç ise editin içinde bir harf girdiğimde o harf ile başlayan verileri gridde listelemesi
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

Mesaj gönderen minikçilek »

lazioo dediğini yaptım ama bu seferde ibtable:dataset not in edit or insert mode hatası veriyor
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

DataSet Not Insert or Edit Mode hata sı Insert yada Append etmeden Post etmeye çalışıldığı durumlarda verilir..
döngünün begin end bloklarını ve Insert - post ları kontrol et..
DeveloperToolKit

..::|YeşilMavi|::..
minikçilek
Üye
Mesajlar: 30
Kayıt: 19 Tem 2004 09:25

Mesaj gönderen minikçilek »

arkadaşlar tüm yardımlarınız için teşekkürler sorunum ibdrehber.insert ve ibdrehber.post komutlarını kaldırmam ile halloldu
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

minikçilek yazdı:arkadaşlar tüm yardımlarınız için teşekkürler sorunum ibdrehber.insert ve ibdrehber.post komutlarını kaldırmam ile halloldu

verilen cevapları birazda dikkatli okursan zaten bu kadar beklemeyecektin sorunu çözmek için..benim en son vermiş olduğum cevap
İBDrehber anladığım kadarı ile İBdataset nesnesi..İbdataset nesnesini kullanarak kayıt ekleme yapmadığınıza göre neden append moduna alıp post ediyorsunuz anlamadım.onu kaldırın sadece ibtable la deneyin bakallım çalışcakmı.
zaten herşeyi açık ve seçik anlatmış..kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Cevapla