Вопрос по работе с TDataSet

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Вопрос по работе с TDataSet

Сообщение bloodlines » 11.11.2009 09:31:40

Код: Выделить всё
var
  ds:TDataSet;
  i:integer;
begin

  try
  ds:=TDataSet.Create(owner);

  ds.FieldDefs.Add('Test1', ftString, 20);
  ds.FieldDefs.Add('Test2', ftString, 10);

  ds.Active:=true;

  for i:=1 to 10 do
  begin
   ds.Append;
   ds.Fields.Fields[0].Value:=IntToStr(i);
   ds.Fields.Fields[1].Value:=IntToStr(i+10);
  end;

  ds.Open;

  finally
  ds.Free;
  end;

end;       


Когда выполнение программы доходит до
Код: Выделить всё
ds.Active:=true;
вылетает ошибка "Run Error (211)". Если эту строку закомментировать, то вылетает ошибка о том, что невозможно выполнить операцию на неактивном DataSet.
Что я делаю не так?
Аватара пользователя
bloodlines
постоялец
 
Сообщения: 100
Зарегистрирован: 05.11.2008 11:26:19

Re: Вопрос по работе с TDataSet

Сообщение Light13 » 11.11.2009 11:35:47

начнем с того, что вы хотите этим добиться? я не вижу, где у вас связь с БД идет.
bloodlines писал(а):  try  ds:=TDataSet.Create(owner);
создание экземпляра класса лучше вынести перед блоком try - finally - end
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Вопрос по работе с TDataSet

Сообщение bloodlines » 11.11.2009 11:42:03

я не вижу, где у вас связь с БД идет.

А мне она и не нужна - я сам создаю поля и их заполняю.
создание экземпляра класса лучше вынести перед блоком try - finally - end

То же самое - ничего не изменилось.

Кстати, с TMemDataSet в lazarus всё нормально работает.
Аватара пользователя
bloodlines
постоялец
 
Сообщения: 100
Зарегистрирован: 05.11.2008 11:26:19

Re: Вопрос по работе с TDataSet

Сообщение Light13 » 11.11.2009 11:54:21

bloodlines писал(а):А мне она и не нужна

как по вашему - где должны храниться данные физически?
Database use in Lazarus (or FreePascal) is fundamentally based on the TDataset class. This represents a table or query to your application. However, like many other such fundamental classes, you don't use the TDataset class it self, you use a descendant of it. There are many of these. They provide access to different kinds of databases, such as local dbase or text files, or back-end databases such as PostgreSQL, Firebird, MySQl and so forth. Some dataset descendants link directly to database tables, while others use additional components or libraries to perform the link.
т.е не рекомендуется, исходя из документации, использовать TDataSet.
Вы так и не ответили, чего же вам надо то?

bloodlines писал(а):То же самое - ничего не изменилось.

Это общая поправка, допустим у вас ошибка создания класса и если переменная класса не будет равна nil - вы получите ошибку при вызове ds.Free, куда вы благополучно и попадете.
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Вопрос по работе с TDataSet

Сообщение bloodlines » 11.11.2009 12:03:42

Спасибо. Уже нашёл в доках то же самое. Теперь юзаю TMemdataSet.
Аватара пользователя
bloodlines
постоялец
 
Сообщения: 100
Зарегистрирован: 05.11.2008 11:26:19


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru