Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bill_PHO

Цитата:
 
 Сработало, хотя это и криво, использование свойства ADOQuery - EnableBCD.  
 

Оно по умолчанию true. Так что на будущее: не знаешь - не трогай.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 08:40 15-12-2005
VC7



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Bill_PHO
 

Цитата:
Удается ли кому-нибудь, используя ADOQuery в Delphi7, вытащить в грид больше, чем 4 знака после запятой из колонки типа numeric(18,6) (таблица расположена на MS SQL Server 2000) ?

 
 with ADOQuery1 do
    (FieldByName('Num') as TNumericField).DisplayFormat:='###,###.000000 p';

Всего записей: 8 | Зарегистр. 11-11-2005 | Отправлено: 09:42 15-12-2005 | Исправлено: VC7, 09:45 15-12-2005
Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeBS
Так в том то и дело, что его надо поменять на false.
Я не знал - и не трогал.
Когда оно - true (по умолчанию), то Delphi тянет numeric из базы как Currency (у него нет иного формата для точных чисел), но только с четырьмя знаками после запятой ( у меня поэтому и вытягивалось только 4 знака с округлением) .
А вот если его превести в false, то Delphi тащит его как float, что тоже неприятно, но зато со всеми знаками после запятой.
Вообще получается, что с точными двоично-десятичными числами (когда вам надо иметь больше 4 знаков после запятой и в промежуточных вычислениях) в Delphi штатными средствами нормально манипулировать не получится, вернее не всегда вы получите такой же результат, как на калькуляторе. Более того, даже после написания своей математики для таких чисел, у меня создалось впечатление, что при заталкивании результата в базу и при вытаскивании его обратно происходит преобразование в double, а это может привести к искажению результата, хотя вероятность этого уже не очень высокая.
 
 
Добавлено:
Admin CSB
 
"Currencyis a fixed-point data type that minimizes rounding errors in monetary calculations. It is stored as a scaled 64-bit integer with the four least significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000".
 
Я ожидал, что если они хранятся как целые, то и арифметика с ними будет точной. Ведь написано, что этот тип данных введен в целях минимизации ошибок округления при выполнении денежных вычислений. А вот на деле ...
 
А в MS SQL Server  Currency - это numeric (18,4) - точное двоично-десятичное число.
 
Вообще интересно кто и как работает с деньгами, вернее делает денежные вычисления, когда суммы большие и есть операнды с 6 знаками после запятой?

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 11:34 15-12-2005 | Исправлено: Bill_PHO, 12:03 15-12-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Bill_PHO
 

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

 
Слушай а как понять:
 

Цитата:
float { ( n ) }
...
The Microsoft® SQL Server™ float[(n)] data type conforms to the SQL-92 standard for all values of n from 1 to 53. The synonym for double precision is float(53).
 
real
 
Floating point number data from –3.40E + 38 through 3.40E + 38. Storage size is 4 bytes. In SQL Server, the synonym for real is float(24).

 
зы:  
поздравляю с декстером.
думаю может десятибайтным бинари экстендед прикрутить как график.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 11:56 15-12-2005 | Исправлено: Pinocchio, 12:12 15-12-2005
Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
 
Я раньше не обращал на все это внимания - все как то само собой получалось и работало.
Начал копать поглубже и захотел сделать правильнее - залез в какие-то дебри.
Обнаружил, что еще и сопроцессор работает с currency, то как с float(53) - double, то как с float(64) - extended.
По крайней мере 2 режима я сам увидел причем на похожих машинах, но немного с разным установленным софтом. Какая-то софтина перевела сопроцессор из double в extended. Какая - не выяснял. Естественно при операциях, например умножения, с некоторыми числами получается разный результат в последнем знаке - результат округления.

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 12:15 15-12-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Bill_PHO
Ну это думаю регулируется директивами компилятору (когда эмулируешь, то жутко теряешь в скорости на пнях сотых, зато получаешь гарантированный резулт).  
А для гарантированного экстендед можно и uniqueidentifier использовать. Он имеет уже 16 байт - типа 6 байт (т.е. 12 букв для сортирования) а в остальные кодируешь байты с экстенда. Если не заморачиваться на неудобоваримости такого представления для sql скриптов и стандартных гридов, то можно иметь именно ту гарантированную точность.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:42 15-12-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите.
Абсолютно (почти) не посвящен в эту проблему. Мне нужно сделать что-то типа БД:
Первая таблица:
1.1  Название (уникальное)
1.2  и т.д.
...
1.х  и.т.п.
 
Вторая таблица:
2.1  Дата
2.2  Название (уникальное) 1.1
2.3  Тип (уникальное)
2.4  и т.д.
...
2.х  и.т.п.
 
Третья таблица (чисто теоретически должна быть связана со Второй, если поле 2.3 там = "1"):
3.1  Год
3.2  Месяц
3.3  Название (уникальное) 1.1
3.4  и т.д.
...
3.н  и.т.п.
 
Четвертая таблица (чисто теоретически должна быть связана со Второй, если поле 2.3 там <> "1"):
4.1  Год
4.2  Месяц
4.3  Название (уникальное) 1.1
4.4  и т.д.
...
4.н  и.т.п.
...
1. Если я правильно понимаю, нужно сделать 1-ую таблицу с первичным ключом и все остальные со связью на 1-ую.
2. Не совсем ясно как реализовать 3-ю и 4-ую таблицы (с 3.3 и 4.3 заморочки). В принципе, я сам придумал такое описание таблиц. Может быть есть смысл объединить 3 и 4 (число полей там одинаковое) и цеплять данные по 2-ой таблице.
...
Что вообще-то нужно:
1. Подскажите как это реализовать как можно проще (нужно очччень быстро, чтобы двинуться дальше)
2. Под Дельфи (5).
3. Лучше без привязки к чему-то (Работать должна и на "голых" компах). Присмотрелся к АДО... но что-то как-то вряд ли за неделю забабахаю.
4. Если есть какие-то примеры, буду признателен.
5. И вообще, нужна реализация в деталях, потому что в общем-то на пальцах я представляю что и как. Не знаю просто как вообще организовать БД именно в Дельфи, чтобы и самому в ней лазать и доступна чтобы была.
6. Желательно, чтобы была возможность запросов простеньких.
7. Нужна выгрузка в ТХТ читаемый. (Все будет храниться в ТХТ файлах), Таблицы будут работать во время работы приложения.
8. БД очень маленькая. Скорость доступа/работы не принципиальна (пока ).
 
Буду очень признателен, если кто-то поможет с проблемой
 
 
ЗЫ: а то на Новый Год у Деда Мороза буду вазелин просить

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 12:47 15-12-2005
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Z MeZe
Есть такая книга "Delphi. Разработка баз данных", где все очень популярно расписано. что и как делать.

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 13:55 15-12-2005
imonah



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Z MeZe
Прямо вот сидеть и писать тут никто за тебя не будет, как ты понимаешь А вот инфой поделиться могу:
Программирование баз данных в Delhpi
http://www.delphikingdom.com/asp/nets.asp?ItemID=19  -  см. внизу страницы, там  подробно рассказано об индексах и ключевых полях, то, что тебе понадобится для связывания таблиц.
 
http://www.delphiworld.narod.ru/_db_.html
Вот тут исчерпывающая инфа о БД, их типах и строении. Расчитано больше на профи, но опять таки, прокрути до конца, там в последних разделах справочная инфа по основам постоения и работы с БД в Delphi.
 


----------
Не относитесь к жизни слишком серьезно, вам все равно не уйти из нее живым :)

Всего записей: 1376 | Зарегистр. 07-02-2003 | Отправлено: 14:13 15-12-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Z MeZe
Есть ещё метод - медитация.  
Берёшь и представляешь себе вместо базы данных массивы рекордов и списки объектов. Массивы могут быть выборками из базы, а на списки объектов это надо много кода делать (инит, клеар, в базу, из базы, и т.п.).
Когда предмет медитации начинает вырисовываться, кладёшь пальцы на клавиатуру и запускаешь пасьянс.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 14:24 15-12-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PowerChute

Цитата:
"Delphi. Разработка баз данных"

Которая Андрея Сорокина? Нашел, Скачал, обчитаться мне теперь , Спасибо.
 
imonah

Цитата:
Прямо вот сидеть и писать тут никто за тебя не будет, как ты понимаешь

Хе, фирштейн есссенно.

Цитата:
А вот инфой поделиться могу:

Спасибо, спасибо.
 
 
 
Добавлено:
Pinocchio
шутить, блин, я тоже умею

Цитата:
Есть ещё метод - медитация.  
Берёшь и представляешь себе вместо базы данных массивы рекордов и списки объектов. Массивы могут быть выборками из базы, а на списки объектов это надо много кода делать (инит, клеар, в базу, из базы, и т.п.).  
Когда предмет медитации начинает вырисовываться, кладёшь пальцы на клавиатуру и запускаешь пасьянс.

Красиво придумано, долго размышлял или руки писали?

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 14:28 15-12-2005
Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Z MeZe
 

Цитата:
Есть ещё метод - медитация.    
Берёшь и представляешь себе вместо базы данных массивы рекордов и списки объектов. Массивы могут быть выборками из базы, а на списки объектов это надо много кода делать (инит, клеар, в базу, из базы, и т.п.).  
Когда предмет медитации начинает вырисовываться, кладёшь пальцы на клавиатуру и запускаешь пасьянс.  
 
Красиво придумано, долго размышлял или руки писали?

 
Самое интересное, что это не шутка, а чистая правда.
Пока не вникнешь в саму сущность решаемой задачи, пока не представишь себя на месте этой сущности - как правило, не сделаешь все путем.

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 14:46 15-12-2005 | Исправлено: Bill_PHO, 14:49 15-12-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Самое интересное, что это не шутка, а чистая правда.  
Пока не вникнешь в саму сущность решаемой задачи - не сделаешь все путем.

Bill_PHO
В ссуть-то я вник,.. мозгов не хватает (пока) реализовать, буду шарить, мож доведу до конца.
...
А медитировать буду потом .

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 14:50 15-12-2005
imonah



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pinocchio
Если ничем помочь не можешь, то не городи чушь. Либо помогай, чем можешь, либо не мешай.  
(отредактировано)

----------
Не относитесь к жизни слишком серьезно, вам все равно не уйти из нее живым :)





по сути но мягче надо, либо в приват.

Всего записей: 1376 | Зарегистр. 07-02-2003 | Отправлено: 23:42 15-12-2005 | Исправлено: imonah, 11:37 16-12-2005
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
imonah
Читай пост:

Цитата:
Самое интересное, что это не шутка, а чистая правда.  
Пока не вникнешь в саму сущность решаемой задачи, пока не представишь себя на месте этой сущности - как правило, не сделаешь все путем.

Считаю что уже помог (там где про много кода писать, там без сарказма).

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:54 16-12-2005 | Исправлено: Pinocchio, 13:27 16-12-2005
VC7



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Z MeZe
 

Цитата:
2. Не совсем ясно как реализовать 3-ю и 4-ую таблицы (с 3.3 и 4.3 заморочки). В принципе, я сам придумал такое описание таблиц.

 
 
Для связи таблиц  
 
 DataModule1.Table3.Append;
 
  DataModule1.Table3.Edit;
    DataModule1.Table3.FieldByName('3.3').AsInteger:=
      DataModule1.Table1.FieldByName('1.1').AsInteger;
  DataModule1.Table2.Post;
 
Для вывода  
 
 with DataModule1.Table3 do
   begin
      Active:=False;
      Filter:='3.1='+DataModule1.Table1.FieldByName('3.3').AsString;
      Filtered:=True;
      Active:=True;
   end;
 

Цитата:
6. Желательно, чтобы была возможность запросов простеньких.

Для написания используй компонент Query со вкладки BDE
 
Пример
Select * from Имя таблицы
 

Цитата:
7. Нужна выгрузка в ТХТ читаемый. (Все будет храниться в ТХТ файлах), Таблицы будут работать во время работы приложения.

 
var  F: TextFile;
   begin
    AssignFile(F,'Имя файла.txt'); //-создаем файл
    Rewrite(F); // - переписываем его
    Writeln(F,'+---+-------+-------------------+--------+');
    with DataModule1.Table1 do
    begin
       DisableControls;
       First;  
       while not EOF do
       begin
          Write(F,'|');
          Write(F,' '+FieldByName('Имя поля').AsString);
          Writeln(F,'|');
          Next;
       end;  
       CloseFile(F);
       EnableControls;
     end;
 
З.Ы. Дерзай все в твоих руках

Всего записей: 8 | Зарегистр. 11-11-2005 | Отправлено: 13:13 16-12-2005 | Исправлено: VC7, 13:15 16-12-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VC7
Спасибо.

Цитата:
Для написания используй компонент Query со вкладки BDE

Вообще-то не хотелось BDE,.. хотя...
Ну, в общем-то, очень даже прилично.
Спасибо

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 13:29 16-12-2005
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1-я таблица
ID
Название
  и.т.п.  
 
2-я таблица
ID
ID из первой  
Вторая таблица:  
2.1  Дата  
2.3  Тип (уникальное)  
2.4  и т.д.  
...  
2.х  и.т.п.  
 
 
Третья таблица (чисто теоретически должна быть связана со Второй, если поле 2.3 там = "1"):  
ID
ID из второй
3.1  Год  
3.2  Месяц  
3.4  и т.д.  
...  
3.н  и.т.п.  
 
Четвертая таблица (чисто теоретически должна быть связана со Второй, если поле 2.3 там <> "1"):  
ID
ID из второй.
4.1  Год  
4.2  Месяц  
4.4  и т.д.  
...  
4.н  и.т.п.  
 
т.е. убирай всю дублирующуся информацию, в противном случае при обновлении будешь получать бяку.
Если третья и четвертая таблица одинаковы по структуре, храни данные в одной, возможно добавишь какой-либо признак.
получать выборку будешь примерно так:
это тертья таблица
Select t3.*, t1.name from table3 t3, table1 t1, table2 t2
where (t2.тип = 1) and (t2.id=t3.id из второй) and (t2.id из первой = t1.id)
это четвертая таблица
 
Select t3.*, t1.name from table3 t3, table1 t1, table2 t2
where (t2.тип <> 1) and (t2.id=t3.id из второй) and (t2.id из первой = t1.id)

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 14:27 16-12-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vserd
Ясно, спасибо.
Но дело в том, что теоретически (в голове, на бумаге ...), я представляю всю структуру, все связи, всю БД.
Проблема в том, что руки коряво подточены под Дельфи... Вот собсснноо и все.
Я бы живую реализацию посмотрел бы.
Где делать, как делать.
 
В принципе, описание БД можно жестко обозначить (динамически структура изменятся пока не будет) (НО ГДЕ И КАК ).
Сразу же обозначить все связи (ключи, признаки ...) (НО ГДЕ И КАК )
А заполнять таблицы уже в программе или подгружать.
 
Возможно ли вообще СОЗДАТЬ структуру БД один раз, а далее ей пользоваться?
Можно ли ее (структуру) таскать за собой и в рабочем виде держать на других "голых" компах?

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 15:03 16-12-2005
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Z MeZe

Цитата:
 
 Но дело в том, что теоретически (в голове, на бумаге ...), я представляю всю структуру, все связи, всю БД.  
 

Не представляешь. Мне только один раз понадобилось, чтобы в зависимости от поля выбиралась таблица. И то - исключительно по причине лени, а сроки жали. А у тебя, как я понял, ВСЕ таблицы так связаны. А так просто не бывает.  
Мой тебе совет: если относишься к своему проекту сколько-нибудь серьезно, то лучше найди рядом кого-нибудь, кто уже проектировал базы данных. И с ним уже общайся на предмет и теории и практики. Иначе научишься делать неправильно, а потом долго и печально будешь переучиваться.
Просто по твоему посту видно - СУБД не занимался. Особенно это по вопросам видно.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 16:25 16-12-2005
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru