Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

БД без СУБД


Страницы:   1 2 3

Григорьев Антон ©   (2004-07-08 10:36:00) 

Требуется разработать программу, которая в процессе своей работы порождает некоторые данные. Эти данные надо сохранять в архиве на год. За год будет накапливаться порядка 5000 записей. Из архива надо будет извлекать данные, фильтруя их по значениям отдельных полей и по времени помещения в архив. По условиям техзадания программа должна быть автономной, т.е. не использовать никаких внешних СУБД, программ из MS Office и всего прочего, что не входит в ОС. Никогда с такими задачами сталкиваться не приходилось. Нет ли у кого каких идей, как это можно проще и эффективнее реализовать?


Anatoly Podgoretsky   (2004-07-30 10:30:00) [1]

http://www.kylecordes.com/bag/index.html


Term   (2004-07-30 10:09:00) [2]


> для "бд без судб" мне понравилась TinyDB

а мне Halcyon и тоже ничего дополнительно не требуется !!! :)))


AndB   (2004-07-29 19:10:00) [3]

для "бд без судб" мне понравилась TinyDB http://delphi.narod.ru/
ничего дополнительного не требуется


Term   (2004-07-29 14:18:00) [4]


> Идеальным вариантом для меня было бы следующее: чтобы моя
> программа могла сама создать на диске базу, состоящую из
> двух таблиц, связанных как master-detail (насколько я понимаю,
> они могут разместиться в одном mdb-файле),

чтото ты сам себе противоречиш и не хочеш слушать того что тебе советуют, ты хочеш взять аксес(геморой сам по себе), а для работы с ним тебе по любому потребуются дополнительные средства которыми ты не хочеш пользоваться, послушай
Anatoly Podgoretsky ©   (29.07.04 11:19) [37]
и не мучайся


WondeRu   (2004-07-29 13:31:00) [5]

хочешь встренную СУБД? Firebird Embedded
http://puzzle.dl.sourceforge.net/sourceforge/firebird/Firebird-1.5.1.4481_embed_win32.zip


roottim   (2004-07-29 12:42:00) [6]

ну для примера посмотретьздешний фак
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988623008&n=14
но это DAO ..немного другое понятие чем ADO :))
а потом порыть в инете..и найти то-то типа

Первый шаг при создании новой базы данных — создание нового экземпляра объекта Catalog. Это позволяет определить не только тип создаваемой базы данных (с
помощью OLE DB-провайдера), но и местоположение файла базы данных. Вот как это можно сделать для базы данных Microsoft Access:

  const
  BaseName =   'c:\data\demo.mdb';
  DS          =   'Provider=Microsoft.Jet.OLEDB.4.0;Data    Source='+BaseName;
  var
  Catalog   : TADOXCatalog;
  ...
  // Создать экземпляр объекта ADOX Catalog
  Catalog   := CoCatalog.Create;
  // Если база данных существует, удалим ее
  If FileExists(BaseName) Then DeleteFile(BaseName);
  // Создадим новый MDB-файл
  Catalog.Create(DS);
  // Укажем активное соединение
  Catalog._Set_ActiveConnection(DS);
  ...
В приведенном выше коде создается новая база данных — заранее заданного типа в заранее заданном каталоге. Затем мы можем добавить в эту базу данных таблицы
и поля. Чтобы сделать это, необходимо выполнить такую последовательность действий:

Создать новый экземпляр объекта Table.
Создать новый экземпляр объекта Column.
Определить свойства вновь создаваемого поля.
Добавить объект Column в коллекцию Columns объекта Table.
Повторить шаги 3-4 для каждого нового поля.
Добавить объект Table в коллекцию Tables объекта Catalog.
Следующий пример показывает, как можно реализовать эту последовательность действий:

  // ШАГ 1
  // Создать новый экземпляр объекта Table
  Table                := CoTable.Create;
  // Give it the name
  Table.Name      := 'Customers';
  // И определить Catalog, к которому он принадлежит
  Table.ParentCatalog := Catalog;
  // ШАГ 2
  // Создать новый экземпляр объекта Column
  Column := CoColumn.Create;
  With Column do
     begin
      ParentCatalog := Catalog;
  // ШАГ 3
  // Установить свойства
      Name    := 'CustID';
      Type_   := adInteger;
      Properties['Autoincrement'].Value := True;
      Properties['Description'].Value    := 'Customer    ID';
     end;
  // ШАГ 4
  // Добавить поле к коллекции Columns объекта Table
     Table.Columns.Append(Column, 0, 0);
     Column := Nil;
  // ШАГ 5
  // Создать несколько объектов Columns и добавить их к объекту Table
     With Table.Columns do
      begin
        Append('FirstName', adVarWChar, 64);
        Append('LastName',   adVarWChar,    64);
        Append('Phone',          adVarWChar, 64);
        Append('Notes',          adLongVarWChar, 128);
      end;
  // ШАГ 6
  // Добавить объект Table в коллекцию Tables объекта Catalog
  Catalog.Tables.Append(Table);
  Catalog := Nil;
После того как таблица создана и ее поля определены, мы можем добавить индексы и ключи, если в том есть необходимость. Следующий пример показывает, как
добавить индекс к LastName имеющейся таблицы:

  Index := CoIndex.Create;
  With Index do
     begin
      Name := 'LastNameIndex';
      IndexNulls := adIndexNullsDisallow;
      Columns.Append('LastName', adVarWChar, 64);
      Columns['LastName'].SortOrder := adSortAscending;
     end;
     Table.Indexes.Append(Index, EmptyParam);
Логика этого примера проста: сначала мы создаем экземпляр объекта Index, затем устанавливаем его свойства — имя, способ обработки «пустых» значений,
связываем индекс с полем и, наконец, добавляем его в коллекцию Indexes объекта Table. Примерно то же самое следует делать и при создании ключей.

Обсудив объекты ADOX, мы не коснулись объектов User и Group. В настоящее время в текущей версии ADO эти объекты доступны только для Microsoft Access
(Microsoft Jet OLE DB Provider), и пока нет никаких сведений о том, что в последующих версиях ADO будет реализована поддержка этих объектов для других типов
баз данных.


Григорьев Антон   (2004-07-29 12:21:00) [7]

Идеальным вариантом для меня было бы следующее: чтобы моя программа могла сама создать на диске базу, состоящую из двух таблиц, связанных как master-detail (насколько я понимаю, они могут разместиться в одном mdb-файле), и потом добавлять в эти таблицы данные и извлекать с возможностью фильтра и сортировки. С помощью компонентов ADO я знаю как сделать всё, кроме создания новой базы mdb. Реально ли это сделать?


Anatoly Podgoretsky   (2004-07-29 11:19:00) [8]

Григорьев Антон ©   (08.07.04 10:36)  
Условия твоей задачи, позволяют использовать встроенный движок (Embed), возьми формат dBase и какой нибудь движок, который больше нравится. Будет строко по заданию ни каких внешних программ или библиотек. Кроме того сами таблицы можно будет обрабатывать какими ни будь внешними программами, каких бесчисленное множество, тот же Эксель напрямую может работать с таблицами dBase.
В итоге один exe + база и полное отстуствие необходимости дополнительных инсталяций.


sniknik   (2004-07-29 11:02:00) [9]

> в нём меня не устраивает отсутствие возможности делать сортировку (по крайней мере, я не нашёл)
как знал. ;о) на самом деле там можно сделать сортировку (сделать индекс и сделать его активным), но это не так просто по сравнению со свойством sort, где просто присваиваеш ему имя нужного поля и все.

> А с TADODataSet никак не могу понять, как сделать новую таблицу.
в памяти? как с клиентским? jet не нужен, конект не нужен. пример от клиентского из хелпа подходит один в один. естественно это не единственный способ получит рекордсет, можно еще (кроме того что считать из базы где требует уже существующий mdb-файл :) считать из файла (свой формат типа cds от клиентского, или hml), либо получить от провайдера данных rds.

> Как создать новую таблицу через JET?
CREATE TABLE xTableNamex (xFieldNamex xFieldTypex [,xFieldNamex xFieldTypex])


Rem   (2004-07-29 11:01:00) [10]

>> отсутствие возможности делать сортировку

ClientDataSet.IndexFieldNames := 'ИмяПоля1;ИмяПоля2;ИмяПоля3';

>>Как создать новую таблицу через JET?

DAO


Григорьев Антон   (2004-07-29 10:39:00) [11]

С TClientDataSet разобрался, в нём меня не устраивает отсутствие возможности делать сортировку (по крайней мере, я не нашёл). А с TADODataSet никак не могу понять, как сделать новую таблицу. При попытке использовать OLE DB Jet требует уже существующий mdb-файл. Как создать новую таблицу через JET?


Игорь Шевченко   (2004-07-08 15:06:00) [12]

Anatoly Podgoretsky ©   (08.07.04 12:22)

Спасибо. Но у меня D5 :)


Zlod3y   (2004-07-08 13:09:00) [13]

а на винде 2000 без проблем всё заработает....да и на 98 тоже запросто :-)


Zlod3y   (2004-07-08 13:07:00) [14]

MSAccess + ADO....однозначно, сам щас над подобным парюсь.....и по скорости подойдёт тебе ADO, хотя через BDE бестрее, ведь 5000 в год ваще ничтожество, и ADO с этим справится....дерзай 8-)


Григорьев Антон   (2004-07-08 12:58:00) [15]


> SergP ©   (08.07.04 12:53) [29]
> Вот я например установил винду и офис на чистый комп - и
> оказалось что JET установлен.


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


SergP   (2004-07-08 12:53:00) [16]


> Anatoly Podgoretsky ©   (08.07.04 11:50) [10]
> Rem   (08.07.04 11:11) [6]
> Неправда


Вот я например установил винду и офис на чистый комп - и оказалось что JET установлен. Некоторые люди судя по всему тоже  думают как я или Rem
А вот вы не первый раз говорите что это неправда. Думаю что скорее всего вы правы, но хотелось бы знать причину этого. Т.е приведите пример когда на комп были установлены винда или винда+офис и там не оказалось JET.
Или это связано с выборочной установкой винды и/или офиса?


sniknik   (2004-07-08 12:44:00) [17]

> А в D5 никак? Жаль, но, похоже, придётся менять версию.
лутше всего поменять конечно, но можно и в D5 использовать ADODataSet у него есть аналогичные ClientDataset-у (и нужные тебе свойства) для работы с датасетом без базы. а также то чего нет (простая сортировка по полям, sort).
естественно мидаса не нужно, нужно лиш присутствие на машине ADO (пусть абстрактного без единого OLE DB драйвера).


Григорьев Антон   (2004-07-08 12:24:00) [18]


> Romkin ©   (08.07.04 12:22) [24]
> Григорьев Антон ©  (08.07.04 12:15) [20] D6 и выше - uses
> MidLib в проекте, и dll не надо


А в D5 никак? Жаль, но, похоже, придётся менять версию.


Григорьев Антон   (2004-07-08 12:23:00) [19]


> Игорь Шевченко ©   (08.07.04 12:20) [22]
>
> > есть информация, что программу якобы можно скомпилировать
>
> > так, что она не потребуется
>
>
> Было бы очень любопытно узнать про такой способ, если он
> существует, конечно.


Всё, что мне пока известно по этому поводу - это ответ вот здесь: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=23625


Amoeba   (2004-07-08 12:22:00) [20]


> Григорьев Антон ©   (08.07.04 11:54) [13]
>
> > Amoeba ©   (08.07.04 11:50) [11]
> > Если в базе таблица одна - то простейшее решение
>
>
> Нет, таблиц будет несколько.

Извиняюсь, неудачно выразился. Таблиц может быть, конечно, сколько угодно. Каждая в своем файле. Ничего, кроме голого Windows, не требуется.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо