Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: dsk
Дата сообщения: 06.04.2012 22:53

Цитата:
Подскажите есть ли возможность в DOA (используя свойства OracleSession или другого компонента) периодически посылать запрос на Oracle, чтобы не рвалась сессия, которая рвется при бездействии?

Я использовал TTimer и select sysdate from dual
Всегда помогает, если нужно чтобы сессия висела долго. А можно в оракле отключить прибивание сессий по таймауту неактивности
Автор: MrZeRo
Дата сообщения: 09.04.2012 12:24
Можно попытаться решить на уровне Оракла:
хттп://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_2007.htm
То есть после подключения выполнить команду
ALTER PROFILE my_profile LIMIT CONNECT_TIME UNLIMITED
А то неизвестно с какой частотой надо дергать сервер, да и лишняя нагрузка ни к чему.
Автор: tanaseduard
Дата сообщения: 12.04.2012 08:49
Кратко.
Есть ПО которое работает на базе пакетов. Каждый модуль ПО это пакет. При загрузку вызывается LoadPackage и при выгрузке UnloadPackage.
Есть в пакете с набором библиотек модуль для транслитерации по ГОСТУ для ОВИР.

Код:
Unit xelTranslit;

Interface

Const
CirylicUkr:String='АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЬЮЯ‘aбвгґдеєжзиіїйклмнопрстуфхцчшьюя';
CirylicUkrLatOvir:Array[1..65] Of String=(
'A','B','V','H','G','D','E','Ie','Zh','Z','Y','I','I','I','K','L','M','N','O','P','R','S','T','U','F','Kh','Ts','Ch','Sh','','Iu','Ia','',
'а','b','v','h','g','d','e','ie','zh','z','y','i','i','i','k','l','m','n','o','p','r','s','t','u','f','kh','ts','ch','sh','','iu','ia');
CirylicRus:String='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя';
CirylicRusLatOvir:Array[1..66] Of String=(
'A','B','V','G','D','E','Yo','Zh','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','Kh','Ts','Ch','Sh','Shch','''','Y','''','E','Yu','Ya',
'a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','kh','ts','ch','sh','shch','''','y','''','e','yu','ya');

Function TranslitCirilicToLatOVIR(Const ACirylic:String):String;

Implementation

Function TranslitCirilicToLatOVIR(Const ACirylic:String):String;
Var
pu,i,l:integer;
Begin
Result:='';
l:=Length(ACirylic);
For i:=1 To l Do
Begin
pu:=Pos(ACirylic[i],CirylicUkr);
If pu<1 Then
Result:=Result+ACirylic[i]
Else
Result:=Result+CirylicUkrLatOvir[pu];
End;
End;

End.
Автор: Frodo_Torbins
Дата сообщения: 12.04.2012 10:44
tanaseduard
Как вызывается эта функция из другого модуля, как экспортируется?
А вообще юзайте Process Explorer. Он вам покажет не только какие модули когда загружаются, но и многое другое.
Автор: ant0ni02004
Дата сообщения: 12.04.2012 15:18
tanaseduard


Цитата:
Строки CirylicUkr и CirylicRus пустые


похоже что глюки

а CirylicUkrLatOvir и CirylicRusLatOvir не пустые?
тогда попробуйте те, что пропадают объявить аналогично (Array) или shortstring-ами
Автор: tanaseduard
Дата сообщения: 14.04.2012 18:14
ant0ni02004
Массивы тоже пустые.
Автор: neznayka3
Дата сообщения: 15.04.2012 04:49
есть таблица документов, и связанная с ней таблица файлов(id_file, id_doc, file_name, file_content<blob>). при добавлении документа гружу все поля таблицы файлов, добавляю и сохраняю. не знаю, как быть при изменении документа, там тоже надо изменять файлы. если грузить все поля, то блобы грузятся долго. если только (id_file, id_doc, file_name) то как изменять файлы?

добавление/изменение делается c CachedUpates=true;
Автор: Frodo_Torbins
Дата сообщения: 16.04.2012 19:52
neznayka3
Как насчет дополнительного кюэри с селектом конкретного id_file? Получится что то типа мастер-деталь.
Автор: neznayka3
Дата сообщения: 17.04.2012 13:40
Frodo_Torbins
в AnyDac есть опция не грузить блобы. теперь все хорошо.

Как справляетесь с кучей однотипных справочников? есть две таблицы, одна для названий справочников, другая для значений. подходит к концу 2-й дата модуль - места нет. думаю создавать их вручную, но тогда неудобно их связывать с lookup полями и тд.
Автор: Frodo_Torbins
Дата сообщения: 18.04.2012 13:08
neznayka3
Может быть визуальное наследование форм поможет?
Автор: ant0ni02004
Дата сообщения: 18.04.2012 14:56
neznayka3

если есть возможность отказаться от lookup-полей (т.е. получать значения прямо в SQL)- то отказываемся от lookup-ов, а форму выбора/редатирования из справочника делаем настраиваемой (таблица, названия полей итд)

если нет, тогда есть вариант создавать все справочники динамически, и динамически же назначать лукапы (в IDE оставляем пустыми LookupDataSet, в коде проставляем перед открытием)


Цитата:
Может быть визуальное наследование форм поможет?


поможет примерно так - вместо дофига TDataSet будет дофига TForm
да и вопрос с lookup-ами не снимает
Автор: neznayka3
Дата сообщения: 19.04.2012 19:46
Frodo_Torbins использую, но не поможет.
ant0ni02004 буду динамически.

какие паки иконок используете для приложений? раньше использовал glyfx, но сейчас не хватает. пока выбрал IconShock - Real Vista


Автор: MrZeRo
Дата сообщения: 20.04.2012 15:55
Есть отдельные темы по иконкам ... По хорошему надо рисовать самому - тогда нет проблем с копирайтом. Если на копирайт на...ть, то лично мне нравится пакет выдранных иконок из Майкрософт_Офиса
Автор: tanaseduard
Дата сообщения: 09.05.2012 13:24

Подскажите можон ли для инструмента Extract Resource String в Refactoring меню установвить свой хоткей?

Добавлено:
Подскажите можно ли для инструмента "Extract Resource String" в "Refactoring" меню установить свой хоткей?
Автор: Frodo_Torbins
Дата сообщения: 09.05.2012 13:46
tanaseduard
С помощью cnWizards вроде можно.
Автор: AlexCoRu
Дата сообщения: 09.05.2012 16:25
Данные организованы следующим образом:
IBCStoredProcedure1->DataSetProvider1->ClientDataSet1
IBCStoredProcedure2->DataSetProvider2->ClientDataSet2
IBCStoredProcedure2->DataSetProvider2->ClientDataSet3
IBCStoredProcedure3->DataSetProvider3->ClientDataSet4

IBCStoredProcedure2 и DataSetProvider2 в обоих случаях одно и тоже. Нужны для создания независимых курсоров на IBCStoredProcedure2.

ClientDataSet1 имеет вычисляемые поля зависящие от полей данных в ClientDataSet2 и ClientDataSet4. Как обновить (пересчитать) эти вычисляемые поля? ClientDataSet1.Refresh не обновляет, ClientDataSet1.Close ClientDataSet1.Open обновляет, но при этом дёрнет ли IBCStoredProcedure1 (т.е. будет ли запрос к СУБД)?
Если будет, то как избежать обращения к серверу для обновления вычисляемых полей?
Автор: ant0ni02004
Дата сообщения: 09.05.2012 19:23
AlexCoRu
AutoCalcFields попробуйте
Автор: AlexCoRu
Дата сообщения: 09.05.2012 20:19
Изменил своё предыдущее сообщение. Дополнил схему. Вообще-то я правильно делаю используя ClientDataSet, что бы один и тот же датасет IBCStoredProcedure2 в разных гридах отображать независимо?

ant0ni02004, т.е AutoCalcFields := True? Оно везде True.

Вобщем-то вычисляемые поля фактически lookup-поля, только lookup многошаговый, такой релейшн:
ClientDataSet1-[ClientDataSet1.ID]->ClientDataSet2-[ClientDataSet2.ID]->ClientDataSet4
ClientDataSet1.CalcField1 есть соответствующее ClientDataSet2.DataField и
ClientDataSet1.CalcField2 есть соответствующее ClientDataSet4.DataField
При изменении ClientDataSet1.ID ClientDataSet1.CalcField1 и ClientDataSet1.CalcField2 принимают новые значения и это радует. Но при изменении ClientDataSet2.ID - нет. Вроде, так понятней должно быть?
Не хочется дёргать сервер, если все данные уже есть в памяти.
Автор: Frodo_Torbins
Дата сообщения: 10.05.2012 11:36
AlexCoRu
Так какого именно типа у вас поля? Lookup, calculated, internalcalc?
Автор: AlexCoRu
Дата сообщения: 10.05.2012 11:52
Calculated. В обработчике OnCalcFields вызывается метод Lookup.
[more=Фрагмент кода]
Код:
procedure TTrackerData.NodeClient1CalcFields(DataSet: TDataSet);
var
ID: Variant;
begin
ID := EquipmentSource.DataSet.Lookup('ID', DataSet.FieldByName('EQUIP_ID').Value, 'HOST_ID');
DataSet.FieldByName('HOST_DESCRIPTION').Value := HostSource.DataSet.Lookup('ID', ID, 'DESCRIPTION');

ID := HostSource.DataSet.Lookup('ID', ID, 'PLACE_ID');
DataSet.FieldByName('PLACE_DESCRIPTION').Value := PlaceSource.DataSet.Lookup('ID', ID, 'DESCRIPTION');
end;
Автор: Frodo_Torbins
Дата сообщения: 10.05.2012 12:07
AlexCoRu
Пересчет Calculated поля происходит при каждом чтении его значения. Если у вас изменились данные в ClientDataSet2, то вам надо заставить обновится дб-контрол, привязаный к ClientDataSet1.
Автор: AlexCoRu
Дата сообщения: 10.05.2012 12:28
Контрол это TcxGridDBTableView. Осталось додуматься как заставить обновиться конкретную колонку TcxGridColumn.
Автор: ant0ni02004
Дата сообщения: 10.05.2012 15:43
AlexCoRu
сделать
Код: AutoCalcfields:=false;AutoCalcfields:=true;
Автор: AlexCoRu
Дата сообщения: 11.05.2012 16:10
ant0ni02004
Как обновить колонку не нашёл, но всю вьюху вполне можно и довольно-таки быстро:
TableView.DataController.UpdateItems(False);
Автор: AlexCoRu
Дата сообщения: 12.05.2012 10:45
Как заставить ClientDataSet получать, возращаемое провайдерским DataSet, значение?
IBCStoredProcedure1->DataSetProvider1->ClientDataSet1
IBCStoredProcedure1.SQLInsert := 'EXECUTE PROCEDURE EQUIP_CLASS_INSERT(:DESCRIPTION)';
[more=Хранимая процедура EQUIP_CLASS_INSERT на firebirde]

Код: create or alter procedure EQUIP_CLASS_INSERT (
DESCRIPTION type of column EQUIP_CLASS.DESCRIPTION not null)
returns (
ID type of column EQUIP_CLASS.ID)
as
begin
insert into EQUIP_CLASS (DESCRIPTION)
values (:DESCRIPTION)
returning ID
into :ID;
end
Автор: Coltrain
Дата сообщения: 16.05.2012 16:26
AlexCoRu
IBCStoredProcedure1 - это из IBDAC?
Каким событием со стороны ClientDataSet1 активизируется вызов хранимой процедуры IBCStoredProcedure1.SQLInsert? По Open? Или по Insert?
Скорее всего, по Insert. И надо вернуть сгенерированный идентификатор. Плохо себе представляю логику работы компоненты IBCStoredProcedure1 при вставке, но после вставки получает ли датасет IBCStoredProcedure1 значение идентификатора ID? И если да, то где он его сохраняет - в Params, или сам "догадывается" подставить в нужный Field?
Короче, работает ли корректно сам IBCStoredProcedure1 без дальнейшей цепочки ->DataSetProvider1->ClientDataSet1? А то есть сомнения.
Если IBCStoredProcedure1 нормально отрабатывает и получает результат, то вызов ClientDataSet1->Refresh должен решить проблему.
Не совсем понятна необходимость
Цитата:
Output-параметр создаётся в обработчике IBCStoredProcedure1.BeforeUpdateExecute.

"Знает" ли про этот параметр ClientDataSet1? А при повторной вставке он что, опять создается? O_o
Автор: neznayka3
Дата сообщения: 09.06.2012 08:48
как сохранить/выгрузить форму из бд? шаблоны excel хранятся в бд, хочу чтобы при выборе отчета, грузилась форма для выбора параметров отчета.
Автор: ant0ni02004
Дата сообщения: 09.06.2012 21:16
neznayka3
хранить форму в БД это будет слишком... да и зачем?
другое дело - хранить параметры, т.е. значения полей формы - вот тут есть где разбежаться
ведь задача скорее всего в этом
З.Ы.
при большом желании, конечно можна с сериализацией поиграться, статьи есть в нете
Автор: MrZeRo
Дата сообщения: 10.06.2012 10:53
neznayka3
Посмотрите в сторону WriteComponent / ReadComponent.
Не так просто с обработчиками событий, если они нужны, но решаемо.
Если исключительно для параметров отчета, можно бы попробовать TValueListEditor - одна форма и разные параметры ввода при необходимости.
Автор: XPerformer
Дата сообщения: 16.06.2012 08:29
ant0ni02004

Цитата:
neznayka3

если есть возможность отказаться от lookup-полей (т.е. получать значения прямо в SQL)- то отказываемся от lookup-ов, а форму выбора/редатирования из справочника делаем настраиваемой (таблица, названия полей итд)

если нет, тогда есть вариант создавать все справочники динамически, и динамически же назначать лукапы (в IDE оставляем пустыми LookupDataSet, в коде проставляем перед открытием)

Цитата: Может быть визуальное наследование форм поможет?

поможет примерно так - вместо дофига TDataSet будет дофига TForm
да и вопрос с lookup-ами не снимает

1) Поддерживаю отказ от lookup-полей - если в гриде более 5 lookup-полей, начинаются ощутимые тормоза.
Вместо этого использую вычисляемые поля или тоже запрашиваю через SQL. Правда, гриды у меня нередактируемые напрямую, только через форму
2) в динамическом назначении лукапов ничего страшного нет - там же строчек пять кода, зато надежно и практично
3) для справочников использую визуальное наследование от общей формы-справочника, которая умеет практически все операции (печать, поиск и т.п.). На редактирование привязываю специфичные формы, если есть такая необходиость.
Да, форм много получается, создаются они простым копированием и переименованием файлов, зато если клиент захочет вот для этого справочника такие-то рюшики, общая система не обрастает костылями - все правки только в этой специфичной форме сосредоточены.
Да и какая проблема, что форм много... большой проект все равно тысячи файлов содержит, десятком больше...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.