Вопрос № 98259: Уважаемые Эксперты!
Как можно из программы сделать дефрагментацию базы данных.
Пользую Delphi5, формат MSAccess, ADO-компоненты.
Сейчас делаю "в лоб": см. приложение. Но это все как-то не очень красиво... ...Вопрос № 98338: Сохроняю числа тип флоат в базе и не могу обрезать число
т.е. надо только четыре цивры в конце а он сохроняет 12.
в параметрах указываю тип флоат а как вот задать фикисрованную величину не смог найти.
База InterBase...Вопрос № 98354: Вопрос заключается в следующем, программа с помощью ADОConnection (SQLOLEDB) подключается к базе на сервере, заполняя данными таблицу, если программа запущена на локальном компе под ХР то всё отлично, а если удалённо с другого сервера то в таблицу вм...
Вопрос № 98.259
Уважаемые Эксперты!
Как можно из программы сделать дефрагментацию базы данных.
Пользую Delphi5, формат MSAccess, ADO-компоненты.
Сейчас делаю "в лоб": см. приложение. Но это все как-то не очень красиво...
Приложение:
Отправлен: 13.08.2007, 19:04
Вопрос задал: Kupujiji
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Устинов С.Е.
Здравствуйте, Kupujiji!
Делал сжатие базы MS Access используя JRO (Jet Replication Objects) (оригинал здесь)
Решение - в примере. В переменную sBase внесите имя БД (с полным путем). (DatabaseConnection: TADOConnection; - в программе использую для отключения от базы - необходимо для получения возможности сжатия базы).
Отвечает: Mishell
Здравствуйте, Kupujiji!
сжатие базы (я так понял Вы это имели ввиду) можно сделать например так:
1) с помощью JRO (Jet Replication Objects) - см. приложение
пример с JRO взял тут: http://delphiworld.narod.ru/base/compact_access_db2.html
2) с помощью запроса:
backup log <tablename> with no_log
backup log <tablename> with truncate_only
DBCC shrinkdatabase(<tablename>)
но этот вариант скорее подходит для баз типа MsSQL
Приложение:
Ответ отправил: Mishell (статус: 5-ый класс)
Ответ отправлен: 14.08.2007, 10:24
Вопрос № 98.338
Сохроняю числа тип флоат в базе и не могу обрезать число
т.е. надо только четыре цивры в конце а он сохроняет 12.
в параметрах указываю тип флоат а как вот задать фикисрованную величину не смог найти.
База InterBase
Отвечает: Mishell
Здравствуйте, Ermek Mnafianov!
чтобы задать число с заданным кол-вом цифр после запятой можно использовать типы данных Numeric или Decimal:
ALTER TABLE <tablename> ADD <newfield> NUMERIC(12, 4);
Ответ отправил: Mishell (статус: 5-ый класс)
Ответ отправлен: 14.08.2007, 11:12
Вопрос № 98.354
Вопрос заключается в следующем, программа с помощью ADОConnection (SQLOLEDB) подключается к базе на сервере, заполняя данными таблицу, если программа запущена на локальном компе под ХР то всё отлично, а если удалённо с другого сервера то в таблицу вместо русских символов записываются непонятные крукозябры! как с этим справится??
Отправлен: 14.08.2007, 12:28
Вопрос задал: Kast (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 21)
Отвечает: Delph
Здравствуйте, Kast!
1) Поменяйте типы полей в таблицах с "char" на "nchar", с "varchar" на "nvarchar" и с "text" на "ntext". Это объяснит серверу, что данные хранятся в формате Unicode, не зависящем от установленных языковых настроек.
2) Когда формируете запрос на вставку/изменение, ставьте префикс "n" перед строкой:
insert into TableName (..., FieldName, ...)
values(..., n'Вставляемая строка', ...)
update TableName
set FieldName = n'Вставляемая строка'
where...
Читал ещё рекомендацию, что вставку и изменение данных лучше проводить через хранимые процедуры, но не думаю, что это повлияет на отображение данных (хотя рекомендация обоснована по ряду других причин, например, в процедурах можно организовать какие-то проверки...)
Ответ отправил: Delph (статус: 7-ой класс)
Ответ отправлен: 14.08.2007, 16:59 Оценка за ответ: 3 Комментарий оценки: хароший вариант, но не помог!!