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

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
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 »

(1) DAT uzantısı DATA'nın yani VERİ kelimesinin İngilizce karşılığının kısaltmasıdır.
- Şöyle düşün Projenin dışından önüne gelen kişinin DATA klasöründeki bu dosyaları tıklayıp görüntülemesini doğrudan engeller. Bir ileri aşaması bu DAT dosyalarının içeriğine müdahale etmek ki bu daha özel durumlarda gerekir, senin durumunda gerekli mi bilmiyorum. Sadece altyapısı hazır olsun yeter.

- Veritabanına bir şey attığı yok. Göreceğin üzere dosyalar DATA isminde bir klasörde biriktiriliyor, sana hangi isimle değiştirdiğini rapor ederek kayıt altında tutmana olanak sunuyor. Yani sen JPG_11806.DAT dosyasının içinde ne olduğunu zaten tablonda kayıt altına almış olman lazım. Dizi taramasında lazım olan kısmın dışında belgeye erişim zamanı geldiğinde de hangi dosyada olduğunu bilmen gerekiyor.

- Özetle veritabanı içine belge değil belgenin dosya konumu ve tipi kayıt altına alınmış oluyor.

(2) Bir fonksiyondan sadece (1) result / cevap döner değil mi ? Biz bu cevap sayısını (3)'e çıkarttık o kadar. Başka bir şey değil.
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 »

bunları access veri tabanında yapıyorum farklı veritabanında 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 »

:lol: Kardeşim sen burada ne anlatmak istediğimi tabandan tavana anlamadın. :)

- MS-ACCESS, MySQL, SQLServer veya Firebird fark etmez.
- Taranan resim A klasöründe olsun. Senin DATA klasörün de B klasörü olsun.
(1) Öncelikle A klasöründeki profil resmi içeren ARMAN.JPG isimli taranmış dosyayı B klasörüne 11806.DAT olarak kaydediyorum. Bunu nasıl yapıyorum CopyFile() ile. Bak veritabanına daha hiç dokunmadık.

(2) Veritabanında Muharrem ARMAN kaydında bu veriyi nasıl kullanacaksın, tabloda Adı = Muharrem, Soyadı = ARMAN, ProfilResmi = 11806.DAT kaydedeceksin. Bak sadece yazı yazıyoruz burada da resim yok ortada.Sadece String... Bitti...

(3) Geri okumak istediğinde Muharrem ARMAN kaydına konumlandın diyelim, DBGrid olsun OnAfterScroll olayında da olabilir, ara bul da... tablonda 11806.DAT ismini görünce hemen B klasöründeki bu 11806.DAT dosya olduğunu biliyor olacaksın. Bu dosyayı alıp windows TEMP dizinine kopyalayıp DAT olan uzantısını JPG olarak değiştirip form üzerinde veya bir resim göstericisinde göstereceksin.

Bu üç adımda anlaşılmayan kaldı mı ?
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 »

bunda anlaşılmayacak bişey yok :) sadece ms-access veritabanında tutacağız benim derdim bu :))
buda prgramın taslağı
http://i.hizliresim.com/Yvmoml.jpg
normal bilgileri ms access veritabanında tutuyorum onda hiç bir sıkıntı yok
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 »

O taratilan belge pdf formatinda
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 »

Yahu hocam sana anlatamıyorum. Anlamak istemiyorsun. Belgenin türü nevi, veritabanının türü nevi önemli değil. Senin belgeleri nasıl sınıflandıracağını anlatıyorum.

Anladığım kadarıyla Copy/Paste mantığını benimsedin. Sana senin projeni hazırladım. Bunu da çözemezsen diyecek bir şeyim kalmıyor.

İçinde PDF, JPG, BMP ne istersen tarayabilir veritabanına ilişkilendirebilir, dilediğini önizleyebilirsin.

İlgilenenler bu linkten indirebilirler.

(1) DATA klasörü yoksa yeniden oluşturur.
(2) MDB (MSACCESS veritabanı) dosyası yoksa sıfırdan oluşturur.
(3) Tablo'yu da sıfırdan oluşturur.
(4) Resim / Belge eklendiğinde ilişkilendirip DATA klasörüne arşivler
(5) Kayıtlarda gezinirken PDF ise AcroPDF activeX kontrolü yardımı ile Acrobat önizleme yapılır.
(6) JPG veya BMP ise TImage nesnesinde önizleme yapılır.

Kaynak kodları burada.

Kod: Tümünü seç

Uses ComObj, ActiveX, JPEG, AcroPDFLib_TLB;

Var
  xAcroPDF : TAcroPDF;

procedure VeritabaniKontrol;
var
  Katalog  : OleVariant;
  strData  : String;
  strTablo : String;
begin
  With Form1 do begin
    strData := ExtractFilePath(Application.Exename) + 'DATA\';
    if NOT DirectoryExists( strData ) // Klasör yoksa CREATE ediyorum.
      then ForceDirectories( strData );

    ADOConnection1.LoginPrompt := False;
    ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + strData + 'Veritabani.MDB';
    DataSource1.DataSet  := ADOQuery1;
    DBGrid1.DataSource   := DataSource1;
    AdoQuery1.Connection := ADOConnection1;
  end;

  if NOT FileExists( strData + 'Veritabani.MDB' ) then
  begin // Veritabanı yoksa CREATE ediyorum...
    Katalog  := CreateOleObject('ADOX.Catalog');
    Katalog.Create( Form1.ADOConnection1.ConnectionString );
    Katalog  := Unassigned;    // Uses Variants

    strTablo := 'CREATE TABLE ArsivTablo ('
      + 'A_KayNo    AutoIncrement CONSTRAINT idxArsiv PRIMARY KEY, '
      + 'A_Adi      Text( 20 ), '
      + 'A_Soyadi   Text( 20 ), '
      + 'A_BelgeAdi Text( 20 ), '
      + 'A_BelgeTip Text(  3 )  '
      + ')';

    With TADOCommand.Create(nil) do
    begin
      Connection  := Form1.ADOConnection1;
      CommandText := strTablo;
      Prepared := true;
      Execute;
      Free;
    end;
  end;
end;

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;

procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
  function GetTempDir: string;
  var
    TempDir:     DWORD;
  begin
    SetLength(Result, MAX_PATH);
    TempDir := GetTempPath(MAX_PATH, PChar(Result));
    SetLength(Result, TempDir);
  end;
Var
  strBelge, strUrunBelge : String;
  strData  : String;
begin
  strData := ExtractFilePath(Application.Exename) + 'DATA\';
  if DataSet.RecordCount = 0 then
  begin
    Image1.Picture.Graphic := Nil;
    Exit;
  end;

  strBelge       := strData + DataSet.FieldByName('A_BelgeAdi').AsString;
  if FileExists(strBelge) then
  begin
    strUrunBelge := GetTempDir + 'Gecici.' + DataSet.FieldByName('A_BelgeTip').AsString;
    CopyFile( PChar(strBelge), PCHar(strUrunBelge), False );
    if ( DataSet.FieldByName('A_BelgeTip').AsString = 'JPG' ) OR  ( DataSet.FieldByName('A_BelgeTip').AsString = 'BMP' )
    then begin
      Image1.Visible   := True;
      Image1.Picture.LoadFromFile( strUrunBelge );
      if (xAcroPDF <> Nil) then xAcroPDF.Visible := False;
      
    end
    else
    if ( DataSet.FieldByName('A_BelgeTip').AsString = 'PDF' ) AND (xAcroPDF <> Nil)
    then begin
      Image1.Visible   := False;
      xAcroPDF.src := strUrunBelge;
      xAcroPDF.Visible := True;
    end;
  end else
  begin
    Image1.Picture.Graphic := Nil;
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Bilgi : tBelgeBilgi;
  strDataKlasor : String;
begin
  With ADOQuery1 do
  begin
    if  (State = dsInsert) or (State = dsEdit) then Post;
  end;

  if ADOQuery1.RecordCount  = 0 then
  begin
    MessageDlg('En az bir kayıt girmelisiniz...', mtWarning, [mbOk], 0 );
    EXIT;
  end;

  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(  ADOQuery1.FieldByName('A_KayNo').AsInteger, FileName, strDataKlasor );
      if Bilgi.boolIslemTamam then
      begin
        ADOQuery1.Edit;
        ADOQuery1.FieldByName( 'A_BelgeAdi' ).AsString := Bilgi.strBelgeYeniAdi;
        ADOQuery1.FieldByName( 'A_BelgeTip' ).AsString := Bilgi.strBelgeTipi;
        ADOQuery1.Post;
        ADOQuery1AfterScroll(AdoQuery1);
      end;
    end;
    free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  VeritabaniKontrol();
  AdoQuery1.SQL.Text := 'SELECT * FROM ArsivTablo';
  AdoQuery1.Active := True;
  ADOQuery1AfterScroll(ADOQuery1);

  xAcroPDF := TAcroPDF.Create(Nil);
  With xAcroPDF do begin
    Parent  := Form1;
    Visible := False;
    Left    := Image1.Left;
    Top     := Image1.Top;
    Width   := Image1.Width;
    Height  := Image1.Height;
  end;
end;
Resim
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 »

tamam abi çok uğraştırdım seni...
hakkını helal et..
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 »

Yukarıda tam proje linkini verdim indirmemişsin henüz. Önce bir bak bakalım anlamadığın yer neresiymiş merak ettim.
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 »

anlaşılmayacak bişey yokmuş sen detaylı olarak sadece veritabanını kodlarla oluşturmuşun.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

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

Mesaj gönderen csunguray »

Aşağıdaki tartışmada bu konuyla ilgili bilgiler bulabilirsiniz.

viewtopic.php?f=2&t=6107&start=15
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
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 »

MSAccess veritabanına belgeleri gömmek fikri saatli bomba kurup veritabanına koymak gibidir... :wink:

Ama sonuçta müşteri memnuniyeti esastır :D dileyen veritabanına gömer dileyen ayrı tutar.
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 »

muharrem abi ya bilmiyorum ama şurda bi hata veriyor. senin yaptığında bi sıkıntı yok bende bi hata veriyor
http://i.hizliresim.com/YvmX12.jpg
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 »

(1) akropdf için tlb dosyasını projene dahil etmeyi ihmal etmişsin
(2) xAcropdf'nin naşına var ifadesi koymamışsın.


zaten xAcropdf'ye ihtiyaç duymaman lazım. Formundaki pdf gösteren neyse ona yönlendirmen yeterli.
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 »

Sen direk dbgrid ten kayit islemini yaptirmissin. Ben edit uzerinden bilgileri girip veri tabanina aktarcam. Gorselleride buton yardimiyla gommeye calisiyorum
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 »

Hocam aynı dili konuşmakta zorlanıyorum. Ekran kopyası gönderdiğinde pdf gösteren bir nesne yok muydu formunda ?

Onu diyorum, zaten pdf gösteren bir nesne koymuşsun onu kullan, verdiğim örnekteki bütünlük kazansın diye eklediğim pdf göstericidir.

Aynı veritabanını kendisinin üretmesi gibi, projenin bütünlüğü için bonus olarak eklenmiş kısımlar yani.
Resim
Resim ....Resim
Cevapla