![]() |
|
COZULDU veritabani prg yerine ne kullanabilirim. - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: COZULDU veritabani prg yerine ne kullanabilirim. (/showthread.php?tid=7565) |
COZULDU veritabani prg yerine ne kullanabilirim. - sadikacar60 - 21-01-2024 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. veritabani prg yerine ne kullanabilirim. - nguzeller - 21-01-2024 sqllite işini görebilir bir DLL ve db dosyası çalışabilir. Cvp: veritabani prg yerine ne kullanabilirim. - sadikacar60 - 21-01-2024 (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 veritabani prg yerine ne kullanabilirim. - enigma - 21-01-2024 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; veritabani prg yerine ne kullanabilirim. - mcuyan - 21-01-2024 firebird un embedded versiyonuda var hocam veritabani prg yerine ne kullanabilirim. - frmman - 22-01-2024 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. veritabani prg yerine ne kullanabilirim. - COMMANDX - 22-01-2024 Şö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.
Cvp: veritabani prg yerine ne kullanabilirim. - delphi.developer - 22-01-2024 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. COZULDU veritabani prg yerine ne kullanabilirim. - sadikacar60 - 29-01-2024 cevaplar icin cok tesekkur ederim arkadaslar. |