Delphi Can

Orjinalini görmek için tıklayınız: COZULDU veritabani prg yerine ne kullanabilirim.
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
kucuk programlar yaziyorum kendi ihtiyaclarim icin
bazen birileriyle paylasmak gerekiyor 
ama paylastigim kiside veritabani programi kurmak veya kurdurmak problem oluyor
veri tabani olarak ini dosyayalarini kullanmkayi dusunuyorum

baska bir yontem varmi program kurmadan vertbani seklinde datalarimizi kaydetip okuyabilecegimiz 
bir yontem

veya calistirilabilir bir exe veritabani olsa.
once veitabani exesini calistirip sonra dosya okusak kaydetsek boyle bir sey mumkunmu
saygilar.
sqllite işini görebilir bir DLL ve db dosyası çalışabilir.
(21-01-2024, Saat: 19:05)nguzeller Adlı Kullanıcıdan Alıntı: [ -> ]sqllite işini görebilir bir DLL ve db dosyası çalışabilir.

baska pcde birsey kurmak gerekmeyecek degil mi 

birde firebir kullaniyorum genelde firebird de ayni sekilde bir veritabani dosyasi bir dll ile program baska pc de
calisirmi

saygilar

firebird embadded varmis arastiriyorum 2.1 olursa super olur
saygilar
En basit ve kolayı bence Record yapısı kullanmak. Ben pek çok projede yaptım. Eğer kayıt miktarı 100 bini geçmiyorsa text dosyası bile işinizi görebilir.
Record yapısı dosyadaki bir kayda direkt erişim imkanı verir. Daha hızlıdır.
Örnek:
Type
Kayit = Record
alan1: integer;
alan2: string[100];
alan3: Boolean;
end; // of record

var Kay: Kayıt;
KayitF: File of Kayit;

begin
AssignFile(KayitF, 'DosyaAdi'); ReWrite(KayitF); // Dosya oluşturuluyor. Dosya varsa kontrol ile Reset(KayitF) yapacaksınız.
Write(KayitF, Kay);
Kay.alan1 := 0;
Kay.alan2 := 'Delhi Can';
kay.alan3 := True;
Write(KayitF, Kay); // Daha sonra Seek(KayitF, n) n --> tam sayı, komutu ile istediğiniz kayıta ulaşıp Read(KayitFi kay) komutu ile kayıt okuyabilirsiinz.
end;
firebird un embedded versiyonuda var hocam
Diğer bir öneri ise memtable ve localsql kullanmak. Dezavantajı veya olası riski, uygulama kapanırken memtable nesnesindeki verileri diske yazmanız gerekmesidir. Uygulama açılırken diskden memtable a veriler yüklenir, sonra normal dataset, dbgrid ve db işlemlerinini yaparsınız. Uygulama kapatılırken tekrar diske kaydedersiniz. Temelde text veya record yapısına benziyor ama size database kontrollerini kullanma imkanı sağlıyor.

Fakat sqllite kullanmanızı öneririm. Exe ile birlikte birtane sqlite dll i dağıtacaksınız. Extra bir kurulum vs yapmanıza gerek yok. Database oluşturma kısmını eğer uygulamanın çalıştığı makinede yoksa, uygulama içerisinden oluşturabilirsiniz. Bunu yapmak istemiyorsanız, exe, sqlite.dll ve data.db gibi üç dosyayı dağıtmanız gerekir.
Şöyle bir örnek var, Accessi aratmayacak Veritabanı motoru olmadan
(Dosya ve kodlar Biraz daha güncellenmiştir)
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TKisi = record
   TCKimlikNo: string[11];
   AdSoyad: string[50];
   DogumTarihi: string[10];
 end;

 
 TForm1 = class(TForm)
   Kaydet: TButton;
   edtTCKimlikNo: TEdit;
   edtAdSoyad: TEdit;
   edtDogumTarihi: TEdit;
   memoKutuk: TMemo;
   ListBox1: TListBox;
   bul: TButton;
   sil: TButton;
   Duzenle: TButton;
   ListBox2: TListBox;
   ComboBox1: TComboBox;
   ComboBox2: TComboBox;
   Button1: TButton;
   Button2: TButton;
   procedure KaydetClick(Sender: TObject);
   procedure bulClick(Sender: TObject);
   procedure silClick(Sender: TObject);
   procedure DuzenleClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ComboBox1Change(Sender: TObject);
   procedure ComboBox2Change(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure ListBox1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}


function KayitDosyasiAdi: string;
begin
 Result := ExtractFilePath(Application.ExeName) + 'kayit.txt';
end;

procedure KayitEkle(const Kisi: TKisi);
var
 Dosya: TextFile;
begin
 AssignFile(Dosya, KayitDosyasiAdi);
 if FileExists(KayitDosyasiAdi) then
   Append(Dosya)
 else
   Rewrite(Dosya);

 writeln(Dosya, Kisi.TCKimlikNo + '|' + Kisi.AdSoyad + '|' + Kisi.DogumTarihi);

 CloseFile(Dosya);
end;

procedure KayitSil(const TCKimlikNo: string);
var
 Dosya: TextFile;
 GeciciDosya: TextFile;
 Satir: string;
begin
 AssignFile(Dosya, KayitDosyasiAdi);
 AssignFile(GeciciDosya, KayitDosyasiAdi + '.tmp');
 Reset(Dosya);
 Rewrite(GeciciDosya);

 while not EOF(Dosya) do
 begin
   ReadLn(Dosya, Satir);
   if Pos(TCKimlikNo, Satir) = 0 then
     writeln(GeciciDosya, Satir);
 end;

 CloseFile(Dosya);
 CloseFile(GeciciDosya);

 DeleteFile(KayitDosyasiAdi);
 RenameFile(KayitDosyasiAdi + '.tmp', KayitDosyasiAdi);
end;

procedure TForm1.KaydetClick(Sender: TObject);

var
 Kisi: TKisi;
begin
 Kisi.TCKimlikNo := edtTCKimlikNo.Text;
 Kisi.AdSoyad := edtAdSoyad.Text;
 Kisi.DogumTarihi := edtDogumTarihi.Text;

 KayitEkle(Kisi);
 ShowMessage('Kayıt eklendi.');
end;


// bul
procedure TForm1.bulClick(Sender: TObject);
var
 Dosya: TextFile;
 Satir: string;
 TCKimlikNo: string;
begin
 TCKimlikNo := edtTCKimlikNo.Text;

 AssignFile(Dosya, KayitDosyasiAdi);
 Reset(Dosya);

 while not EOF(Dosya) do
 begin
   ReadLn(Dosya, Satir);
   if Pos(TCKimlikNo, Satir) > 0 then
   begin
   memoKutuk.Clear;
     memoKutuk.Lines.Add(Satir);
     Break;
   end;
 end;

 CloseFile(Dosya);
end;

procedure TForm1.silClick(Sender: TObject);

var
 TCKimlikNo: string;
begin
 TCKimlikNo := edtTCKimlikNo.Text;
 KayitSil(TCKimlikNo);
 ShowMessage('Kayıt silindi.');
end;

procedure TForm1.DuzenleClick(Sender: TObject);
var
 Dosya: TextFile;
 GeciciDosya: TextFile;
 Satir: string;
 TCKimlikNo: string;
 YeniSatir: string;
begin
 TCKimlikNo := edtTCKimlikNo.Text;
 YeniSatir := TCKimlikNo + '|' + edtAdSoyad.Text + '|' + edtDogumTarihi.Text;

 AssignFile(Dosya, KayitDosyasiAdi);
 AssignFile(GeciciDosya, KayitDosyasiAdi + '.tmp');
 Reset(Dosya);
 Rewrite(GeciciDosya);

 while not EOF(Dosya) do
 begin
   ReadLn(Dosya, Satir);
   if Pos(TCKimlikNo, Satir) > 0 then
     writeln(GeciciDosya, YeniSatir)
   else
     writeln(GeciciDosya, Satir);
 end;

 CloseFile(Dosya);
 CloseFile(GeciciDosya);

 DeleteFile(KayitDosyasiAdi);
 RenameFile(KayitDosyasiAdi + '.tmp', KayitDosyasiAdi);

 ShowMessage('Kayıt düzenlendi.');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
begin
 if FileExists(KayitDosyasiAdi) then
   memoKutuk.Lines.LoadFromFile(KayitDosyasiAdi);
end;


end;


procedure TForm1.ComboBox1Change(Sender: TObject);

begin
button2.Click;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var
 Dosya: TextFile;
 Satir: string;
 ArananAdSoyad: string;
 Kisi: TKisi;
 Found: Boolean;
begin
 ListBox1.Clear;
 ListBox2.Clear;
 memoKutuk.Clear;

 ArananAdSoyad := UpperCase(ComboBox2.Text);

 AssignFile(Dosya, KayitDosyasiAdi);
 Reset(Dosya);

 Found := False;

 while not EOF(Dosya) do
 begin
   ReadLn(Dosya, Satir);
   // Satır ve aranan metini büyük harfe çevirerek karşılaştırma yap
   if Pos(ArananAdSoyad, UpperCase(Satir)) > 0 then
   begin
     Kisi.AdSoyad := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.TCKimlikNo := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.DogumTarihi := Satir;

     ListBox1.Items.Add(Kisi.TCKimlikNo);
     ListBox2.Items.Add(Kisi.AdSoyad);
     memoKutuk.Lines.Add(Satir);

     Found := True;
   end;
 end;

 CloseFile(Dosya);

 if Found then
 begin
   ListBox1.ItemIndex := 0;
   ListBox2.ItemIndex := 0;
   Kisi.TCKimlikNo := ListBox1.Items[0];
   Kisi.AdSoyad := ListBox2.Items[0];
   Kisi.DogumTarihi := memoKutuk.Lines[0];
   edtTCKimlikNo.Text := Kisi.TCKimlikNo;
   edtAdSoyad.Text := Kisi.AdSoyad;
   edtDogumTarihi.Text := Kisi.DogumTarihi;
 end
 else
 begin
   // Eğer veri bulunamazsa edit kutularını temizle
   edtTCKimlikNo.Clear;
   edtAdSoyad.Clear;
   edtDogumTarihi.Clear;

   // ListBox1'e tckimlik ve ListBox2'ye adsoyadları listele
   AssignFile(Dosya, KayitDosyasiAdi);
   Reset(Dosya);

   while not EOF(Dosya) do
   begin
     ReadLn(Dosya, Satir);
     Kisi.TCKimlikNo := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.AdSoyad := Copy(Satir, 1, Pos('|', Satir) - 1);
     ListBox1.Items.Add(Kisi.TCKimlikNo);
     ListBox2.Items.Add(Kisi.AdSoyad);
   end;

   CloseFile(Dosya);
 end;
end;






procedure TForm1.Button1Click(Sender: TObject);
var
 Dosya: TextFile;
 Satir: string;
 Kisi: TKisi;
begin
 ListBox1.Clear;
 ListBox2.Clear;
 memoKutuk.Clear;

 AssignFile(Dosya, KayitDosyasiAdi);

 if FileExists(KayitDosyasiAdi) then
 begin
   Reset(Dosya);

   while not EOF(Dosya) do
   begin
     ReadLn(Dosya, Satir);

     // Satırı parçalayarak TKisi yapısına dönüştür
     Kisi.TCKimlikNo := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.AdSoyad := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.DogumTarihi := Satir;

     // Listbox'lara ekle
     ListBox1.Items.Add(Kisi.TCKimlikNo);
     ListBox2.Items.Add(Kisi.AdSoyad);
     memoKutuk.Lines.Add(Satir);
   end;

   CloseFile(Dosya);
 end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);

begin
combobox1.Text:=listbox1.Items[ListBox1.itemindex];
button2.Click;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Dosya: TextFile;
 Satir: string;
 TCKimlikNo: string;
 Kisi: TKisi;
begin
 ListBox1.Clear;
 ListBox2.Clear;
 memoKutuk.Clear;

 TCKimlikNo := ComboBox1.Text;

 AssignFile(Dosya, KayitDosyasiAdi);
 Reset(Dosya);

 while not EOF(Dosya) do
 begin
   ReadLn(Dosya, Satir);
   if Pos(TCKimlikNo, Satir) > 0 then
   begin
     Kisi.TCKimlikNo := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.AdSoyad := Copy(Satir, 1, Pos('|', Satir) - 1);
     Delete(Satir, 1, Pos('|', Satir));
     Kisi.DogumTarihi := Satir;

     ListBox1.Items.Add(Kisi.TCKimlikNo);
     ListBox2.Items.Add(Kisi.AdSoyad);
     memoKutuk.Lines.Add(Satir);
   end;
 end;

 CloseFile(Dosya);

 if ListBox1.Count > 0 then
 begin
   ListBox1.ItemIndex := 0;
   ListBox2.ItemIndex := 0;
   Kisi.TCKimlikNo := ListBox1.Items[0];
   Kisi.AdSoyad := ListBox2.Items[0];
   Kisi.DogumTarihi := memoKutuk.Lines[0];
   edtTCKimlikNo.Text := Kisi.TCKimlikNo;
   edtAdSoyad.Text := Kisi.AdSoyad;
   edtDogumTarihi.Text := Kisi.DogumTarihi;
 end
 else
 begin
   // Eğer veri bulunamazsa edit kutularını temizle
   edtTCKimlikNo.Clear;
   edtAdSoyad.Clear;
   edtDogumTarihi.Clear;
   memoKutuk.Clear;
 end;
end;

end.
Eğer kendinize özel bir format istiyorsanız, @COMMANDX ve @enigma rastgele erişimli dosya yaklaşımında yeterli örnekleri sunmuşlar. 
Fakat SQL 'in faydalarından yararlanma ihtiyacınız olacaksa SQLite ve Microsoft Access bu durumda düşünülebilir.
SQLite ile uygulamanız yanında veritabanı dosyası ve sqlite kütüphane dosyası olması yeterlidir. Microsoft Access ile sadece veritabanı dosyası yeterlidir. Access için ayrıca bir parantez; Delphi ile hali hazırda gelen ADO kütüphaneleri ile her Delphi sürümü ile bağlantı sağlayabilirsiniz. Her iki veritabanıda kapsamlarına göre başarılıdırlar.
cevaplar icin cok tesekkur ederim arkadaslar.