02-10-2018, Saat: 14:48
(29-09-2018, Saat: 09:35)malitutuncu Adlı Kullanıcıdan Alıntı: Merhaba,
Araştırmalarıma rağmen veritabanı ile bir connection kurup parça parça çekilecek orjinal bir yöntem bulamadım.
Ancak bunu sql tarafı ile hallettim.
İlk adımda:
sql Datalength fonsiyonu ile:
Kod: (Select All)
SELECT uzunluk = DATALENGTH(COLUMN_NAME) FROM TABLE_NAME;
ilgili verinin uzunluğunu alıyoruz.
İkinci adımda:
Sql tarafında
ile parça parça alabiliyoruz. Ancak bize en fazla 64kb lık bir bilgi veriyor.Kod: (Select All)
SUBSTRING( string, start_position, length )
Örneğin
20mb bir dosyamız olduğunda (20971520byte).
64kblık(65536byte) parçalar halinde aldığımızda
320 defa veri tabanına gidip gelmemiz gerekiyor.
Yapılan:
1. olarak başta dosya boyutu aldım
2. olarak Dosya boyutu / 327680 ile döngü sayımı hesapladım(327680byte=320kb)
3. olarak Select ifademiniz içerisinde 5 tane substring ile (O dosyanın belirli bir pozisyonundan başlayan ve 64kb+64kb+ 64kb+ 64kb+64kb toplamda 320kb = 0,3mb) veri çeken
ve bunu TMemoryStream'a yazan bir algoritma geliştirdim. ve her döngümün içerisine sleep(10) koydum.
(Sleep komutu threadlerde hayati değer taşıdığı gibi burada da öyle olduğunu düşünüyorum)
Sonuç:
20mb dosyayı 64 defa veri tabanına giderek. Parça parça alıp TMemoryStreamda topladım daha sonra kaydettim
Bunu SQL tarafında bir fonksiyon, prosedür ile yapmamamın sebebi dinamik olması gerekli fonksiyonum
Function SqlVeriyiParcalayarakGetir(aKolonAdi, aTabloAdi, aWhereSarti : String) : TMemoryStream; begin //kod end;
şeklinde yaptım. Benim çözümüm bu şekilde
Algoritmayı vermememin sebebi bunu kopyalayıp yapıştırmak yerine, buna ihtiyacı olan kişinin de bir araştırma yapması.Belki benden iyi bir çözüm bulur yol gösterir.
Yardımcı olan arkadaşlara teşekkür ediyorum.
Teşekkürler.
Veriyi tek parça halinde elde ettiğinizde bütünlüğünde bir bozulma veya farklılık oluştu mu?
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw

