Delphi 5.0 Открытие соединения Interbase / FireBird через код

Это старая штука! Относится к delphi 5.0 и interbase 1.6.

Я пытаюсь открыть соединение с БД с помощью кода. Но этот код связан с включением соединения, все компоненты были добавлены с использованием пользовательского интерфейса перетаскивания delphi: DataSource1, TForm1, DBGrid, DBNavigator и т. Д.

procedure TDataModule2.DataModuleCreate(Sender: TObject); 
begin 
  database.DatabaseName:='C:\MyDatabase.GDB'; 
  database.Connected := true; 
  database.Open; 
  IBTransaction.Active := true; 

  myTable.Open; 
end;

У меня есть TForm с компонентом DBGrid и DBNavigator. У меня также есть TIBQuery (с которым связан DataSource1) с этим кодом в SQLStrings:

SELECT * FROM NEW_TABLE

В форме у меня есть этот код, позволяющий DBNavigator и DBGrid отображать значения БД. БД очень проста, это просто таблица: NEW_TABLE с NEW_VALUE типа VARCHAR

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  DataSource1.DataSet.Open;
  // This will call the query associated to this DataSource1 the tibQuery1 to call
  // SELECT * FROM NEW_TABLE, but the message below appears: IBClientError...
end; 

Появляется сообщение: IBClientError с сообщением «База данных не назначена».

OBS1: если я подключу компоненты вручную через пользовательский интерфейс delphi, соединение с БД будет установлено.


person okami    schedule 17.11.2010    source источник
comment
Вы создали экземпляр TDataModule2?   -  person Jens Mühlenhoff    schedule 17.11.2010
comment
да, я изменю описание, TDataModule2 разработан не по источнику, а с пользовательским интерфейсом delphi, все компоненты были помещены с помощью интерфейса перетаскивания delphi: DataSource1, TForm1, DBGrid, DBNavigator и т. д.   -  person okami    schedule 17.11.2010
comment
Я изменил код, назвал DataSource1.DataSet.Open; появляется ошибка IBClientError с сообщением «База данных не назначена»   -  person okami    schedule 17.11.2010


Ответы (1)


Вам необходимо назначить свойство Database вашего запроса, например:

IBQuery1.Database := MyDatabase;
person Ondrej Kelle    schedule 17.11.2010
comment
Он установлен на: DataModule2.database, Database Я думаю, что это очень специфично, как псевдоним BDE, что-то в этом роде ... Я ищу его. - person okami; 17.11.2010
comment
Я считаю, что если бы он был установлен, вы бы не получили ошибку, проверьте еще раз. Также проверьте транзакцию, BTW. - person Ondrej Kelle; 17.11.2010
comment
Получаете ли вы ту же ошибку, если открываете запрос во время разработки (присвоив true свойству Active)? Вам следует дважды проверить назначение базы данных (возможно, оно потеряно во время выполнения), потому что единственное место и ситуация, когда возникает ошибка с этим сообщением, находится в TIBCustomDataSet.ActivateConnection, если свойство Database равно нулю. - person jachguate; 17.11.2010