belgeler veritabanına gönderme...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 101
- Kayıt: 13 Şub 2015 09:32
belgeler veritabanına gönderme...
bir abimiz bilgisayarda kayıtlı pdf, jpg dosyaları veritabanına yaptı fakat bana aynısının editten bilgi girişi yapıp çağırılan belgelerle beraber butona tıklanıp veritabanına kayıt yaptırmak istiyorum. muharrem abinin yaptığı kodlar aşağıda kodlar aşağıda o kadar denedim bir türlü yapamadım yardımcı olursanız sevinirim şimdiden teşekkür ederim.
http://i.hizliresim.com/7oRm5P.gif
http://s2.dosya.tc/server2/pqyy6c/Verit ... i.rar.html buda kaynak kodlar
http://i.hizliresim.com/7oRm5P.gif
http://s2.dosya.tc/server2/pqyy6c/Verit ... i.rar.html buda kaynak kodlar
Re: belgeler veritabanına gönderme...
Merhaba.
Özel mesaj ile istemiştin, oradan yardımcı olursam iki kişi arasında kalır.
Buradan yayınlayayım ihtiyacı olan başkaları da yararlansın.
Bu linkten kaynak kodlarıyla projenin bütününü indirebilirsin.
Kaynak kodların açık hali aşağıda, ilgilenen olur da işine yarayan olursa buradan referans alabilir.

Özel mesaj ile istemiştin, oradan yardımcı olursam iki kişi arasında kalır.
Buradan yayınlayayım ihtiyacı olan başkaları da yararlansın.
Bu linkten kaynak kodlarıyla projenin bütününü indirebilirsin.
Kaynak kodların açık hali aşağıda, ilgilenen olur da işine yarayan olursa buradan referans alabilir.

Kod: Tümünü seç
Uses ComObj, ActiveX, JPEG, AcroPDFLib_TLB;
Var
xAcroPDF : TAcroPDF;
procedure AcroPDF_Goster( Image:TImage; strDosya : TFileName );
begin
if Assigned( xAcroPDF ) then xAcroPDF.Free;
Try
xAcroPDF := TAcroPDF.Create(Nil);
With xAcroPDF do begin
Parent := Form1;
Visible := True;
Left := Image.Left;
Top := Image.Top;
Width := Image.Width;
Height := Image.Height;
src := strDosya;
Try SetFocus; Except End;
end;
Except
MessageDlg( 'Sistemde Adobe Acrobat Reader Yüklenmemiş...'#13'PDF Ön izlemesi şimdilik yapılamayacak...', mtError, [mbOk], 0 );
End;
end;
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.ADOQuery1AfterCancel(DataSet: TDataSet);
begin
DataSet.AfterScroll( DataSet );
end;
procedure TForm1.ADOQuery1AfterInsert(DataSet: TDataSet);
begin
if (xAcroPDF <> Nil) then xAcroPDF.Visible := False;
Image1.Visible := False;
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' )
then begin
Image1.Visible := False;
AcroPDF_Goster( Image1, strUrunBelge );
end else
begin
Image1.Visible := False;
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.BitBtn2Click(Sender: TObject);
var
Bilgi : tBelgeBilgi;
strDataKlasor : String;
iSonKayıt : Integer;
begin
if ( Trim( Edit1.Text ) = '' ) AND ( Trim( Edit2.Text ) = '' ) then
begin
MessageDlg('Kayıt ekleme için isim ve/veya soyadı girmelisiniz...', mtWarning, [mbOk], 0);
EXIT;
end;
if ( NOT FileExists( Edit3.Text ) )
then
if ( MessageDlg( 'Belge seçmemişsiniz, devam edelim mi ?', mtConfirmation, [mbNo, mbYes], 0 )= mrNo )
then Exit;
// Önce belge kaydı oluşturuyoruz...
With TAdoQuery.Create(nil) do
begin
Connection := ADOConnection1;
SQL.Clear;
SQL.Add( 'INSERT INTO ArsivTablo' );
SQL.Add( '( A_Adi, A_Soyadi, A_BelgeAdi, A_BelgeTip )' );
SQL.Add(' VALUES ');
SQL.Add( '( :A_Adi, :A_Soyadi, :A_BelgeAdi, :A_BelgeTip )' );
Parameters.ParamByName('A_Adi').Value := Edit1.Text;
Parameters.ParamByName('A_Soyadi').Value := Edit2.Text;
Parameters.ParamByName('A_BelgeAdi').Value := Null;
Parameters.ParamByName('A_BelgeTip').Value := Null;
ExecSQL;
// Şimdi bu kayıt için verilen otomatik numarayı alıcaz...
SQL.Clear; // Ters sırada en üstteki ilk kayıt girilen son kayıttır.
SQL.Add( 'SELECT TOP 1 A_KayNo FROM ArsivTablo ORDER BY A_KayNo DESC' );
Active := True;
iSonKayıt := FieldByName('A_KayNo').AsInteger;
Active := False;
if FileExists( Edit3.Text ) then
begin // Belge varsa kaydını yapıcaz....
strDataKlasor := ExtractFilePath(Application.Exename) + 'DATA\';
Bilgi := BelgeSakla( iSonKayıt, Edit3.Text, strDataKlasor );
if Bilgi.boolIslemTamam then
begin // belgeyi DATA klasörüne alma ve ismi değiştirme işlemi başarılı...
SQL.Clear;
SQL.Add( 'UPDATE ArsivTablo SET' );
SQL.Add( 'A_BelgeAdi = :A_BelgeAdi, A_BelgeTip = :A_BelgeTip' );
SQL.Add( 'WHERE A_KayNo = :A_KayNO ');
Parameters.ParamByName('A_BelgeAdi').Value := Bilgi.strBelgeYeniAdi;
Parameters.ParamByName('A_BelgeTip').Value := Bilgi.strBelgeTipi;
Parameters.ParamByName('A_KayNo').Value := iSonKayıt;
ExecSQL;
end;
Free;
end; // if file exists
end; // With
ADOQuery1.Active := False;
Sleep(1);
Application.ProcessMessages;
ADOQuery1.Active := True;
// En son girilen kayda otomatik konumlanıyoruz ki kullanıcı sonucu görsün...
ADOQuery1.Locate( 'A_KayNo', iSonKayıt, [] );
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
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
Edit3.Text := FileName;
end;
free;
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
Var
iBulunanKayit : Integer;
begin
if ( Trim( Edit4.Text ) = '' ) AND ( Trim( Edit5.Text ) = '' ) then
begin
MessageDlg('Arama için aranacak isim ve/veya soyadı girmelisiniz...', mtWarning, [mbOk], 0);
EXIT;
end;
With TAdoQuery.Create(nil) do
begin
Connection := ADOConnection1;
SQL.Clear;
SQL.Add( 'SELECT A_KayNo FROM ArsivTablo WHERE 1=1' );
if Trim( Edit4.Text ) <> ''
then SQL.Add( ' AND A_Adi = '+ QuotedStr( Trim(Edit4.Text) ) +' ');
if Trim( Edit5.Text ) <> ''
then SQL.Add( ' AND A_Soyadi = '+ QuotedStr( Trim(Edit5.Text) ) +' ');
SQL.Add('ORDER BY A_Adi, A_Soyadi' );
Active := True;
if RecordCount > 1
then ShowMessage( 'Bulunan kayıt sayısı (1)''den fazla olduğundan ilk kaydı gösteriyorum...');
iBulunanKayit := FieldByName('A_KayNo').AsInteger;
Active := False;
Free;
end;
if iBulunanKayit > 0
then ADOQuery1.Locate( 'A_KayNo', iBulunanKayit, [] )
else MessageDlg('Aramama kriterinize göre kayıt malesef bulunamadı.', mtWarning, [mbOk], 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
VeritabaniKontrol();
AdoQuery1.SQL.Text := 'SELECT * FROM ArsivTablo';
AdoQuery1.Active := True;
ADOQuery1AfterScroll(ADOQuery1);
Edit1.Text := '';
Edit2.Text := '';
Edit3.Text := '';
Edit4.Text := '';
Edit5.Text := '';
end;
Re: belgeler veritabanına gönderme...
Selam Muharrem abi,
Yine dayanamamışsın, tüm projeyi tamamladın sayılır
)
Yine dayanamamışsın, tüm projeyi tamamladın sayılır

Re: belgeler veritabanına gönderme...

Ama bu hafta işler yoğundu bir kaç gün fazla dayandım.
Re: belgeler veritabanına gönderme...
Abi birşey soracağım database kaydedilmiş bir pdf dosyasını önizleme olarak nasıl okuruz ?
Re: belgeler veritabanına gönderme...
pdf olmasaydı stream ile hallederdin derdim ama, eğer kendi pdf gösyericini tasarlama imkanın olmayacaksa fiziksel olarak buradaki gibi bir temp klasörüne açma ihtiyacı var derim.
Daha önce bir önizleme ilüzyonu hazırlamıştım. Şöyle ki, her pdf'in bir kapak bir de index kısmını jpg yapıp, 2 jpg +1 pdf saklamış, önizlemeyi jpg ile ilk paragrafta bahsettiğim şekilde direkt stream ile göstermiştim. İnsanlar pdf önizlemesi sanıyordu ama onlar birer jpg image'den başka birşey değildi.
Daha önce bir önizleme ilüzyonu hazırlamıştım. Şöyle ki, her pdf'in bir kapak bir de index kısmını jpg yapıp, 2 jpg +1 pdf saklamış, önizlemeyi jpg ile ilk paragrafta bahsettiğim şekilde direkt stream ile göstermiştim. İnsanlar pdf önizlemesi sanıyordu ama onlar birer jpg image'den başka birşey değildi.

Re: belgeler veritabanına gönderme...
Zamanında gelen tüm yayın yasaklarını pdf olarak mssql database kaydetmişler onları tek tek çıkartıyorum ama üzerinde gezerken önizleme yapmak işime daha kolay gelir diye düşündüm o yüzden sordum.
Olmadı bu hali ile kullanmaya devam etsinler...
Olmadı bu hali ile kullanmaya devam etsinler...
Re: belgeler veritabanına gönderme...
pdf yapılış şekilleri eğer taranmış belgeden değil de text kaynaktan ise, bunu deşifre etmeyi deneyebiliriz. PDF bu durumda rtf (Rich text format) benzeri bir yapıda oluyor. Öyle gözlemlemiştim.
Taranmış ise ocr gerekir. Başka çıkış yok.
Taranmış ise ocr gerekir. Başka çıkış yok.
Re: belgeler veritabanına gönderme...
Direkt belgeyi pdf formatında taratıp database kaydetmişler maalesef en azından dosya türü diye bir alan eklenmiş
), ben en iyisi biraz daha bakayım belki ekstra bir çözüm bulurum (component gibi), fikir için teşekkür ederim, sağol abi.

Re: belgeler veritabanına gönderme...
Merhaba,
Bir şey sormak istiyorum program çalışıyor yalnız aşağıdaki uyarı mesajını veriyor, sebep ne olabilir ?
Bir şey sormak istiyorum program çalışıyor yalnız aşağıdaki uyarı mesajını veriyor, sebep ne olabilir ?
Kod: Tümünü seç
Debugger Exception Notification
---------------------------
Project BelgeBilgi.exe raised exception class EOleSysError with message 'Sınıf kaydedilmemiş'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
Re: belgeler veritabanına gönderme...
Tekrar merhaba, sorun Adobe yüklü olmadığından kaynaklanıyormuş. 
