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

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

Работа с большим числом [D5, IB6.x]


Страницы:   1 2

Andrey V. ©   (2004-02-08 10:29:00) 

Возникла необходимость хранить в базе большое число
(~13 знаков).
В базе создал NUMERIC (15,0), а с интерфейсом запнулся.
Стандартные vclы не подходят.
TSpin подошел бы, но он не может работать с числом больше integer.
TCurrencyEdit (от RX) кажет всякие "E" , что нежелательно.
Пришлось сотановиться на TEdit.
Теперь не могу пинуть его содержимое в базу , ругается ... numeric overflow ...

Ну не хранить же его в текстовом виде ?? (хотя ...)


KA_   (2004-02-09 14:11:00) [1]

>Vlad © (09.02.04 13:36) [28]
> Ты чего-то путаешь.

Точно.


Vlad   (2004-02-09 13:36:00) [2]


> IBX - интересно как открыть dataset (для того же ввода
> данных в DB-контролы) без активной транзакции

Ты чего-то путаешь. Сам сказал - есть пишущая транзакция, и есть читающая. Так вот, когда открываешь датасет(для ввода, просмотра, удаления, чего угодно) - активна читающая транзакция (и она будет активна не зависимо от того, используешь ты DB контролы или нет). Пишущую транзакцию ты открываешь только в момент непосредственной записи в базу. Ну не причем тут DB-контролы !


KA_   (2004-02-09 13:17:00) [3]

>Johnmen © (09.02.04 12:35) [19]
>У меня неактивна...:)

>Mike Kouzmine © (09.02.04 12:52) [24]
> Любой.

Поделитесь, как это реализовано???
BDE - согласен, но одна TDatabase = одна транзакция
IBX - интересно как открыть dataset (для того же ввода данных в DB-контролы) без активной транзакции
FIB+ - как и IBX
IBAPI - тут, конечно, все в твоих руках

Ни с чем другим пока не работал.


Vlad   (2004-02-09 13:17:00) [4]


> KA_ © (09.02.04 13:01) [25]
> >Vlad © (09.02.04 12:49) [23]
> Нет, конечно. TDBGrid очень даже использую.

TDBGrid используешь, и в тоже время ты не сторонник использования других DB-aware контролов. Ничего не понимаю.
Ну... видимо дело вкуса :-)


KA_   (2004-02-09 13:01:00) [5]

>Vlad © (09.02.04 12:49) [23]
Нет, конечно. TDBGrid очень даже использую.


Mike Kouzmine   (2004-02-09 12:52:00) [6]

KA_ © (09.02.04 12:40) [22] Любой.


Vlad   (2004-02-09 12:49:00) [7]


> KA_ © (09.02.04 12:40) [22]

То что пишущая транзакция не будет висеть - это очевидно. Ты другое скажи: ты что, правда (согласно твоей логике) используешь напр. TStringGrid вместо TDBGrid ?


KA_   (2004-02-09 12:40:00) [8]

>Johnmen © (09.02.04 12:38) [21]
BDE, IBX, FIBPlus, ODBC, чистый IBAPI...


Johnmen   (2004-02-09 12:38:00) [9]

>KA_ © (09.02.04 12:37) [20]

Что такое "механизм доступа" ?


KA_   (2004-02-09 12:37:00) [10]

>Johnmen © (09.02.04 12:35) [19]

Механизм доступа какой?


Johnmen   (2004-02-09 12:35:00) [11]

Добавлю, что вообще непонятно, как можно, при грамотном написании, обеспечить "висящую" пишушую тр-ию ???........
>Пока пользователь вводит данные (через DB-контролы) транзакция
>(созданная дл яввода данных) активна.
У меня неактивна...:)


KA_   (2004-02-09 12:34:00) [12]

>Vlad © (09.02.04 11:58) [17]
> Применительно к IB
О нем и речь.

а у него висит окошко с DB-aware контролами это не значит что у него будет висеть пишущая транзакция. Ее не будет до тех пор, пока пользователь не вызовет метод Post

А DataSet у тебя к чему подключен? Не к транзакции? Или используешь ClientDataSet?


Vlad   (2004-02-09 11:58:00) [13]


> KA_ © (09.02.04 11:39) [15]

Применительно к IBобычно действительно рекомендуется разделять пишущие и читающие транзакции.
Но. Если пользователь ушел курить или спать или неважно куда, а у него висит окошко с DB-aware контролами это не значит что у него будет висеть пишущая транзакция. Ее не будет до тех пор, пока пользователь не вызовет метод Post или явно не откроет транзакцию.

P.S. Неужели ты вместо DBGrid используешь TStringGrid ? Судя по твоей логике нужно делать именно так...
P.P.S. TDBEdit является наследником того же TCustomEdit, не понимаю как он может связывать по рукам и ногам


Andrey V.   (2004-02-09 11:51:00) [14]

> Стандартные vclы не подходят.
> Пришлось сотановиться на TEdit.

:-)
Я , конечно не так выразился, имелись ввиду компоненты
работающие с числами, их вводом в смысле. Типа Spinа.
DB-Aware я не использую , это уже отдельная тема , и действительно для Потрепаться.
На форме набросаны TEditы и т.п.
Затем , по нажатию кнопки "сохранить" делается что-то типа
UPDATE ... SET SomeField1=:SomeField1
а затем

ParamByName("SomeField1").AsString:=EditSomeField1.Text

Ну и что сдесь такого? Вот так я работаю ... Если я не правильно делаю , так научусь когда-н. и правильно делать (наверно).
Все было хорошо , пока не пришлось ввести ЧИСЛО(большое в смысле)
И со стороны IB как раз проблем нет.
Ну да ладно. Сделал я в итоге текстовое поле , черт с ним.

ЗЫ. Чуствую , я на пол-пути в Потрепаться :-[ ]


KA_   (2004-02-09 11:39:00) [15]

>Vlad © (09.02.04 11:08) [14]
> 1) какое отношение DB-Aware контролы имеют к транзакциям в БД

Рассмотрим обычную ситауцию - ввод данных. Пока пользователь вводит данные (через DB-контролы) транзакция (созданная дл яввода данных) активна. Это часто приводит к появлению конфликтов с другими пользователями (оператор может долго думать, или пойти покурить, вспомнить о включенном дома утюге и т.д.)
Общее правило построения многопользовательских приложений БД - транзакции должны быть еще короче.
Без использования DB-контролов приходится загонять данные ручками в стандартные контролы. Зато транзакции укорачиваются - запустил транзакцию, прочитал данные, занес в контролы, закрыл. Пользователь может редактировать сколько хочет. Когда захочет сохранить - снова запускаем транзакцию, пишем, закрываем.
Правда такой подход требует бОльших телодвижений.

Я обычно завожу вообще две транзакции - одну только для чтения (обычно она мало нагружает сервер), другую для дабавления/удаления/редактирования. Читающая может быть сколь угодно долгой, а пишущая должна быть короткой.

> 2) каким это образом TDBEdit может уменьшать контроль над данными по сравнению с TEdit

Не всегда данные в БД подчиняются простеньким правилам. При необходимости выполнять сложные проверки DB-контролы связывают по рукам и ногам.

P.S. Повторяю, все написанное - лишь мое личное мнение.


Vlad   (2004-02-09 11:08:00) [16]


> KA_ © (09.02.04 10:54) [13]

Я просто никак в толк не возьму:
1) какое отношение DB-Aware контролы имеют к транзакциям в БД (или поясни, о каких транзакциях идет речь ?)
2) каким это образом TDBEdit может уменьшать контроль над данными по сравнению с TEdit ?


KA_   (2004-02-09 10:54:00) [17]

>Vlad © (09.02.04 10:49) [12]
>ИМХО, фигня полная.

Спасибо, отец, утешил.


Vlad   (2004-02-09 10:49:00) [18]


> KA_ © (09.02.04 10:45) [10]

Я не об этом. Я о противоречии двух строк из поста автора :-)
То что ты стараешься их не использовать- это твое право, но вот это:


> DB-контролы к большому сожалению имеют массу минусов: затягивают
> транзакции во времени, уменьшают контроль программиста над
> данными и пр.


ИМХО, фигня полная.


Anatoly Podgoretsky   (2004-02-09 10:48:00) [19]

Vlad © (09.02.04 10:31) [9]
Только вот почему он свое горе здесь извлекает, а не в потрепаться, этот же форум предназначен для решения вопросов, а не для соболезнований.


KA_   (2004-02-09 10:45:00) [20]

>Vlad © (09.02.04 10:31) [9]
>Дейсвительно, грусная история... ;-)

ИМХО, самый верный вариант. DB-контролы к большому сожалению имеют массу минусов: затягивают транзакции во времени, уменьшают контроль программиста над данными и пр. Стараюсь не использовать их.


Страницы:   1 2

Наверх

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