Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

БД без СУБД   Найти похожие ветки 

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

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


 
Iconka ©   (2004-07-08 10:41) [1]

Напрмер можно использовать базу в формате DBF + компонент прямого доступа (типа Halcyon).
Можно попробовать EasyTable и пр.


 
Семен Сорокин ©   (2004-07-08 10:41) [2]

как вариант - типизированными файлами - накачка сразу (5000 - это быстро), а далее фильтрация и сортировка в программе, но не удобно если таблиц больше чем одна.


 
КаПиБаРа ©   (2004-07-08 10:51) [3]

Типизированный файл + ListView
Или какой нить компонент отображающий таблицы в памяти например RXMemoryTable.


 
Amoeba ©   (2004-07-08 10:55) [4]

Кое-что альтернативное от AidAim есть на http://www.aidaim.com/info/main.php

P.S. Если заинтересует, то эти продукты на халяву можно найти на
http://www2.0zones.com:808/Search_Soft.asp


 
Amoeba ©   (2004-07-08 11:07) [5]

Еще могу предложить компонет kbmMemTable
http://www.components4developers.com
Сохраняет данные в файлах (текстовые - CSV и бинарные собственного формата) и обратно считывает из них.


 
Rem   (2004-07-08 11:11) [6]

ADO + MS Jet + *.mdb

MS Jet по умолчанию входит во все операционные системы Windows, начиная с 98.


 
MagicHands   (2004-07-08 11:34) [7]

dbisam тоже легок в общении


 
y-soft ©   (2004-07-08 11:37) [8]

Можно и своего потомка TDataSet написать...


 
KSergey ©   (2004-07-08 11:47) [9]

На счет "внешних" СУБД
Смотря что под этим понимать
Ну, про Halcyon уже сказали
Но в принципе - база формата MS Access, устанавливаем на машину MDAC (а как правило какая-то версия его уже стоИт)
И никакой офис не нужен как таковой, все в движке MDAC и нашей проге, дергающей его за ниточки.
Это внешняя СУБД?


 
Anatoly Podgoretsky ©   (2004-07-08 11:50) [10]

Rem   (08.07.04 11:11) [6]
Неправда

Григорьев Антон ©   (08.07.04 10:36)  
Дай толкование внешния СУБД


 
Amoeba ©   (2004-07-08 11:50) [11]

Если в базе таблица одна - то простейшее решение

> Amoeba ©   (08.07.04 11:07) [5]


 
Григорьев Антон ©   (2004-07-08 11:53) [12]


> Anatoly Podgoretsky ©   (08.07.04 11:50) [10]
> Дай толкование внешния СУБД


Чужая программа, которую надо устанавливать дополнительно. Моя программа должна устанавливаться на голый Windows 2000 и больше ничего не требовать для работы.

Хранение информации во внешнем файле допускается и даже приветсвуется.


 
Григорьев Антон ©   (2004-07-08 11:54) [13]


> Amoeba ©   (08.07.04 11:50) [11]
> Если в базе таблица одна - то простейшее решение


Нет, таблиц будет несколько.


 
Anatoly Podgoretsky ©   (2004-07-08 11:57) [14]

Григорьев Антон ©   (08.07.04 11:53) [12]
Тогда тебя устроит любой встроеный движок, рекомендую те которые поддерживают dBase IV тогда в дополнение к твоей программе будет много средств просмотра и экспорта, например Эксель может напрямую открывать эти таблицы


 
Семен Сорокин ©   (2004-07-08 12:02) [15]


> Моя программа должна устанавливаться на голый Windows 2000
> и больше ничего не требовать для работы.

тогда, имхо, удобно использовать Access ибо ничего добавляьб не придется, а СУБД очень улобна для локальной работы.


 
Anatoly Podgoretsky ©   (2004-07-08 12:04) [16]

Семен Сорокин ©   (08.07.04 12:02) [15]
Придется, при распространении придется поставлять ADO, DCOM, JET или молиться богу, что они есть на машине


 
Romkin ©   (2004-07-08 12:04) [17]

А просто TClientDataset разве нельзя использовать? Данные в xml будут, а по функциональности - та же таблица. 5000 записей в год - это очень немного


 
Семен Сорокин ©   (2004-07-08 12:09) [18]


> Anatoly Podgoretsky ©   (08.07.04 12:04) [16]
> Семен Сорокин ©   (08.07.04 12:02) [15]
> Придется, при распространении придется поставлять ADO, DCOM,
> JET или молиться богу, что они есть на машине

Дык если на Win2000 стоять будет - там все это есть в конфигурации, у меня во всяком случае проблем ни разу не было...
Доугой вопрос - лицензионность :), за легальное использование надо будет денех MS отстегнуть.


 
Anatoly Podgoretsky ©   (2004-07-08 12:13) [19]

Семен Сорокин ©   (08.07.04 12:09) [18]
С легальностью все в порядке, в состав Дельфи входит лицензия на использование ADO
Насчет того, что не встречался, тебе везет, работал с малым количеством конфигураций и кроме того очень вероятно, что на тех машинах был уже установлен офис, он тоже устанавливает АДО, не помню гарантируется ли при этом установка JET


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


> Romkin ©   (08.07.04 12:04) [17]
> А просто TClientDataset разве нельзя использовать?


Сейчас покопался немного - похоже, что это лучший для меня вариант. Правда, тогда нужна будет midas.dll, но есть информация, что программу якобы можно скомпилировать так, что она не потребуется. Сейчас пытаюсь понять, так ли это.


 
Anatoly Podgoretsky ©   (2004-07-08 12:18) [21]

Григорьев Антон ©   (08.07.04 12:15) [20]
Ответить нельзя, поскольку ты не указываешь версию Дельфи


 
Игорь Шевченко ©   (2004-07-08 12:20) [22]


> есть информация, что программу якобы можно скомпилировать
> так, что она не потребуется


Было бы очень любопытно узнать про такой способ, если он существует, конечно.


 
Amoeba ©   (2004-07-08 12:22) [23]


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

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


 
Romkin ©   (2004-07-08 12:22) [24]

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


 
Anatoly Podgoretsky ©   (2004-07-08 12:22) [25]

Игорь Шевченко ©   (08.07.04 12:20) [22]
dbExpress + midaslib
саму библиотеку конечно нельзя


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


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


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


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


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


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


 
sniknik ©   (2004-07-08 12:44) [28]

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


 
SergP ©   (2004-07-08 12:53) [29]


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


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


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


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


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


 
Zlod3y ©   (2004-07-08 13:07) [31]

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


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

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


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

Anatoly Podgoretsky ©   (08.07.04 12:22)

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


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

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


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

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

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

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

DAO


 
sniknik ©   (2004-07-29 11:02) [36]

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

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

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


 
Anatoly Podgoretsky ©   (2004-07-29 11:19) [37]

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


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

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


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

ну для примера посмотретьздешний фак
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 будет реализована поддержка этих объектов для других типов
баз данных.


 
WondeRu ©   (2004-07-29 13:31) [40]

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



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

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.045 c
1-1091628699
Moss
2004-08-04 18:11
2004.08.22
Распознавание символов


14-1091652820
Soft
2004-08-05 00:53
2004.08.22
Нам не страшен рыжий Чубайс, или рабочий ВД второго рода.


9-1083603796
Bim
2004-05-03 21:03
2004.08.22
Как передать управление процедуре?


1-1091786912
gigabytepretender
2004-08-06 14:08
2004.08.22
Своя орфография в Word98


14-1091606736
Igorek
2004-08-04 12:05
2004.08.22
Система реального времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский