.ini dosyası ile taşınabilir proje (Yardım)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Macrohard
Üye
Mesajlar: 6
Kayıt: 21 May 2015 12:44

.ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen Macrohard »

Öncelikle herkese merhaba. Konuyu açmadan önce forumda küçük çaplı bir araştırma yaptım keza tam olarak aradığım şeyi bulamadım.

Şöyleki;

Ben ödev olarak otogaleri programı geliştirmeye çalışıyorum. Veritabanı olarak access kullanıyorum.
ADOConnection da connection string de database.mdb dosyasının yolunu belirterek projem üzerinde çalıştım. Şuan ki sorunum veri tabanını taşınabilir hale getirmek. İstediğim şey .ini dosyası oluşturarak program açıldığında veritabanını .exe nin olduğu yerde arasın istiyorum. Böylece başka bilgisayara proje klasörünü taşıdığımda sorunsuz olarak çalışacaktır. (sanırım). Derste görmüştüm keza hatırlayamıyorum bir türlü :( Yardım edebilirseniz çok sevinirim, şimdiden teşekkürler.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen brs »

SQLite database oluşturur istersen access olarak düzenleye bilirsin...

Kod: Tümünü seç

procedure TForm1.DataKontrolOlustur(Sender: TObject);
var
  StrDataYol: String;
  StrDatabase: String;
begin
  try
    StrDataYol := 'C:\DB';
    // StrDataYol := ExtractFilePath(Application.Exename) + 'DB\';
    if Not DirectoryExists(StrDataYol) then
      ForceDirectories(StrDataYol);

    // StrDatabase := ExtractFilePath(Application.Exename) + '\DB\Database.db';
    StrDatabase := 'C:\DB\Database.db';
    begin
      with FDConnection do
      begin
        Connected := False;
        LoginPrompt := False;
        params.Clear;
        params.Values['Database'] := StrDatabase;
        params.Values['DriverID'] := 'SQLite';
        params.Values['CharacterSet'] := 'utf8';
        Connected := True;
      end;

      with Playlist do
      begin
        Active := False;
        Connection := FDConnection;
        Close;
        SQL.Clear;
        SQL.Add('CREATE TABLE IF NOT EXISTS PLAYLIST(');
        SQL.Add('ID INTEGER PRIMARY KEY AUTOINCREMENT');
        SQL.Add(', SIRANO INTEGER');
        SQL.Add(', START VARCHAR(255)');
        SQL.Add(', ADI VARCHAR(255)');
        SQL.Add(' ) ; ');
        ExecSQL;
        end;
      end;
    end;
  except
  end;
end;

Kod: Tümünü seç

procedure TForm1.FormShow(Sender: TObject);
begin
  try
    DataKontrolOlustur(Sender);
  except
  end;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen esistem »

Selam,
Ben sürekli aşağıdaki kodu kullanırım, seninde işine yarar.

Kod: Tümünü seç

function ExeKlasor: String;
begin
  Result:= ExtractFilePath(Application.ExeName);
  if Result[Length(Result)] <> '\' then Result:= Result + '\';
end;
Kullanımı,

Kod: Tümünü seç

var
dataadi:string;
begin
dataadi:=ExeKlasor+'DATA/veritabanı adı';
IF FileExists(dataadi) THEN BEGIN
//veritabanı bağlantı işlemleri
END ELSE BEGIN
ShowMessage('Veritabanı Bulunamadı...');
END;
end;
Macrohard
Üye
Mesajlar: 6
Kayıt: 21 May 2015 12:44

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen Macrohard »

Tam olarak nasıl yapıcam anlamadım?
Daha yeniyim ini dosyasında ne yazıcam onu dahi bilmiyorum.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen brs »

Benden selam yazabilirsin.

Kusura bakma aklından geçenleri buradan okumam zor oluyor tam olarak ne yapmak istediğiniz yazarsan emin ol bir çok kişi sana yardımcı olacaktır...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Macrohard
Üye
Mesajlar: 6
Kayıt: 21 May 2015 12:44

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen Macrohard »

ilk post u kopyalamama gerek yok sanırım ? Bu şekilde bir yöntem var. Bir tane ini dosyası oluşturup içene öğrenmek istediğim -kodları- (program açıldığında database'i exe nin olduğu yerde arasın. 'Application.ExeName' geçen bir kod olması gerekiyor.) yazıyoruz, ADOconnection1 ide (nasıl yapıldığını bilmiyorum) o ini dosyasıyla ilişkilendiriyoruz ve projenin klasörünü istediğimiz gibi taşıma şansımız oluyor. Çünkü ADOconnection da connection string yerine ini dosyası ile exenin olduğu yerde arattık. Tam olarak yapmak istediğim bu.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen mrmarman »

Bu anlattığın kadarıyla bir INI dosyasına ihtiyacın yok, @esistem güzelce açıklayan bir kod örneği vermiş onu uygulayacaksınız.

Kullanacağın veritabanı hangisi olursa olsun forumda buna ilişkin bir çok örnek mevcut.
- exe projenin bulunduğu klasör için : ExtractFilePath(Application.Exename)
- veritabanı dosyası var mı sorusunun yanıtı için : FileExists( )
- veritabanı yoksa create etmek için veritabanı ne kullanacaksan ondaki Catalog Create işlemi ve Table Create işlemleri
- bağlantı için ConnectionString

gibi konular üzerinden birer birer geçmen gerekecek. Uzunca bir yolun var, başarılar.
Resim
Resim ....Resim
Macrohard
Üye
Mesajlar: 6
Kayıt: 21 May 2015 12:44

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen Macrohard »

İlgilendiğiniz için hepinize teşekkürler. Söylediklerinizi deneyeceğim. Umarım yapabilirim.
Macrohard
Üye
Mesajlar: 6
Kayıt: 21 May 2015 12:44

Re: .ini dosyası ile taşınabilir proje (Yardım)

Mesaj gönderen Macrohard »

Evet söylediğinizde haklıymışsınız ini dosyası kullanmaya gerek yokmuş. ..ki hocamız kullanmıştı ama sanırım ini değildi, txt dosyasının içine adoconnection1 in parametrelerini yazmıştı ve

Kod: Tümünü seç

FDConnection1.Params.LoadFromFile( ExtractFilePath(Application.ExeName) + 'db.txt');
ile parametreleri çekiyodu.

Benim istediğim tam olarak buydu, konuya göz atan arkadaşların belki işine yarayabilir.

Kod: Tümünü seç

procedure TfrmDm.FormCreate(Sender: TObject);
const
  ConStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False';

var
  db: string;
begin
  ADOConnection1.Connected := False;
  db := ExtractFilePath(Application.Exename) + 'otogaleri.mdb';
  adoconnection1.ConnectionString := Format(ConStr, [db]);
  ADOConnection1.Connected := True;

  tbMusteriler.Open();
  tbMarkalar.Open();
  tbModeller.Open();
  tbAracislem.Open();
  tbKategoriler.Open();
  tbYakit.Open();

  tbMarkalarLookup.Open();
  tbModellerLookup.Open();

end;
İlgilenen arkadaşların yardımları için çok teşekkür ederim :)
Cevapla