taranan görüntüleri veritabanında tutma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: yardım... (acil) taranan görüntüleri veritabanına
(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.
- Şö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.
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
bunları access veri tabanında yapıyorum farklı veritabanında değil
Re: yardım... (acil) taranan görüntüleri veritabanına


- 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ı ?
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
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


buda prgramın taslağı
http://i.hizliresim.com/Yvmoml.jpg
normal bilgileri ms access veritabanında tutuyorum onda hiç bir sıkıntı yok
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
O taratilan belge pdf formatinda
Re: yardım... (acil) taranan görüntüleri veritabanına
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.

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;

-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
tamam abi çok uğraştırdım seni...
hakkını helal et..
hakkını helal et..
Re: yardım... (acil) taranan görüntüleri veritabanına
Yukarıda tam proje linkini verdim indirmemişsin henüz. Önce bir bak bakalım anlamadığın yer neresiymiş merak ettim.
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
anlaşılmayacak bişey yokmuş sen detaylı olarak sadece veritabanını kodlarla oluşturmuşun.
Re: yardım... (acil) taranan görüntüleri veritabanına
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/)
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/)
Re: yardım... (acil) taranan görüntüleri veritabanına
MSAccess veritabanına belgeleri gömmek fikri saatli bomba kurup veritabanına koymak gibidir... 
Ama sonuçta müşteri memnuniyeti esastır
dileyen veritabanına gömer dileyen ayrı tutar.

Ama sonuçta müşteri memnuniyeti esastır

-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
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
http://i.hizliresim.com/YvmX12.jpg
Re: yardım... (acil) taranan görüntüleri veritabanına
(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.
(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.
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
Re: yardım... (acil) taranan görüntüleri veritabanına
Sen direk dbgrid ten kayit islemini yaptirmissin. Ben edit uzerinden bilgileri girip veri tabanina aktarcam. Gorselleride buton yardimiyla gommeye calisiyorum
Re: yardım... (acil) taranan görüntüleri veritabanına
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.
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.