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

Вниз

проблема с подключением к БД IB   Найти похожие ветки 

 
manevil   (2006-03-31 09:51) [0]

Собственно такая проблема:
Пытаюсь подключиться к БД вот так:
procedure TForm1.FormCreate(Sender: TObject);
var Ini:TiniFile;
begin
 Ini:=TiniFile.Create(extractfilepath(paramstr(0))+"MyIni.ini");
 IBDatabase1.DatabaseName:=(Ini.ReadString("options","DBPath",""));
 //IBDatabase1.Open;
 if IBDatabase1.Connected then
  begin
  Ini.free;
  IBDatabase1.Open;
  IBDatabase1.Connected:=true;
 end
else
 begin
  showmessage("База данных не найдена!");
  Application.CreateForm(TfrAddIBServer, frAddIBServer);
 {здесь вызывается форма, в которой юзер может выбрать путь к базе}
  frAddIBServer.Show;
 end;
end;

При этом получаю такую ошибку, если в .ini не прописан правильный путь: ...exception class EIBClientError "Cannot perform operation -- DB is currently open"


 
manevil   (2006-03-31 09:53) [1]

помогите, плиз!


 
Сергей М. ©   (2006-03-31 10:04) [2]

Для начала в дизайн-тайм в Инспекторе Объектов установи св-во IBDatabase1.Connected = False


 
manevil   (2006-03-31 10:07) [3]

оно итак false стоит


 
Sergey13 ©   (2006-03-31 10:11) [4]

А у тебя нормальный сервер или Embedded?


 
Сергей М. ©   (2006-03-31 10:12) [5]

Тогда изволь уточнить, при выполнении какой конкретно строчки твоего кода возникает исключение.


 
YK ©   (2006-03-31 10:16) [6]

если в .ini не прописан правильный путь --- то тогда у тебя в IBDatabase1.DatabaseName - пустая строчка??? хммм - я бы тоже сглючила


 
Ярослав   (2006-03-31 10:35) [7]

Стандартный пример
место Fib ставишь IBDatabase1
function login (database: TpFIBDatabase; dbpath,uname,upass,urole:string):Boolean ;
  begin
    if database.Connected then database.Connected:=False ;
    with database.ConnectParams do begin

    UserName:=uname;
    Password:=upass ;
    Rolename:=urole ;
    end ;
    database.DBName:=dbpath ;

    try database.Connected:=true ;
     {
    on e: Exception  do showmessage(e.Message);
    }
    except
        end ;

    result :=database.connected ;
  end ;


 
manevil   (2006-03-31 11:01) [8]

мне не нужно постоянно вызывать эту функцию, для этого создается .ini файл, в который при закрытии проги записывается текущее значение пути к базе:
Ini:=TiniFile.Create(extractfilepath(paramstr(0))+"MyIni.ini");
 Ini.WriteString("Options", "DBPath", IBDatabase1.DatabaseName);
 Ini.Free;


 
manevil   (2006-03-31 11:09) [9]

хорошо, пусть в Object Inspector я укажу DatabaseName какой-нить левый, тогда оно работает нормально, но почему-то не хочет сразу открывать базу, вызывает сначала окошко, где юзер должен указать путь к базе, после этого нормально запускается, но при каждом запуске не может найти базу, приходится постоянно указыавть, при этом в .ini файле прописывается правильный путь к базе. Почему оно не берет оттуда путь?


 
yk ©   (2006-03-31 12:01) [10]

IBDatabase1.DatabaseName:=(Ini.ReadString("options","DBPath",IBDatabase1.Databas eName));

???


 
manevil   (2006-03-31 12:07) [11]

да, отсюда берется путь к базе, в .ini файле он правильный, но вот почему-то оттуда сразу не берет его :(


 
manevil   (2006-03-31 12:10) [12]

э-э, sorry, так тоже не работает :(


 
Сергей М. ©   (2006-03-31 12:37) [13]


> manevil   (31.03.06 12:10) [12]


Ответь на вопрос в [5].
Без этого дальнейшие рассуждения по твоей теме бессмысленны.


 
manevil   (2006-03-31 12:44) [14]

Если забить в Object Inspector какой-нить DatabaseName, тогда такой ошибки не возникает, а если не забивать, то... хм, ща тож не возникает, но из .ini файла она не берет путь к базе почему-то :(


 
Сергей М. ©   (2006-03-31 13:09) [15]


> manevil   (31.03.06 12:44) [14]


Ты русский язык вообще понимаешь ?

Тебе был задан простейший вопрос - какой конкретно оператор в теле приведенного тобой обработчика события OnCreate вызывает исключение ?

Что тут гадать-мудрить-то - "Если забить", "Если заколотить", "берет", "не берет" ?

Ставь брейкпойнт на первую строчку обработчика, лови его, проходи пошагово и выяви ту самую строчку ! А потом уж и разговор более предметным будет)

Неужто все это так страшно сложно ?


 
manevil   (2006-03-31 13:26) [16]

еще раз говорю - ошибки такой щас нету! нужно, чтобы он из .ini файла брал путь к базе!


 
Сергей М. ©   (2006-03-31 13:34) [17]


> ошибки такой щас нету!


Ну так восстанови те самые начальные условия, при которых она устойчиво возникала !

В чем проблема-то ?


 
Annen ©   (2006-03-31 14:05) [18]

manevil
Просто в Object Inspector в  DatabaseName удали запись до запуска проэкта  тогда коннект стане фалсе ивсе запустится сам проверял работает
П.С. а потом подключаешся с ини в FormCreate


 
manevil   (2006-03-31 14:51) [19]

так и делаю, ну, не берет он из .ini файла путь!!!


 
Сокол ©   (2006-03-31 15:30) [20]

Ты пишешь вот это:
 IBDatabase1.Open;
 IBDatabase1.Connected:=true;
,тогда не удивительно, что у тебя такая ошибка вылезает.
Строкой   IBDatabase1.Open; еы открываешь соединение с БД,
а следующей строкой IBDatabase1.Connected:=true, - ты делаешь то же самое, но только другим способом, вот и все.


 
manevil   (2006-03-31 16:03) [21]

ладно, спасибо всем за помощь
только проблема была в передаче параметров:имя и пароль


 
Сергей М. ©   (2006-03-31 16:36) [22]


> проблема была в передаче параметров:имя и пароль


Врешь ведь)


> Cannot perform operation -- DB is currently open


Твоя цитата ?

Переводится она как "Не могу произвести операцию - БД в настоящее время открыта".

Явно имеется ввиду попытка открытия тобой уже открытой на этот момент БД.



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

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

Наверх




Память: 0.51 MB
Время: 0.041 c
2-1146411533
Yo-yo
2006-04-30 19:38
2006.05.21
TadvMemo


15-1146022327
Vitaliy
2006-04-26 07:32
2006.05.21
TTryIcon


2-1146846130
Melifaro
2006-05-05 20:22
2006.05.21
StringGrid, GridDrawCell


8-1134806433
Kot Andrei
2005-12-17 11:00
2006.05.21
"Упрощение" цветов на фотографии


3-1143087512
АндрейК
2006-03-23 07:18
2006.05.21
SQLServer 2000 на win2000Server и win2003Server