информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Кавычки уличили Google в заимствовании... 
 Некоторые пароли от G Suite хранились... 
 Microsoft выпустила Windows Sandbox 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Pascal] Через Ж..., причем по всем кишкам последовательно 19.11.03 09:16  Число просмотров: 958
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Короче, трабла была с несоответствием сырца и DCU-хи. Надо было:

-создать пустой датасет
-задать филддефсы
-вызвать Create Dataset из контекстного меню (а не ф-цию в тексте!)


Вот, такой, вот черезжопинг!
<programming>
[Pascal] Delphi7. Как ClientDataSet отвязать от провайдера? 17.11.03 07:02  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
По необходимости перелез на Delphi. Теперь мучаюсь вопросом, как отвязать ClientDataSet от провайдера. Суть в том, что мне надо создать "пустой" датасет, набить его данными вручную и сохранить в файл.

А эта тварь требует, чтобы у датасета был провайдер, а у провайдера (если я такового создаю) - датасет! Т.е. : "Сепулька - см. Сепулькарий. Сепулькарий см. Сепулька."
[Pascal] Delphi7. Как ClientDataSet отвязать от провайдера? 18.11.03 11:16  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> По необходимости перелез на Delphi. Теперь мучаюсь
> вопросом, как отвязать ClientDataSet от провайдера. Суть в
> том, что мне надо создать "пустой" датасет, набить его
> данными вручную и сохранить в файл.
>
> А эта тварь требует, чтобы у датасета был провайдер, а у
> провайдера (если я такового создаю) - датасет! Т.е. :
> "Сепулька - см. Сепулькарий. Сепулькарий см. Сепулька."
странно что не получилось, так как предлагал HandleX
попробуй сделать так
Бросаем на форму ClientDataSet, Table
Datasource и DBGrid - чтобы сразу проверить, что все получилось
DataSource.Dataset := Clientdataset
DBGrid.datasource := Datasource
Table.TableName := местоположение файла с данными(например к-л dbf)
Table.TableType := тип файла
Table.Active := True;
После этого, нажимаем правой кнопкой на ClientDataSet
и выбираем Assign Local Data
открывается окно, где указываем в качестве источника Table
В DbGridе должны отобразиться данные таблицы
После этого можно сохранить данные в файл
нажав правую кнопку на ClientDataSet и выбрав SavetoFile
[Pascal] Как, как... Как обычно в Borland'е — через %опу ;-) 17.11.03 10:05  
Автор: HandleX <Александр Майборода> Статус: The Elderman
Отредактировано 17.11.03 10:11  Количество правок: 2
<"чистая" ссылка>
> По необходимости перелез на Delphi. Теперь мучаюсь
> вопросом, как отвязать ClientDataSet от провайдера. Суть в
> том, что мне надо создать "пустой" датасет, набить его
> данными вручную и сохранить в файл.

Хе-х... Почитай справку по свойству Active... Там рассказывается порядок, как TClientDataset заполняется данными...

Потом почитай справку как работать с TClientDataset
Потом «Using a client dataset with file-based data» ;-)))

Из всего этого чтива я сделал такие выводы:
Для пустого TClientDataset надо сперва сконструировать поля данных... Можно через FieldDefs, можно «занять» их у другого TDataSet...
Потом сохранить их в пустой файл методом SaveToFile. В этом файле данных не будет, но будет описание полей ;-)

Ну а дальше ты вроде как понял — если нет Data Provider'a, то будет юзаться файл данных. Его надо указать, конечно же.

Вроде так, в справке там дохрена чего написано.
[Pascal] Чегой-то не лызе... (файл не пишется) 18.11.03 03:15  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> > По необходимости перелез на Delphi. Теперь мучаюсь
> > вопросом, как отвязать ClientDataSet от провайдера.
> Суть в
> > том, что мне надо создать "пустой" датасет, набить его
> > данными вручную и сохранить в файл.
>
> Хе-х... Почитай справку по свойству Active... Там
> рассказывается порядок, как TClientDataset заполняется
> данными...
>
> Потом почитай справку как работать с TClientDataset
> Потом «Using a client dataset with file-based data» ;-)))
>
> Из всего этого чтива я сделал такие выводы:
> Для пустого TClientDataset надо сперва сконструировать поля
> данных... Можно через FieldDefs, можно «занять» их у
> другого TDataSet...
> Потом сохранить их в пустой файл методом SaveToFile. В этом
> файле данных не будет, но будет описание полей ;-)
>
> Ну а дальше ты вроде как понял — если нет Data Provider'a,
> то будет юзаться файл данных. Его надо указать, конечно же.
>
> Вроде так, в справке там дохрена чего написано.

Сделал все вышеописанное, а пустой файл не пишется. Не ругается, но и не пишет...

Я, конечно, дальше и сам поковыряю, только трейсить-то в кодах придется, это же не VC, сырцов не прилагается. Так, что, если знаещь, в чем дело, подскажи...
[Pascal] Чегой-то не лызе... (файл не пишется) 18.11.03 09:58  
Автор: HandleX <Александр Майборода> Статус: The Elderman
<"чистая" ссылка>
> Сделал все вышеописанное, а пустой файл не пишется. Не
> ругается, но и не пишет...
>
> Я, конечно, дальше и сам поковыряю, только трейсить-то в
> кодах придется, это же не VC, сырцов не прилагается. Так,
> что, если знаещь, в чем дело, подскажи...

После того, как заполнил FieldDefs вызови CreateDataSet, а потом сделай SaveToFile... После этого должны поехать (лыжи ;-))
[Pascal] Результаты: 18.11.03 10:46  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Трейсю: после входа в SavetToFile вызывает GetActive и выскакивает из процедуры, поскольку оно естессно "не эктив" и не могет быть "эктив", т.к. нету прова.

> После того, как заполнил FieldDefs вызови CreateDataSet, а
> потом сделай SaveToFile... После этого должны поехать (лыжи
> ;-))

Пытаюсь сделать.
CreateDataSet вылетает по ексепшну с ообщением "поле такое-то (не первое!) не найдено!". Копаю дальше.
[Pascal] Проверь корректность заполнения FieldDefs... Я сегодня пробовал, всё работает. 18.11.03 10:53  
Автор: HandleX <Александр Майборода> Статус: The Elderman
<"чистая" ссылка>
[Pascal] Через Ж..., причем по всем кишкам последовательно 19.11.03 09:16  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Короче, трабла была с несоответствием сырца и DCU-хи. Надо было:

-создать пустой датасет
-задать филддефсы
-вызвать Create Dataset из контекстного меню (а не ф-цию в тексте!)


Вот, такой, вот черезжопинг!
[Pascal] Не знаю, не знаю... Выравниваем кишку (внутри)... :) 19.11.03 10:09  
Автор: HandleX <Александр Майборода> Статус: The Elderman
<"чистая" ссылка>
> Короче, трабла была с несоответствием сырца и DCU-хи. Надо
> было:
>
> -создать пустой датасет
> -задать филддефсы
> -вызвать Create Dataset из контекстного меню (а не ф-цию в
> тексте!)
>
> Вот, такой, вот черезжопинг!

Смотри, вот как у меня... Работает!

procedure TForm1.Button1Click(Sender: TObject);
Var cData: TClientDataSet;
begin
  cData := TClientDataSet.Create(Self);
  Try
    cData.FileName := 'C:\test.xml';
    cData.FieldDefs.Add('FirstField', ftString, 20);
    cData.FieldDefs.Add('SecondField', ftInteger);
    cData.CreateDataSet;
    cData.SaveToFile('', dfXML); //Проверь, создан ли файл... У меня создан...
  Finally
    cData.Free;
  End;
end;

---
[Pascal] Продолжение спектакля: 24.11.03 11:29  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Короче, все сделал, и все записывлось. Только одна отсебятинка: В нек-рых датасетах после CreateDataset добавил в Филд Едите лукапные поля (естессно, в ФилдДефсах их нет - мне же их сохранять не надо).
В таком виде все компилится и работает, пока я не пытаюсь грузиться из сохраненного файла. При загрузке валится с сообщением "Mismatch data packet". При этом те сеты, в к-рых поля и дефсы совпадают, грузятся нормально. Попытка грузить таблицы в "порядке лукапности" не помогает.

Можно, конечно сотворить дополнительные сеты с лукапами, для к-рых через прова подключить загружаемые сеты без лукапов.

А короче пути нет? Типа: часть полей сделать загружаемыми/сохраняемыми, а лукапные - нет.
[Pascal] Всё правильно :) 24.11.03 14:12  
Автор: HandleX <Александр Майборода> Статус: The Elderman
<"чистая" ссылка>
> В нек-рых датасетах после CreateDataset
> добавил в Филд Едите лукапные поля (естессно, в ФилдДефсах
> их нет - мне же их сохранять не надо).
> В таком виде все компилится и работает, пока я не пытаюсь
> грузиться из сохраненного файла. При загрузке валится с
> сообщением "Mismatch data packet". При этом те сеты, в
> к-рых поля и дефсы совпадают, грузятся нормально. Попытка
> грузить таблицы в "порядке лукапности" не помогает.
>
> Можно, конечно сотворить дополнительные сеты с лукапами,
> для к-рых через прова подключить загружаемые сеты без
> лукапов.
>
> А короче пути нет? Типа: часть полей сделать
> загружаемыми/сохраняемыми, а лукапные - нет.

Ну как бы то что ты сохранишьописаниялукапных полей — ничего плохогов этом нет. Чем потом их восстанавливать вручную, может просто считать их схемы данных (сохранённого файла)? TClientDataset не дурак, и лукапныезначенияв файл писать не будет ;-)
[Pascal] Не сохраняю я описания лукапов! 25.11.03 04:37  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>

> Ну как бы то что ты сохранишьописаниялукапных полей —
> ничего плохогов этом нет.

Да и как? В филддефсе и типа такого данных нет!
[Pascal] Это не Лукап! Круче: 24.11.03 14:04  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Покуда я юзаю только Автоинк и Стринг - все нормально, но стоит создать поле типа Date...
[Pascal] ftDate «нехороший» тип данных ;-) Попробуй заюзать ftDateTime... 24.11.03 14:21  
Автор: HandleX <Александр Майборода> Статус: The Elderman
<"чистая" ссылка>
[Pascal] П-ц, однако! 25.11.03 05:02  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Похоже, это какой-то глюк компилера (визуализатора), состоящий в том, что в pas, dfm & dcu при внесении изменений в существующие поля происходит рассинхронизация. Например: Создаю датасет, объявляю в филддефсах 2 поля - автоинк и стринг, вызываю креэйт (из меню), создаю на основе дефсов оба поля (Add All Filds). Пишет и читает!

Стираю датасет. Создаю новый с тем же именем. Добавляю деф для поля Дата. (Порядок действий тот же) При Add All Filds орет: Нет поля "Дата"! Но поле, тем не менее создает. В .cds его пишет. Но при попытке чтения - падает.

То же самое, но датасет создаю с другим именем. Работает!!! И пишет и читает!
[Pascal] Разобрался. Резюме: "Долгая дорога в %опу" 25.11.03 06:59  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Оказывается Create Dataset из контекстного меню надо вызывать, как минимум, дважды!
Первый раз, когда в FildDefs'ах опишешь сохраняемые поля.
Затем только создаешь поля (Add All Fields) и добавляешь вручную лукапы. (Без Create Dataset Add All Fields не работает!)
После этого - снова Create
И далее - после каждого изменения.

Вот, так - и пишет и читает и активирует.
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach