Основы работы с БД

Любые обсуждения, не нарушающие правил форума.

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

Re: Основы работы с БД

Сообщение debi12345 » 05.05.2008 08:31:04

Некие марсиане должны довести до ума либо MemDataset (чтобы он не глючил, чтобы оповещал о событиях как нормальный датасет, и умел сохраняться в файл), либо dbf-компонент (чтобы сохранял текст в UTF8).
( нечто типа локального режима TMSESQLQuery (от Мартина) - который умеет хранить в ассоциированном бинарной файле любой тип данных, включая BLOB).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Основы работы с БД

Сообщение Troublemaker » 05.05.2008 08:46:39

Vadim писал(а):Если же один датасет связан с несколькими таблицами, то нужно предусмотреть какой-то иной механизм создания таблиц, более удобный.
Какие есть варианты? Я ж говорю - мне пока непонятна именно идеология.

Что до файлового обмена, то тут есть пара подводных камушков.
1. нужна невозможность восстановления нешифрованных данных. Например, на моем домашнем десктопе крутится Vcom Undeleter (из VCOM/Avanquest Systemsuite), аналог Protected Recycle Bin из Norton Utilities. Обойти его перехват удаления можно только из-под чистого ДОСа, то есть восстановить можно почти всё удаленное. Лучший способ препятствовать восстановлению данных на диске - ничего на него не писать, не так ли? Варианты с затиранием данных случайной информацией или принудительным установлением длины файла в 0 неприемлемы: всегда есть возможность нажать reset до начала стирания. (да-да, я знаю, что можно сделать дамп памяти, посмотреть нужные участки в отладчике и т.п., сам так делал, но для этого нужна бОльшая квалификация, чем запустить Unerase сотоварищи.
Вариант с RAM-диском тоже неприемлем в силу доступности этого диска.

То есть, файловый обмен должен проходить двумя файлами: входной и выходной, без создания промежуточных. Причем если выходной может быть в любом формате, то входной обязан быть шифрованным. Либо промежуточные должны создаваться не на диске.

2. Как я уже говорил, очень не хочется писать самому ВСЮ обработку списков - поиск, сортировку, перемещение вперед-назад. DataSet уже обладает минимальной необходимой функциональностью, разве не так?
(это не ёрничание, а обычный вопрос: я всегда допускаю, что могу чего-то не знать или не учитывать)

Мне непонятно, кстати: на фига нужен слой DataSource, если он может работать только с одним DataSet-ом?

Vadim писал(а):1. MemDS. ... скверно работает компонент в Лазарусе, проблемы с интерактивным редактированием данных в визуальном компоненте.
Ну, пока нашел только одну бяку - с булевыми полями. Workaround - использовать в качестве них поля char с фиксированными значениями для T/F - прекрасно редактируется в гриде и data-aware контролах. Хотя даже в таком варианте отказывается работать DBCheckBox.

Vadim писал(а):2. CSV-файл... 3. DBF
См. выше - оба этих формата вполне пригодны для передачи входного/выходного файла, но постоянная (де)шифровка на лету, если использовать их как рабочие файлы, приведет к неоправданным накладным расходам, нет?
debi12345 писал(а):довести до ума либо MemDataset (чтобы он не глючил, чтобы оповещал о событиях как нормальный датасет, и умел сохраняться в файл)
Э-э? У MemDataSet ЕСТЬ метод SaveToFile(имя файла,сохранять ли данные) и он работает.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Vadim » 05.05.2008 08:48:01

debi12345 писал(а):либо dbf-компонент (чтобы сохранял текст в UTF8)

Сохранить то он сохранит, причём без всякой доработки, проблема в том, что DBF (сам фрмат файла) давно уже никто не дорабатывает и стандартного номера для UTF-8 нету и, я думаю, уже никогда не будет.

Добавлено спустя 12 минут 22 секунды:
Troublemaker писал(а):нужна невозможность восстановления нешифрованных данных

Можно создать виртуальный диск в памяти на время работы программы. Можно упрятать нешифрованый файл так, что сам его будешь долго искать. :)
Сначала нужно задать уровень пряток, а потом уже обсуждать как его реализовать. Лично для меня ответ легче найти в учебнике, чем перебирать возможности, где искать спрятанные данные, особенно если я не знаю, каким образом они спрятаны. :)
Troublemaker писал(а):DataSet уже обладает минимальной необходимой функциональностью, разве не так?

Так и есть. Однако кроме него и другие предопределённые списки в FPC (TStringList например) обладают и возможностью навигации и связывания с другими списками, поиском и даже сортировкой.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 05.05.2008 09:32:14

Vadim писал(а):Можно создать виртуальный диск в памяти на время работы программы. Можно упрятать нешифрованый файл так, что сам его будешь долго искать.
FileMon или Anvir task manager под виндой, LSOF под линуксом и все прятки псу под хвост.

Vadim писал(а):для меня ответ легче найти в учебнике, чем перебирать возможности, где искать спрятанные данные
Достопочтенный не знает моего ВУЗа. Расскажу историю из моей реальной жизни.

Есть предмет "Аналоговая схемотехника". Предмет как предмет, ведет замдир (директор ведет теорию передачи сигналов и к нему у меня претензий нет). Первый экзамен по нему я благополучно завалил, набрав тестовых баллов на твердую двойку с плюсом. (экзамен в форме тестирования - из списка вопросов выдается блок из 20 или около того) К пересдаче (вместе с доброй половиной потока) готовился основательно, даже взял в библиотеке учебник с таким названием.
Вот только ответы в нем нашлись на ОДИН из около сотни тестовых вопросов. Подхожу к преподу:
- Ы-ы! Нету ответов, аднака! Специально взял учебник. :(
- Всё правильно, там их и не найдешь, они есть только в моей методичке. Бери в библиотеке.

Снова иду в библиотеку, спрашиваю эту методичку. Мне показывают нечто страшное, как моя жизнь - как минимум пятая ксерокопия, и просят за это 60 рублей - "эту мы не выдаем, а только продаем". Смотрю внимательно и вижу, что, несмотря на очень хорошее для моего возраста и образа жизни (10-12+ часов в сутки за мониторами) зрение, я не в состоянии разобрать бОльшую часть формул и вообще текста, настолько мерзкое качество. Такой суммы не жалко, но зачем я буду приобретать бесполезный товар? (купишь ли, скажем, наполовину битый модуль памяти?) Покупать не стал, пошел натурально зубрить вопросы и правильные варианты ответов. Сдал.

И такой бардак там во всем: если хочешь сдать, то должен знать не предмет, а то, как мыслит составитель вопросов. Ну, например, на первом курсе в тестах по информатике попался примерно такой вопрос: "В двумерном массиве DIM A(5,6) какая размерность обозначает столбец, а какая - строку?"
Ну и как на него отвечать? :shock:
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Vadim » 05.05.2008 10:39:32

Troublemaker писал(а):- Ы-ы! Нету ответов, аднака! Специально взял учебник. :(
- Всё правильно, там их и не найдешь, они есть только в моей методичке. Бери в библиотеке.

Ы-ы-ы! :D
Да отчего ж не знаю - знаю. Когда преподов от пролетариев метлы и лопаты перестали отличать, они по всякому кинулись зарабатывать. И ещё хорошо, когда только таким образом...
Troublemaker писал(а):"В двумерном массиве DIM A(5,6) какая размерность обозначает столбец, а какая - строку?"
Ну и как на него отвечать?

Практика - единственный критерий истины. :) По крайней мере у меня. Я пока руками не пощупаю - всё равно всё забуду, сколько ни читай. А как только программку состряпаешь чтобы выяснить, где там что - сразу запомнишь.

Добавлено спустя 2 минуты 44 секунды:
Troublemaker писал(а):FileMon или Anvir task manager под виндой, LSOF под линуксом и все прятки псу под хвост.

Так я и говорю - надо сначала с уровнем пряток определиться. А так - обладая сорокасемипроцессорным тринадцатиядерным компьютером с семью терабайтами памяти, можно восстановить любые данные хоть из бабушкиной подмышки... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение Troublemaker » 05.05.2008 11:01:12

Vadim писал(а):
Troublemaker писал(а):"В двумерном массиве DIM A(5,6) какая размерность обозначает столбец, а какая - строку?"
Ну и как на него отвечать?
Практика - единственный критерий истины. Я пока руками не пощупаю - всё равно всё забуду, сколько ни читай.
Юмор-то в том, что привязка размерности в массиве к абсциссе/ординате зависит только от разработчика, и никакого стандарта на это дело нет в принципе. Поэтому вопрос лишен смысла, но ответить на него НАДО.
Vadim писал(а):можно восстановить любые данные хоть из бабушкиной подмышки
Сударь говорит про терморектальный метод допроса? :)
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Brainenjii » 05.05.2008 11:15:57

6 страниц? 0.o
А чем не устроил вариант с FB Embedded? Там, вроде как, всё что угодно хранить можно...

// И работать с ней как с нормальной БД
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Основы работы с БД

Сообщение Vadim » 05.05.2008 11:17:16

Troublemaker писал(а):Сударь говорит про терморектальный метод допроса?

Офтальмодеструкционный гипертензивный... :)

Добавлено спустя 5 минут 35 секунд:
Troublemaker писал(а):Юмор-то в том, что привязка размерности в массиве к абсциссе/ординате зависит только от разработчика, и никакого стандарта на это дело нет в принципе.

Так понятно. Массив - просто кусок памяти, невизуальный (в отличие от листа бумаги или таблицы Экселя) компонент. Его использование - это чистая интертрепация разработчика. Я и говорю, что пока руками не пощупаешь... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Основы работы с БД

Сообщение v-t-l » 05.05.2008 13:59:51

Код: Выделить всё
var
  fs: TFileStream;
begin
  fs := TFileStream.Create('/home/vital/Projects/lazarus/testsdf/test1.csv',fmOpenRead);
  SdfDataSet1.LoadFromStream(fs);
  fs.Free;
  SdfDataSet1.Active:=True;

SdfDataset может читать/сохранять данные из/в любого потомка TStream. В том числе из TMemoryStream или (де)шифрующего потока. И загружает он эти данные полностью в ОЗУ с возможностью правки и сохранения опять же в какой-нибудь поток методом SaveToStream.
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Основы работы с БД

Сообщение Attid » 05.05.2008 14:26:56

Troublemaker писал(а):Сударь, вы мне невпервой это говорите. Ваши контрпредложения?

ну во первых определится что надо давать и получать

в случае экономии трафика и защиты от перехвата вижу только один выход.

человек скачивает файл с вопросами, загружает в программу, отвечает, получает файл ответов, отправляет его, получает отметку.

все что будет проверять ответы локально обречено на провал.

для того чтобы файл вопросов\ответов можно его криптовать с использованием фамилии отвечающего, структуру фала можно хранить в том же datafile 2, для экономии трафика пропускать поток через компресор (тут же на форуме где-то расписывал вроде).

все остальное это глупости от нечего занятся услышали красивое слово БД и попытка притянуть его за уши.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Основы работы с БД

Сообщение Troublemaker » 05.05.2008 15:18:13

v-t-l изучаю ваш пример и связанные с ним возможности. Не в части конкретно sdf - можно обойтись и stringlist, если вкратце.

Мне вот именно таких коротких примеров и не хватает иногда, чтобы понять , о чем идет речь.
Attid писал(а):в случае экономии трафика и защиты от перехвата вижу только один выход.
Блин и ёпрст! А я о чем? Сударь, если бы вы посмотрели болванку моей ПЗ к диплому (см. ссылки в начале треда, выложено на гугль-доксах), то увидели бы, что я именно про это и говорю с самого начала: приходит пакет с заданиями, уходит пакет с ответами [, приходит ответный пакет с результатами].
Однако защита должна быть не только для проверки ответов, но и для сохранности самих заданий: если студиоз будет иметь возможность распаковать тексты заданий, то никто и ничто не помешает ему подготовить ответы на все из них, и более того - раздать эти ответы всему потоку, что сводит результативность опроса на нет.
А так получаем "security by obscurity" - "безопасность в неизвестности", когда некие данные существуют только в шифрованном виде, и увидеть их НА ДИСКЕ в виде расшифрованном невозможно.

Насчет притягивания БД за уши не согласен. Я уже не единожды в этой ветке говорил, что я хочу сделать и почему. Что есть база данных, как не набор наборов данных и связей между этими наборами? Если можешь предложить лучший вариант организации четырех связанных таблиц в памяти - я весь внимание. Серьезно - как я тоже не раз уже говорил, я не считаю себя всесведущим, и задаю вопросы не из желания повыпендриваться, а потому что не знаю ответов на них.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение alexs » 05.05.2008 15:48:54

кто тебе мешает производить расшифровку данных при загрузке в память?
а хранить данные можно в чём угодно. Я б использовал локальный FB с сохранение текста вопроса в виде обычной строки, только зашифрованной. В програмее данные прочитал, расшифровал - отобразил для студента. Его ответ зашифровал и упаковал в 1 файл-пакет.
В итоге получаеш всю прелесть работы с БД + не читаемые ниоткуда, кроме программы данные.
А если студиоз сумел расшифровать твои данные, то:
1. Сам факт этого уже говорит о хороших знаниях студента
2. Выбирать надо более кипкостойкие алгоритмы.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Основы работы с БД

Сообщение shade » 05.05.2008 16:58:08

Troublemaker писал(а):Блин и ёпрст! А я о чем? Сударь, если бы вы посмотрели болванку моей ПЗ к диплому (см. ссылки в начале треда, выложено на гугль-доксах), то увидели бы, что я именно про это и говорю с самого начала: приходит пакет с заданиями, уходит пакет с ответами [, приходит ответный пакет с результатами].
Однако защита должна быть не только для проверки ответов, но и для сохранности самих заданий: если студиоз будет иметь возможность распаковать тексты заданий, то никто и ничто не помешает ему подготовить ответы на все из них, и более того - раздать эти ответы всему потоку, что сводит результативность опроса на нет.
А так получаем "security by obscurity" - "безопасность в неизвестности", когда некие данные существуют только в шифрованном виде, и увидеть их НА ДИСКЕ в виде расшифрованном невозможно.

Блин, и причем тут БД, DataSet и иже с ним?

Я делал примерно так.
БД на сервере. К нему просто никто не должен иметь доступа. На сервере крутиться моя программка-сервер. Есть программка-клиент. Клиент с сервером общается запросами в виде пакетов. Каждый пакет несет в себе XML-файла (как запрос так и ответ). Естестенно, прежде чем получить задание клиент должен авторизоваться, например отправить логин/пароль.

Здесь просто нужно включить шифорование при передачи, а все остальное остается как есть, т.к. сами вопросы нигде на ЖД не сохраняются. Пересылать на клиенту всю базу смысла нет. Клиент запросом получает задание, и также запросом отправляет результаты и получает ответ.

Если интересно могу выложить исходники (на Delphi + SQLite3) чуть позже...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Основы работы с БД

Сообщение Troublemaker » 05.05.2008 17:30:59

alexs писал(а):кто тебе мешает производить расшифровку данных при загрузке в память?
а хранить данные можно в чём угодно.
Опять же: ну а я о чем говорю? Как оно будет хранится на диске - мне по фигу, что-нибудь придумаю. Больше меня заботит именно организация хранения в памяти, чтобы к диску обратиться дважды за сеанс работы: сначала считать входящий пакет, потом записать исходящий. (И по возможности - чтобы отслеживать прерванные сеансы)

alexs писал(а):сохранение текста вопроса в виде обычной строки
Если бы всё упиралось в текстовые вопросы, то меня устроил бы шифрованный dbf. В том и дело, что вопросы могут быть разного типа, в поясниловке я всё это излагал, но не стал копировать сюда, чтобы не загромождать.

alexs писал(а):более криптостойкие алгоритмы
Я решил обойтись простым перемешиванием по определенному закону. Подробности - во всё той же ПЗ по ключевому слову "торнадо". Не бог весть что, но я не представляю, каким образом кроме полного перебора эту фиговину можно вскрыть.
shade писал(а):Клиент с сервером общается запросами в виде пакетов. Каждый пакет несет в себе XML-файла (как запрос так и ответ). Естестенно, прежде чем получить задание клиент должен авторизоваться, например отправить логин/пароль.
Это подразумевает работу онлайн, что не есть гуд. Нужна возможность автономной работы, вплоть до того, что пакеты с заданиями, ответами и результатами пересылаются по электронке, а до целевого компа добираются флоппинетом.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Основы работы с БД

Сообщение Attid » 05.05.2008 17:38:06

Troublemaker писал(а):если бы вы посмотрели болванку моей ПЗ к диплому

много букв, пробежаться по нескольким строчкам на форуме я еще могу загружать себя чтением не могу, уж прошу извенить.

Troublemaker писал(а):если студиоз будет иметь возможность распаковать тексты заданий,

смотри ссылки , работа как с ини файлом. создаешь структуру и работаешь, шифрование прозрачно на выбор.

Troublemaker писал(а):Что есть база данных, как не набор наборов данных и связей между этими наборами?

Troublemaker писал(а):Если можешь предложить лучший вариант организации четырех связанных таблиц в памяти - я весь внимание.

ДБФ это не база данных, датасеты это не база данных , их невозможно связывать !!!!!!!!!


для чего для заданий целых четыре таблицы не понимаю. кста может в сторону XML глянуть ??

alexs писал(а):Я б использовал локальный FB с сохранение текста вопроса в виде обычной строки, только зашифрованной.

вот здравая мысль, но его лишнии длл не устраивают.

shade писал(а):Каждый пакет несет в себе XML-файла

о мысли сходятся =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Пред.След.

Вернуться в Потрепаться

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

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

Рейтинг@Mail.ru