• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Access Data'dan Veri Alma Sorunu!

ragnorak

Altın Üye
Katılım
4 Haziran 2016
Mesajlar
208
Excel Vers. ve Dili
Excel 2021
Kod:
Private con As Object, rs As Object
Public Function Ado_Baglan()
rcp = AYARLAR.TextBox2x.Value
Set con = CreateObject("adodb.connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;"
[CODE]ss = Cells(1, 1).End(xlDown).Offset(1, 0).Row
On Error Resume Next
Call Ado_Baglan
Set rs = CreateObject("adodb.recordset")
Sorgu = "Select DISTINCT [URUN_KODU],[URUN_ADI],[URUN_ACIKLAMA],[GENISLIK],[DERINLIK],[YUKSEKLIK],[ALAN],[RENK_1],[RENK_2],[BIRIM],[SATIS_FIYATI] from [URUN_DOSYALARI] where [URUN_KODU] ='" & IS_DOSYALARI.ListBox2.List(IS_DOSYALARI.ListBox2.ListIndex, 0) & "' "
rs.Open Sorgu, con, 1, 3
Do Until rs.EOF

Cells(i + ss, 1) = k + 1

Cells(i + ss, 2) = rs("URUN_KODU").Value
Cells(i + ss, 3).WrapText = True
Cells(i + ss, 3) = rs("URUN_ADI").Value
Cells(i + ss, 5).WrapText = True
Cells(i + ss, 5) = rs("URUN_ACIKLAMA").Value


Yukarı şekilde access dataya bağlanıp hücreye veri çekiyorum. "rs("URUN_ACIKLAMA").Value" verilerini aldığım hücreye sadece 255 karakter geliyor. Bunun bir çözümü var mıdır?
 
Merhaba,

Örnek dosyanızı görmek lazım. Kendim deneme yaptım 500 karakterin tamamını getirdi.
Access tablosunda URUN ACIKLAMA'nın veri türü Uzun Metin olmalı.
 
Merhaba,

Örnek dosyanızı görmek lazım. Kendim deneme yaptım 500 karakterin tamamını getirdi.
Access tablosunda URUN ACIKLAMA'nın veri türü Uzun Metin olmalı.

URUN ACIKLAMA veri türü, Uzun Metin. Öyle olmasa zaten veriyi kaydedemezdim. Dosya eklemedim çünkü dosya yok. Kodla sıfırdan dosya oluşturup access datadan hücrelere yazıyorum. Access datada sorun yok. Userform içinde başka yerlere veriyi alıyor. Ama nedense hücreye 255 karakter alıyor.
 
Kodla sıfırdan oluşturduğunuz dosya örnek dosya olmuyor mu? Sorunuz anlaşılır değil.
Eğer userform'un üzerinde bir nesneye alıyorsanız onuda yaptım. 255 'ten daha fazla karakteri getirdi.
 
Sorgudaki "DISTINCT" silince sorun ortadan kalktı. Ama neden kalktı bilmiyorum.
 

Haluk Bey merhaba. O başlıkta Access ile alabildiğimi yazmıştım ama ...

Gerçek bir veritabanında bir table create olurken veritabanı dosyasında kaç baytlık veri bloğu saklanacağı ve okunabileceği bellidir. Sürücü dosyaya eriştiğinde meta data' ya bakarak bir kayıttaki her bir field' ın kaç bayt'tan oluştuğunu bilerek blok blok okumaya başlar. Örneğin bir field için VarChar(300) veya Char(300) olarak tanımlamışsa, o filed için 300 byte okuyacağı anlamına gelir. (Gerçekte VarChar (Variable Char) , Char tipinden farklı bir saklama biçimi olmasına rağmen karakter uzunluğu kadar byte olduğunu varsayarak konu dağılmaması için girmeyelim)

Konuya dönersek, veriyi Excel dosyasından çeken yaptığım testte uzun kaydı 15-20 satırlara çektiğimde gerçek uzunluğu alamadığını gördüm. Bunun nedeni Excel sürücüsünü veri tipi/uzunluğu hakkında bir tahmini yanlış hatırlamıyorsam ilk 8-10 satırda yapması. Eğer metin olarak algılarsa, en uzun olanına göre Char(???) olarak düşünerek yoluna devam ediyor. Hiç denemedim, merak da etmedim ama sistemde yapılabilecek bir ayar ile tüm kayıtları kontrol ederek yoluna devam etmesi sağlanabilir. Bu defa ADO performansının dosyayı hızlıca open/close tekniğinden daha kötü bir performans verebilme ihtimali var.

Bence ADO, Excel hücresinde 255 karakteri aşan metin içeren dosyalar için uygulanmamalı. Eğer mutlaka uygulanması gerekiyorsa, ilk 8 kayıt içinde bir adet örneğin 500 karakterli saçma bir kayıt (ecnebi diliyle dummy kayıt) atmak yeterli olacaktır. Böylelikle ADO, Char(500) olarak düşünüp yoluna devam edecek.

Adım etiketlendiği için o anda detaylı araştıramadığım yanlışlığı düzeltme gereği hissettim.

Saygılar...
 
Son düzenleme:
Geri
Üst