projerin vt yolunu text ten okutma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

projerin vt yolunu text ten okutma

Mesaj gönderen bobasturk »

Merhaba arkadaşlar,

Hazırlayıp kullandığım projeyi setup hale getirmek istiyorum. çünkü başka bir yerdeki arkadaşlar da aynı projeyi kullanıyor ve konuyu pek bilmediklerinden bilgisayarlarında oluşan sorunlarda (formatlama gibi) projenin kurulumunda zorluk çekiyoruz. o yüzden setup haline getirip hem kendimi hemde onları sıkıntıdan kurtarmak istiyorum.

kullandığım veritabanı fb/ib, delphi7 ent.

konularda geçiyor database yolunu text dosyasından okutmak bölelikle hangi sürücüye koyacağı fark etmez text dosyasında sürücü adını değiştirmek yeterli diye fakat :ara yaptığımda pek bulamadım, şunu buldum

Kod: Tümünü seç

 if Database1.Connected = True then
Database1.Close;
Database1.DatabaseName := ExtractFilePath(Application.Exename) + 'Data';
acaba yardımcı olabilirmisiniz bu dbasename yolunu nasıl text dosyasından okutarak bu işi başarabilirim.

yukadıraki kod gibi ise nereye yazmalıyım.

teşekkür ve saygılarla
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Re: projerin vt yolunu text ten okutma

Mesaj gönderen mege »

olc yazdı:

Kod: Tümünü seç

 if Database1.Connected = True then
Database1.Close;
Database1.DatabaseName := ExtractFilePath(Application.Exename) + 'Data';
olayı çözmüşsün zaten :)
kodda application path yerine text dosyadan okuyacak bi fonksiyon yaz

Kod: Tümünü seç

 if Database1.Connected = True then
Database1.Close;
Database1.DatabaseName := GETirBenimDatabasePathimi + 'Data';
bundan sonrası sana kalmış. direk dosyayı okumak istersen
:ara loadfromfile
:ara readln

:ara tstringlist

Kod: Tümünü seç

function GETirBenimDatabasePathimi:String;
var MyList:TstringList;
begin
  MyList :=TStringList.Create;
  try
     MyList.loadfromfile('ADTABASEPATHINITUTANDOSYA.xxx');
     REsult:= mylist[1];   
  finally
        MyList.Free;
  end; 
end;
yok bunu ini dosyasından okuyacaksan (ki bu daha kolay ;) )
:ara TINIFile
:ara WriteString

@mrpcop dan makale tadında bir yazı :) viewtopic.php?p=6308#6308
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

mege ustam,

bu saatte üşenmeyip cevap yazdığın için teşekkürler ve arama kriterlerini muhakkak araştırıp deneyeceğim.

burada kodu nasıl yazacağımı ve nereye yazacağımı bilemedim function olarak belirtmişsin ve ben daha function yazmayı bilmediğimden takıldım. admin ustanın dediğini acaba afterconnection kısmına mı yazacağım diye düşünmüştüm ibdatabase nin eventinde

teşekkür ederim
kolay gelsin
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustam verdiğin arama kriterlerini ve örnekleri inceledim fakat kafam karıştı desem olur heralde,

burada biliyorsunuz ki exe her sürücüde çalışıyor formları aktif hale getireceğinde bağlı olan tablonun yolunu bulamazsa açamıyor ve database bulunamadı şeklinde hata veriyor. Şöle düşündün (nacizane), formlarımda ibdataseti aktif hale getiren butonlarım var bu butonun clik yordamına öncelikle database yolunu text dosyasından okuyumasını ve daha sonra ibdataseti aktif hale getirmesini yazabilirmiyim.

text dosyasını kullanmak istiyorum nedeni ise program yeni kurulduğu zaman text dosyasından yolunu değiştirebilmek. text dosyasını manuel açıp buradaki sürücü harfini değiştirmek. kullanıcı için kolay olacak gibi geliyor bana ini dosyasında bu mümkünmü bilmiyorum.

saygılarımla kolay gelsin.
Misafir

Mesaj gönderen Misafir »

exe'nin bulunduğu dizinde database.txt diye bir text dosya koy. ilk satırına database dosyasının yolunu yaz mesela

c:\proje\data\data.gdb


Kod: Tümünü seç

var f:textfile;s:string
begin
assignfile(f,'database.txt');
reset(f);
readln(f,s);
closefile(f);
database1.databasename:=s;
end;
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

Hocam bu iş için ben INI dosyaları kullamıyorum gayet basit ve kullanışlı oluyor...

Programınıza Ayarlar diye bir kısımdan data yolunu ayarla diye bir yer yaparsınız..

Forumda aratırsanız INI File kullanımı ilgili çok güzel örnekler mevcut..
;)
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustalarım merhaba,

tavsiyelerinizi uygulamaya ve öğrenmeye çalışacağım. Mikracu ustam acemiliğime ver. burada kafamın şarz ettiği kadarı ile program içinde geçen dizinden ayrı bi sürücüde kurulduğunda database erişilemedi hası verdiğinden dolayı bu verdiğin komutu formun oncreate olayına yazacağımı anlıyorum çünkü form açıldığında databasın yolunu bulamayacağından hata verecek hata vermemesi için de form oluşuturulurken text dosyasından database yolunu okumasını sağlamamız gerektiğini anlıyorum. doğrumu düşünüyorum ustam sizce

teşekkürler kolay gelsin.
ercere
Üye
Mesajlar: 48
Kayıt: 23 Kas 2004 02:38
Konum: Ulus-BARTIN

Mesaj gönderen ercere »

Merhaba Orc
son mesajınızdaki gibi çalışmak isterseniz formun oncreate olayında
önce text dosyayı okutun.(hangi vt kullandığınızı bilmiyorum ama)
texte verilen yolda database varmı baktırırsınız varsa login olursunuz yoksa aranan database (yada dosya) yolunun doğru olamdığını bildirir mesaj verip ya yenisini yaratırsınız yada yeni yol tanıtımı istersiniz.
Dosyadan okuttuğun databese adını asağıdaki gibi kontrol edersiniz.

Kod: Tümünü seç

if not fileexists(senindatabasein) then begin
  showmessage('Aranılan Database yok.');
  //** yeni database yaratabilirsin.
   end else
   begin
   // ??Databese aç login ol
   end;
Kolay Gelsin.
Bilginin sınırı öğrenmenin yaşı yoktur.
Misafir

Mesaj gönderen Misafir »

kodu nereye yazdığın farketmez. sadece adı geçen text dosya programın exe sinin çalıştığı klasörde olsun yeter. ister oncreate ister butonun onclick eventine yaz kodu. bide text dosyanın içindeki data nın adresi doğru yazılmış olsun. ercere nin dediği gibi istersen dosya var mı yok mu kontrol et ona göre işlemleri ni yap.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustalarım yardımlarınızdan dolayı teşekkür ederim.

asıl işimin beni yormasından dolayı fazla uğraşamadım, ilk cevapları aldığımda mikrocu ustamın verdiği öneriyi formun oncreate olayında yapmak istedim ama yine dosyayı bulamadığını belirterek prg çalıştırmadı, bu işlemi projenin view source sinde begin den önce yazmayı düşündüm vaz geçtim. ama şimdi şu satırları yazarken aklıma geldi heralde hatam şurda olabilir. ben bi formu açarken bu ana menu formu bunun oncreate kısmına tüm database ler için text ti oku dedim belki orada yanlışlık yapmışımdır bide şimdi formları ayrı ayrı açılırken deniycem

teşekkür ve saygılarımla
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Programına bir splash form oluştur ve veritabanı bağlanma işini burada yaptır. hatta splash program açılmadan önce yaptıracağın başka işlemlerinde varsa formuna progressbar koyarsın ve işlemleri yaptırdıkca barı ilerletirsin... Konudan biraz koptu ama fikir olsun diyerek yazdım.

Ben eğer genelde bu işlemi kullanıcı adı ve şifresi sorduruyorsam o formda eğer şifre sordurmuyorsam splash formda veritabanı bağlantı işlemlerini hallediyorum..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhabalar,

bu işi beceremedim. projemin exe sinin çalıştığı yere txt dosyası oluşturup oraya vt nin yolunu tam yazıp kapatıyorum ve delphi tarafında formların oncreate olayına verilen kodları uyarlıyarak yazıyorum ve run ettiğimde I/O ......formların databasename sinde yazılı yolu gösteren ve dosyanın bulunamadığını belirten mesaj alıyorum.

formlarda ibdatabase, transaction ve ibdataset kullanıyorum ve form açıldığında ibdataset active oluyor kapandığında false oluyor du.

yani anlıyacağınız databasename sini txt den okutamadım. önceden databasename adresini okuyor ve deneme amaçlı projeyi başka sürücüye koyduğumdanda yolu bulamadığına dair hata veriyor. hani hata mesajında benim txt dosyasına yazdığımı bulamadığını belirtse neyse ama önceki yolu bulamadığını belirtioyor yani benim txt yi hiç kale almıyor.

aslında ayarlar diye bi form oluşturmak ve db oluşturmak iyi bi fikir ve uygulamak istiyorum ama buradan okutmayı bi türlü beceremiyorum. ibdatabase nin ismini verirken (yolunu), böyle bi uygulamada boş bırakıp kodla yolu almasını mı sağlamalıyız terledim haa :lol:

kolay gelsin.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Hocam basit bir örnek yaptım fazla acıklama yapmıyacam herhalde gerek kalmaz

Kod: Tümünü seç

unit Unit2;

interface

uses
  Windows, Forms, Classes, SysUtils, Dialogs, Controls, StdCtrls, IniFiles, Mask, JvToolEdit;
type
  TForm_Ayarlar = class(TForm)
    JvFilenameEdit1: TJvFilenameEdit;
    Button_Kaydet: TButton;
    Button_Oku: TButton;
    Edit1: TEdit;
    procedure Button_KaydetClick(Sender: TObject);
    procedure Button_OkuClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Ini_Kaydet;
    procedure Ini_Oku;
  end;

var
  Form_Ayarlar: TForm_Ayarlar;
  IniFile: TiniFile;
  IniName: string = 'Ayarlar.ini';
  IniPath: string;
implementation

{$R *.dfm}

procedure TForm_Ayarlar.Ini_Kaydet;
begin
  IniPath := ExtractFilePath(Application.Exename) + IniName;
  //secilen dosya belkide yoktur bakalım varmı?
  if fileexists(JvFilenameEdit1.FileName) then begin
      try
        IniFile := TIniFile.Create(IniPath);
        IniFile.WriteString('DB_Ayarlar', 'DatabaseName', JvFilenameEdit1.FileName);
        Caption := JvFilenameEdit1.FileName; //baslıkta göster
      finally
        IniFile.Free;
      end; end
  else
  //dosya yok ise
    ShowMessage('Database(dosya) Bulunamadı'
      + #13
      + 'Yol :' + JvFilenameEdit1.FileName
      + #13
      + 'Lütfen tekrar deneyin.');
end;

procedure TForm_Ayarlar.Ini_Oku;
begin
  IniPath := ExtractFilePath(Application.Exename) + IniName;
  try
    IniFile := TIniFile.Create(IniPath);
    //Edit1 de göster
    Edit1.Clear;
    Edit1.Text := IniFile.ReadString('DB_Ayarlar', 'DatabaseName', JvFilenameEdit1.FileName);
  finally
    IniFile.Free;
  end;
end;

procedure TForm_Ayarlar.Button_OkuClick(Sender: TObject);
begin
  Ini_Oku;
end;

procedure TForm_Ayarlar.Button_KaydetClick(Sender: TObject);
begin
  Ini_Kaydet;
  Ini_Oku;
end;
end.
..........
jv componenti yüklü olması gerekir (JvFilenameEdit1: TJvFilenameEdit)
bu component sart degil ama hali hazır da o vardı.
Umarım iş göröür sevgiler.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

abdulkadir ustam,

bakıyorumda seni baya zahmete sokmuşum, özür dileyerek ekliyorum teşekkürler.

burada jvtooledit olarak sanıyorum bi compenent bu bende yok bunun yerine normal bi edit olur zannediyorum. berdiğin örneği uygulayacağım çok ama çok teşekkür ederim.

kolay gelsin
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

hocam örnek teşkil etsin diye yazdım
OpenDialog da kullanabilirsin
OpenDialog1: TOpenDialog;

Kod: Tümünü seç

procedure TForm_Ayarlar.Ini_Kaydet;
begin
  IniPath := ExtractFilePath(Application.Exename) + IniName;
  if OpenDialog1.Execute then begin
      try
        IniFile := TIniFile.Create(IniPath);
        IniFile.WriteString('DB_Ayarlar', 'DatabaseName', OpenDialog1.FileName);
        Caption :=OpenDialog1.FileName; //baslıkta göster
      finally
        IniFile.Free;
      end;
    end;
end;
Cevapla