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?
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.
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...
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.
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
İ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.
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
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..
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.