Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Как записать путь к БД в *.ini(Interbase)   Найти похожие ветки 

 
User_0   (2007-10-03 12:47) [0]

Возникла проблема запуска моей СУБД на чужом компьютере. Проблему можно решить с помощью .ini файла.
но я незнаю как это делается(, юзал гугл, ничего толкового ненашел, кроме как создать инишку(записать, считать данные), но это я умею делать, а вот получить путь к БД я незнаю как. Пытался делать так:

ini := tinifile.Create(ExtractFilePath(Application.ExeName)+"set.ini");
s := ini.ReadString("CFG","PATH",IBDatabase1.Database);

Может кто сталкивался с подобной проблемой прошу помочь.


 
Elen ©   (2007-10-03 12:49) [1]

А что записалось в s ?


 
Washington ©   (2007-10-03 12:57) [2]

А БД где лежит? У меня такая ситуация была - я просто закинул БД в папку с Виндой.


 
User_0   (2007-10-03 13:11) [3]

>> А что записалось в s ?

ничего, происходила ошибка

>> У меня такая ситуация была - я просто закинул БД в папку с Виндой.

В System32? И что? норм работала прога? InterBase?


 
{RASkov} ©   (2007-10-03 13:12) [4]

> [2] Washington ©   (03.10.07 12:57)
> я просто закинул БД в папку с Виндой

Вот ну ни как не нужно на такой совет намекать...


 
{RASkov} ©   (2007-10-03 13:14) [5]

> [3] User_0   (03.10.07 13:11)
> ничего, происходила ошибка

Что за ошибка?


 
Washington ©   (2007-10-03 13:14) [6]

Извиняюсь, не InterBase. Что-то не обратил внимание :( У меня Access"овская база.


 
User_0   (2007-10-03 13:54) [7]

public
 ini,s:TIniFile;


ini := tinifile.Create(ExtractFilePath(Application.ExeName)+"set.ini");
s := ini.WriteString("CFG","PATH",DM2.IBDatabase1.DatabaseName);


ошибка такая:

[Error] UMain.pas(97): Incompatible types: "TIniFile" and "procedure, untyped pointer or untyped parameter"


 
{RASkov} ©   (2007-10-03 14:32) [8]

> [7] User_0   (03.10.07 13:54)
> ini,s:TIniFile;

public
ini :TIniFile;
s: String;
это раз.
два:

> s := ini.WriteString("CFG", "PATH", DM2.IBDatabase1.DatabaseName);

Так читают, а не пишут....


 
Anatoly Podgoretsky ©   (2007-10-03 14:45) [9]

> User_0  (03.10.2007 13:54:07)  [7]

Как ты собираешься записать строку в объект типа TIniFile, они же полностью несовместимы.


 
User_0   (2007-10-03 15:15) [10]

> Так читают, а не пишут....

наоборот


 
User_0   (2007-10-03 15:19) [11]

>> s: String;
это раз.

хм...

[Error] UMain.pas(98): Incompatible types: "String" and "procedure, untyped pointer or untyped parameter"


>> Как ты собираешься записать строку в объект типа TIniFile, они же полностью несовместимы.

да ошибся я печатая)


 
korneley ©   (2007-10-03 15:25) [12]

А я всегда считал, что TIniFile.WriteString() это вообще процедура, и ничего возвращать она не должна, в отличие от ReadString()


 
User_0   (2007-10-03 15:27) [13]

> TIniFile.WriteString()

это тут причем?


 
Плохиш ©   (2007-10-03 15:28) [14]


> User_0   (03.10.07 15:27) [13]

[7] ты написал или пушкин?


 
korneley ©   (2007-10-03 15:29) [15]


> > TIniFile.WriteString()это тут причем?
Тут у User_0 два примера и оба разные: в одном он читает, а вдругом как-то странно пытается писАть


 
User_0   (2007-10-03 15:31) [16]

tinifile.Create [7]

TIniFile.WriteString()
[12]

есть разница?


 
User_0   (2007-10-03 15:32) [17]

> Тут у User_0 два примера и оба разные: в одном он читает, а вдругом как-то странно пытается писАть

сори, я просто ошибся((


 
korneley ©   (2007-10-03 15:34) [18]


>  [16]
В одном случае ты создаешь экземпляр объекта, а во втором, типа, метод вызываешь :) Только в твоем случае ini.writeString()


 
User_0   (2007-10-03 15:38) [19]

ладно, вернемся к нашим баранам))):

Ну вот как получить полный путь к базе и записать в инишку?


 
korneley ©   (2007-10-03 15:39) [20]

А вообще для того, чтобы что-то прочитать из ini, надо туда сначала что-то написАть. Хотя бы ручками в блокноте. и потом уже
ini := tinifile.Create(ExtractFilePath(Application.ExeName)+"set.ini");
try
 IBDatabase1.Database := ini.ReadString("CFG","PATH",IBDatabase1.Database);
finally
 ini.Free;
end;


 
User_0   (2007-10-03 15:49) [21]

> А вообще для того, чтобы что-то прочитать из ini, надо туда сначала что-то написАть.

во....ты меня натолкнул на еще одну проблему)))

допустим, я переношу свою программу на другой компьютер, в ини файле уже будет записан путь к базе(естественно устаревший, т.е. который указывал бы путь к БД на моей машине).


 
korneley ©   (2007-10-03 15:54) [22]


> Ну вот как получить полный путь к базе и записать в инишку?
1)Путем просмотра пути в проводнике и записи его (пути) в твой set.ini, лежащий там же, где и твой exe, приложением "Notepad".
2)В твоем приложении выбрать путь к файлу БД и запуздырить его программно

ini := tinifile.Create(ExtractFilePath(Application.ExeName)+"set.ini");
try
ini.WriteString("CFG","PATH", DatabasePath);
finally
ini.Free;
end;


 
korneley ©   (2007-10-03 15:58) [23]


>  в ини файле уже будет записан путь к базе(естественно устаревший
Ну, дык, для этого настройки программы и существуют. Чтобы там всякие пути и прочие параметры помнить. Можно даже в ini, или вааще в реестре 8-)


 
User_0   (2007-10-03 16:13) [24]

может у кого есть какой пример?


 
Плохиш ©   (2007-10-03 16:32) [25]


> User_0   (03.10.07 16:13) [24]
> может у кого есть какой пример?

Ну наконец-то, а то всё мозги компосировал...
Пример - 1000 Евро
Разъяснение работы - 5000 Евро
Предоплата.


 
User_0   (2007-10-03 16:42) [26]

Ну ты ЖИИИИИДДДД!!!!! =) (фу таким быть))))
В общем это делается вот так(причем бесплатно)

procedure openBD;
var
 FP:TextFile;
 StringPath:string;
 NameOfFile:string;
begin
 // получаю путь из файла settings.ini
 NameOfFile:=ExtractFileDir(Application.ExeName)+"\settings.ini";
 // если файлик есть, то связываюсь с ним, если нет то сообщ.об ошибке
 if FileExists(NameOfFile) then
   begin
      Assign(FP,NameOfFile);
       try
        begin
          reset(FP);
          Read(FP,StringPath);
        end;
       finally
         closeFile(FP);
       end;
   end
 else
   begin
      ShowMessage("Файл пути к БД не найден"+
                   #13+
                   "создайте в папке программы файл settins.ini"+
                   #13+
                   "и запишите туда путь к БД");
      application.Terminate;
   end;
  // задаю БД для компонента  IBDatabase
  DM2.IBDatabase1.DatabaseName:=StringPath;
  // щас откроем базу и компонент транзакции
  with DM2 do
     begin
       IBDataBase1.Connected:=true;
       IBTransaction1.Active:=true;
     end;
end;



 
User_0   (2007-10-03 16:44) [27]

аааа, чуть не забыл! потом  переходим в датамодуль и в событии OnCreate прописываем:

OpenBD;

+ незабываем подключить тот модуль, в котором мы писали саму процедурку. Вот и все дела....все просто как дважды два))


 
korneley ©   (2007-10-03 16:53) [28]


> [26]
А каким боком тут TIniFile? Нет, конечно данные можно хранить как кому угодно, но тогда при чем здесь сабж?


 
korneley ©   (2007-10-03 16:55) [29]

А!!! Понял!!! Главное, чтобы расширение .ini было!!! А читать/писать и через FileStream можно :)


 
Anatoly Podgoretsky ©   (2007-10-03 17:04) [30]


> User_0   (03.10.07 15:15) [10]

Еще хуже, процедуры не возврашают значений


 
Anatoly Podgoretsky ©   (2007-10-03 17:07) [31]

> User_0  (03.10.2007 16:42:26)  [26]

Ужас


 
User_0   (2007-10-03 17:41) [32]

>> А!!! Понял!!! Главное, чтобы расширение .ini было!!!

это так.....для "серьезности"=)))))))))))))))))

> Еще хуже, процедуры не возврашают значений

ну так юзай функции))



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.021 c
4-1177402203
Malik
2007-04-24 12:10
2007.10.28
ChekedBox


1-1187058023
rtm
2007-08-14 06:20
2007.10.28
Как расположить Label вертикально?


1-1186031887
Раф
2007-08-02 09:18
2007.10.28
Как в чужом приложение на MessageDlg нажать Да


2-1191850673
webpauk
2007-10-08 17:37
2007.10.28
Преобразование типов


1-1187187516
AndrewK
2007-08-15 18:18
2007.10.28
Отступ в Мемо