Yüklenebilir ISAM bulunamadı hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
isoaltunay
Üye
Mesajlar: 27
Kayıt: 01 Tem 2013 09:43

Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen isoaltunay »

Merhaba arkadaşlar kolay gelsin;
excelden veri aktarmaya kalkışmaya çalıştığımda yüklenebilir ISAM bulunamadı diye bir hata verdi kodlar şu şekilde;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  liste : TStrings;
  mode : TTreeNode;
  index : Integer;
begin
  if OpenDialog1.Execute then
  begin
    ADOConnection1.Connected := False;
    ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OleDB.4.0;' + 'Data Source' +
                                        OpenDialog1.FileName+ ';' + 'Extended Properties=Excel 8.0;';
    ADOConnection1.Connected := True;
    ADOConnection1.GetTableNames(liste,True);
    TreeView1.Items.AddFirst(nil,'Excel Sayfaları');
    for index := 0 to liste.Count-1 do
    begin
      TreeView1.Items.AddChild(TreeView1.TopItem,liste.Strings[index]);

    end;

      end;
end;

end.
Dosya ekleri
ISAM.PNG
ISAM.PNG (946 Byte) 3419 kere görüntülendi
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen ihalilcoban »

Kodun eksik kısımları çok o yüzden düzeltmek yerine sana kendi kullandığım örneği vereyim.

Kod: Tümünü seç

var
  Resmi_Tatil_Karti: TResmi_Tatil_Karti;
  EXCELDOSYASI: Variant;
  KACSATIR,KACSUTUN:integer;

implementation

{$R *.dfm}

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ütunlarda 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;

procedure TResmi_Tatil_Karti.Yukle_BtnClick(Sender: TObject);
var
EXCELDEKISATIR,EXCELDEKISUTUN:Integer;
sayfa: Variant;
Begin
   If OpenDialog1.Execute Then                          //OPEN DİALOG İLE EXCEL DOSYASINI SEÇTİRELİM
      Begin
        exceldosyasi:=CreateOleObject('excel.application'); //EXCELİ OLUŞTUR
        exceldosyasi.Visible:=true;                         //EXCEL DOSYASI AÇILDIĞINDA EKRANDA GÖRÜLSÜN
        exceldosyasi.workbooks.open[OpenDialog1.FileName];  //Excel dosyasını open dialogtan seçtirir
        exceldebilgisayisi;                                 //EXCELDE KAÇ SATIR VE SÜTÜN BİLGİ VAR AL, YUKARIDA implementation KISMINDA TANIMLADIĞIMIZ KAÇSATIR DEĞİŞKENİNE AKTART
          For EXCELDEKISATIR:=1 To KACSATIR Do
              Begin          //EXCELDEKİ 1 SATIRDAN BAŞLAYIP KAÇSATIRBİLGİ VAR DAKİ SAYI KADAR İŞLEM YAP , ENSON KAÇINCI SATIRDA BİLGİ OLDUĞUNU KAÇSATIR VARDAN ÖĞRENEBİLİRSİN
                DM.RESMI_TATIL.Append;                                      //TABLE1 DATAMI KAYIT GİRMEK İÇİN AÇ
                DM.RESMI_TATILTATIL_ADI.Value:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].Value); // TABLE DAKİ RESMİ TATİL ADI ALANINA EXCELİN BİRİNCİ SATIR VE BİRİNCİ SÜTÜNDAKİBİLGİYİ AL EKLE( KODUN BURASINDAKİ 1 RAKAMI 1 SÜTÜN DEMEK [EXCELDEKISATIR,1] )
                DM.RESMI_TATILTATIL_TARIHI.Value:= (exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,2].Value);  // TABLE DAKİ RESMİ TATİL TARİHİ KISMINA EXCELIN BİRİNCİ SATIR VE IKINCI SUTUNDAKİ BİLGİYİ AL ( KODUN SONUNDA Kİ [EXCELDEKISATIR,2]  İKİ RAKAMI SÜTÜN İKİDEKİ BİLGİ DEMEK
                DM.RESMI_TATIL.Post;
              End;
      ShowMessage('Aktarma İşlemi Tamamlandı.');
      End Else
      ShowMessage('Aktarma İşlemi İptal Edildi.');

end;
Kendine göre bir düzenleme çekersin artık.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen xxxjedixxx »

ConnectionString'te "Data Source" ifadesinin sonunda = olmalı.

Bu şekilde olmalı;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OleDB.4.0;' + 'Data Source=' +
OpenDialog1.FileName + ';' + 'Extended Properties=Excel 8.0;';

Benim gördüğüm eksiklik bu.
isoaltunay
Üye
Mesajlar: 27
Kayıt: 01 Tem 2013 09:43

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen isoaltunay »

xxxjedixxx yazdı:ConnectionString'te "Data Source" ifadesinin sonunda = olmalı.

Bu şekilde olmalı;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OleDB.4.0;' + 'Data Source=' +
OpenDialog1.FileName + ';' + 'Extended Properties=Excel 8.0;';

Benim gördüğüm eksiklik bu.
Verdiğiniz cevap için teşekkürler hocam bunu deneyince "Dış tablo beklenen biçimde değil" şeklinde hata alıyorum seçtiğim dosya excel çalışma sayfası
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen xxxjedixxx »

Merhaba,

Muhtemelen dosyanız XLSX formatında. "Microsoft.Jet.OleDB.4.0" sürücüsü ile XLSX formatına erişemezsiniz. Bu yüzden dosyanızı XLS olarak kaydedin veya XLSX formatı için "Microsoft.ACE.OLEDB.12.0" sürücüsünü kullanın. Sürücü sisteminizde yok ise https://www.microsoft.com/en-us/downloa ... x?id=13255 adresinden indirebilirsiniz. Bununla tüm excel formatlarına erişebilirsiniz.

"Microsoft.ACE.OLEDB.12.0" sürücüsü yani XLSX formatı için ConnectionString;

ADOConnection1.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + OpenDialog1.FileName + ';' + 'Extended Properties=Excel 12.0;';

şeklinde olmalıdır.

Not: 11.01.2016 tarihinde ConnectionString ifadesini hatalı yazmışım ("Provider=" ifadesi eksik kalmış), onu düzelttim.
En son xxxjedixxx tarafından 11 Oca 2016 01:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
isoaltunay
Üye
Mesajlar: 27
Kayıt: 01 Tem 2013 09:43

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen isoaltunay »

Hocam çok sağolun ama bir türlü problemi geçemedim "Microsoft ODBC driver manager veri kaynağı adı bulunamadı ve varsayılan sürücü belirilmemiş" şeklinde hata veriyor odbc den internette araştırıp yapmadığım kalmadı faklı işletim sistemlerinde denedim yine olmadı
İşletim sistemleri: windows 10 64 bit ve windows 7 32 bit
office : office 2007 ve office 2016 plus
Dosya ekleri
excelaktarma.rar
(63.4 KiB) 91 kere indirildi
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen ihalilcoban »

Göndermiş olduğun dosyayı inceledim. Birkaç düzenleme yapıp çalışır hale getirdim. Umarım yapmak istediğin gibi olmuştur. Yalnız proje sende çalışmazsa eklemen gereken bir şey var tarif edeyim;

1. Component | Import Component
2. Import a Type Library
3. Next
4. Microsoft Excel 12.0 Object Library
5. Next
6. Next
7. Next
8. Finish

Bu adımlardan sonra Excel_TLB Uniti aktif olacaktır. Bu arada XE8 ile düzenledim. Pek bir fark olacağını zannetmiyorum. Düzenlediğim projeyi ve kullandığım excel dosyasını ekliyorum. İyi çalışmalar.

http://s6.dosya.tc/server5/sgm5dm/excelaktarma.rar.html
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen xxxjedixxx »

isoaltunay yazdı:Hocam çok sağolun ama bir türlü problemi geçemedim "Microsoft ODBC driver manager veri kaynağı adı bulunamadı ve varsayılan sürücü belirilmemiş" şeklinde hata veriyor odbc den internette araştırıp yapmadığım kalmadı faklı işletim sistemlerinde denedim yine olmadı
İşletim sistemleri: windows 10 64 bit ve windows 7 32 bit
office : office 2007 ve office 2016 plus
Kusura bakmayın, kodunuza baktığımda ConnectionString'in hatalı yazıldığını gördüm. Ayrıca, önceki cevabımda da ConnectionString'i hatalı yazdığımı da fark ettim. ConnectionString'in başındaki "Provider=" ifadesini bir şekilde yazmayı unutmuşum. Siz de bu hatayı görmemişsiniz. Aşağıdaki gibi yaparsanız sorununuz çözülecektir.

Bir şey daha var. Kdunuzu denediğimde yine hata aldım. Bunun nedeni liste değişkenini create etmediğiniz için. Kodunuza onu da ekledim.

Kod: Tümünü seç

  if OpenDialog1.Execute then
  begin
    ADOConnection1.Connected := False;
    ADOConnection1.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' +
                                        OpenDialog1.FileName + ';' + 'Extended Properties=Excel 12.0;';
    ADOConnection1.Connected := True;
    liste := TStringList.Create;
    ADOConnection1.GetTableNames(liste,True);
    TreeView1.Items.AddFirst(nil,'Excel Sayfaları');
    for index := 0 to liste.Count-1 do
    begin
      TreeView1.Items.AddChild(TreeView1.TopItem,liste.Strings[index]);
    end;
    liste.free;
  end;
isoaltunay
Üye
Mesajlar: 27
Kayıt: 01 Tem 2013 09:43

Re: Yüklenebilir ISAM bulunamadı hatası

Mesaj gönderen isoaltunay »

xxxjedixxx yazdı:
isoaltunay yazdı:Hocam çok sağolun ama bir türlü problemi geçemedim "Microsoft ODBC driver manager veri kaynağı adı bulunamadı ve varsayılan sürücü belirilmemiş" şeklinde hata veriyor odbc den internette araştırıp yapmadığım kalmadı faklı işletim sistemlerinde denedim yine olmadı
İşletim sistemleri: windows 10 64 bit ve windows 7 32 bit
office : office 2007 ve office 2016 plus
Kusura bakmayın, kodunuza baktığımda ConnectionString'in hatalı yazıldığını gördüm. Ayrıca, önceki cevabımda da ConnectionString'i hatalı yazdığımı da fark ettim. ConnectionString'in başındaki "Provider=" ifadesini bir şekilde yazmayı unutmuşum. Siz de bu hatayı görmemişsiniz. Aşağıdaki gibi yaparsanız sorununuz çözülecektir.

Bir şey daha var. Kdunuzu denediğimde yine hata aldım. Bunun nedeni liste değişkenini create etmediğiniz için. Kodunuza onu da ekledim.

Kod: Tümünü seç

  if OpenDialog1.Execute then
  begin
    ADOConnection1.Connected := False;
    ADOConnection1.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' +
                                        OpenDialog1.FileName + ';' + 'Extended Properties=Excel 12.0;';
    ADOConnection1.Connected := True;
    liste := TStringList.Create;
    ADOConnection1.GetTableNames(liste,True);
    TreeView1.Items.AddFirst(nil,'Excel Sayfaları');
    for index := 0 to liste.Count-1 do
    begin
      TreeView1.Items.AddChild(TreeView1.TopItem,liste.Strings[index]);
    end;
    liste.free;
  end;
çok sağolun hocam elinize sağlık bi problem daha var ama kendi m cözmeye çalışıyorum her seferinde size sormak istemiorum çözemez isem tekrar başınızı ağırtabilir miyim :)
Cevapla