taranan görüntüleri veritabanında tutma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

taranan görüntüleri veritabanında tutma

Mesaj gönderen mazhargemci »

meraba arkadaşlar...

basit bir arşiv programı hazırlamaktayım.
bilgiler access veri tabanına kaydedilmekte (herkes mysqli kullan diyor ama access daha basidime kaçıyor daha doğrusu pek bilmiyorum mysqli :) )
tarayıcıdan taranan pdf, jpg v.s dosyaları opendialog groupbox ve webbrowser ile hallediyorum. amacım programın içinde tarayıcıyı çalıştırmak ama bi türlü beceremedim. o kısmı yaptım yaptım yapamadım öyle kalacak.
bu dosyaları access te tutabilirmiyim tutabilirsem nasıl bilgi verirseniz sevinirim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

Şöyle ki, Webbrowser ile hallediyorum dediğine göre kullandığın tarayıcı WEB arayüzlü NETWORK özellikli olandan olmalı ki bizim kurumdakine benziyor bir sıra numarası vererek taradıklarını daha önce belirlediğin bir ağ klasörüne yolluyor değil mi ?

O tarama sonucu oluşturulup kopyalanan taranmış verinin ismini, veritabanınla ilişkilendirebileceğin bir isimle değiştirip kendi depo klasörüne kopyala. Veritabanından da bu ismi ilgili veri alanına not et. Böylece veritabanı içinde bu dosya şişkinlik yapmaz, aradığın dosyanın hangisi olduğuna da kolayca ulaşabilirsin.


Başarılar.

EK- Önce okuduğumda tarayıcıyı kullandığını sandım. Tarayıcından normalde nasıl tarıyorsun ?
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

teşekkürler...
tarayıcıdan tarayıp bi klasöre atıyorum ordan çağırabiliyorum anca
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

Tarayıcının TWAIN desteği varsa direkt proje içinden tarama imkanın olur. Eğer network scan ise yani LAN kablosu ile bağlı ise o zaman bir klasöre taramasını beklemek durumundasın. BU kadarlık veri ile bu kadar cevap yazabilirim.
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

ya o o kadar önemli değil benim için olsada olur olmasa da. önemli olan görselleri veritabanında nasıl tutabilirim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

network scan değil
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

İlk mesajımda yazdığım şekil en verimli yöntemdir.

(1) Veritabanındaki tabloda (taranmış içerik veya dilediğin türde belgeye ulaşmak istediğin tabloda) iki adet yeni alan tanımlarsın.
- ilk alan DosyaAdı, ikinci alan ise DosyaTipi olsun.

(2) Projende belge ekle dediğinde OpenFileDialog ile ilgili belgeyi seçtirirsin. Bu belge illaki de bir resim dosyası olmak zorunda da değil. Bir PDF, Word DOC, Excel XLS vs.vs de olabilir. Atıyorum c:\...\arman.jpg seçildi diyelim. Adı burada ikinci planda önemli. Aynı isimde bir dosya daha seçilebilir ihtimalini bertaraf etmek lazım. Bunun için bu dosyanın yeni bir kopyasını oluşturup ismini sadece senin bilebileceğin ama aynı isimde ikinci bir tane olmayacak şekilde değiştirmelisin.

- Tablondaki key alanın bir AutoInc alan olsun ve sıradaki kaydın nosu mesela 11806 olsun. Bu dosyanın adını bu kayıt ile ilişkilendirmek için JPG_11806.DAT diye yeni bir isimle yeni bir kopya oluşturup kendi özel DATA klasörüne kopyala. DATA klasörünün yeri belli olduğundan sadece dosya adını ve tipini tutmak yeterli olacaktır.

- Kayıtlarında bu resmi DosyaAdi -> JPG_11806.DAT DosyaTipi -> IMAGE olarak yer alması senin için yeterli olacaktır. Bu belgeyi geri çağıracağında windows TEMP dizinine önce bu DAT dosyasını 11806.JPG olarak kopyalarsın, sonra da bunun Dosya Tipi alanındaki duruma göre uygun bir program ile gösterimini veya kendi formunun içinde gösterimini yaparsın.
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

çok teşekkür ederim abi yapmaya çalışacağım umarım olur.
allah razı olsun
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

Yaparsın. İhtiyacın olanlar CopyFile(), RenameFile(), ExtractFilePath(), ChangeFileExt() gibi (4) tane dosya fonksiyonu.
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

olmadı ya o kadar uğraştım. jpg dosyalarını tutmayı başardım lakin pdfleri tutamadım veritabanında
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

Merhaba.

- Aşağıda verdiğim yapı senin işini görecek, anlamaya çalış ve dilediğin şekilde kullan.

- Kullanım örneğindeki ShowMessage kısmını kaldırıp, buradaki bilgileri veritabanına kayıt altına alacaksın.

- Tersi işlemi de yaparsın artık. Baştaki alt çizgi ile ayrılmış Tip kısmını alıp uzantısı olan DAT ile değiştirecek kullanacaksın.

- Dilersen baştaki dosya tipini de TABLO'na veri alanı olarak kayıt altında tutar, sadece rakamlardan oluşan DAT dosyaları halinde de tutabilirsin. 11806.DAT gibi. Çünkü bu durumda da dosya tipini tabloda biliyor olacaksın.

// Senin için altyapıyı hazırlayan fonksiyon

Kod: Tümünü seç

Type
  tBelgeBilgi = Record
    boolIslemTamam : Boolean;
    strBelgeTipi,
    strBelgeYeniAdi : String;
  End;

Function BelgeSakla( iKaySiraNo: Integer; strBelgeDosya, strDataKlasor:String ): tBelgeBilgi;
begin
  FillChar( Result, SizeOf(Result), 0 );
  if DirectoryExists( strDataKlasor ) then
  begin
    Result.strBelgeTipi    := UpperCase( StringReplace( ExtractFileExt( strBelgeDosya ), '.', '', [] ) ); // noktasız uzantı
    Result.strBelgeYeniAdi := Format('%s_%d.DAT', [ Result.strBelgeTipi, iKaySiraNo ] );
    CopyFile( PChar(strBelgeDosya), PChar( strDataKlasor + Result.strBelgeYeniAdi ), False );
    Result.boolIslemTamam := True;
  end else
  begin
    Result.boolIslemTamam := False;
    MessageDlg( 'Hedef klasör bulunamadı...', mtError, [mbCancel], 0 );
  end;
end;

// Kullanımına örnek

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Bilgi : tBelgeBilgi;
  strDataKlasor : String;
begin
  strDataKlasor := ExtractFilePath(Application.Exename) + 'DATA\';
  With TOpenDialog.Create( nil ) do
  begin
    Filter       := 'Resim Dosyaları *.JPG, *.BMP|*.JPG;*.BMP|PDF Dosyaları *.PDF|*.PDF|Tüm Dosyalar *.*|*.*';
    FilterIndex := 1;
    if Execute then
    begin
      Bilgi :=  BelgeSakla( 11806, FileName, strDataKlasor );
      if Bilgi.boolIslemTamam then
      begin
        ShowMessageFmt( 'Dosya %s klasöründe %s tipinde %s yeni dosya adıyla kayıt altına alındı.. '#13'Tabloya bu son iki bilgi yer alması yeterli', [strDataKlasor, Bilgi.strBelgeTipi, Bilgi.strBelgeYeniAdi])
      end;
    end;
    free;
  end;
end;
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

örneği anladım da altyapı fonksiyonunu çözemedim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mrmarman »

neresinde sorun yaşadın ?
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

yinede teşekkür ederim o kadar uğraşmışsınız.
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: yardım... (acil) taranan görüntüleri veritabanına

Mesaj gönderen mazhargemci »

1.si neden .dat uzantısını kullanıyoruz. .dat olarak mı atıyor veritabanına.
2.si type kısmında olanları olduğu gibi type kısmına atarım da
Function BelgeSakla( iKaySiraNo: Integer; strBelgeDosya, strDataKlasor:String ): tBelgeBilgi;
kısmı kafamı karıştırdı.
Cevapla