![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с большим числом [D5, IB6.x]
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-контролы к большому сожалению имеют массу минусов: затягивают транзакции во времени, уменьшают контроль программиста над данными и пр. Стараюсь не использовать их.