![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
views in IB6 [D5, IB6.x]
koks © (2002-08-30 14:32:00)Уважаемые мастера !
Я новичок в IB6. Подскажите пожалуйста:
1. Как из прогрмы на D5 запустить сервер IB6. (Желательно предварительно проверить, установлен ли он и не запущен ли он уже)
2. Как определить наличие конкретного ViewName. т.е. мне надо создать новый view и предварительно удалить старый, если он уже есть. (с таким же именем ессно).
3. Если у меня view под гридом, смогу ли я используя TIBUpdateSSQL и ChachedUpdates организовать добавление/редактирование/удаление записей. view построен на основе SELECT-а из одной таблицы, но с очень комплексным уcловием выборки.
Val (2002-09-04 16:49:00) [1]и еще, вероятно в вашей процедурке нужно использовать AnsiCompareText
Val (2002-09-04 16:42:00) [2]FieldByName("RDB$RELATION_NAME").AsString - ну а чему это равно?
честно говоря, мне не нравится ваш метод определения существования вью.
Я бы создал квери в этой процедурке(или использовал какой-нибудь общего назначения), запрос с параметром(вх.параметр процедуры), затем проверил бы на наличие записей в возвращаемом им НД и выдавал бы как результат процедуры.
А вы бегаете последовательно по системной таблице, да еще и компонент специально для этого выделили. И неплохо бы у вас прерывать цикл поиска, когда нашли вью, зачем до конца бежать?
koks (2002-09-04 16:31:00) [3]Функция вызывается: if ViewExists("VPolished"); - никаких пробелов. CompareText проверяет строки на совпадение без учета регистра - я поэтому ее и использую...
Val (2002-09-04 16:22:00) [4]возможно несовпадение в регистре букв? посмотрите в Watch List, например. Да и на пробелы следует обратить внимание, возможно.
koks (2002-09-04 16:03:00) [5]2Val
нет, они обинаковыми быть не могут...
Не пойму, почему не работает:
function TdmWork.ViewExists(ViewName: string): boolean;
begin
Result := false;
with IBTViews do
begin
if not Active then Open;
First;
while not Eof do
begin
if (CompareText(FieldByName("RDB$RELATION_NAME").AsString, ViewName) = 0)
then Result := true;
Next;
end;
end;
end;
Свойства:
IBTViews.TableName = "RDB$RELATIONS"
Условие If НИКОГДА не появляется... Хотя ViewName точно есть.
Val (2002-09-04 15:42:00) [6]это проверка, не является ли таблицей - просто не помню, могут ли быть одинаковые названия у вью и таблицы, поэтому и поставил.
koks (2002-09-04 15:17:00) [7]2 Val:
Объясни пожалуйста, зачем в твоем примере присутствут проверка:
and (rdb$view_source is not null);
разве первого условия не хватит..
koks (2002-09-04 10:29:00) [8]Всем огромное спасибо!
1. На PARADOX не перейду ни за что.
2. Попробую использовать вьюхи. Уж очень они хорошо "ложаться" на мою задачу. Если не пройдет буду ломать ХП.
ne (2002-09-04 05:49:00) [9]на счет запуска сервера - я это делаю так
здесь используется еще один модуль - vxIBInit.pas - это не я написал - но использую
напишите мне на мыло - я вышлю и сейчас попытаюсь выложить в кладовку
....
uses
Forms,
SysUtils,
Dialogs,
IB,
IBErrorCodes,
...
vxIBInit in "vxIBInit.pas",
...
{$R *.RES}
var
x: boolean;
s: string;
begin
Application.Initialize;
try
S := ExtractFilePath(ParamStr(0)) + ".\DATA\09.gdb";
If FileExists(S) then
begin
x := vxInitIBClient;
if X then
begin
Application.CreateForm(TDatamodule2, Datamodule2);
If Assigned(DataModule2.IBDatabase) then
begin
s := ExtractFilePath(ParamStr(0)) + "DATA\ХХХХ.gdb";
If DataModule2.IBDatabase.Connected then DataModule2.IBDatabase.Connected := false;
DataModule2.IBDatabase.DatabaseName := s;
Application.CreateForm....;
vxIBConnect(DataModule2.IBDatabase);
end;
end;
end
else ShowMessage("Не обнаружена база данных в каталоге \DATA. Работать невозможно!")
finally
end;
Application.Run;
end.
Prooksius (2002-09-03 19:53:00) [10]2 All: Ну с парадоксом я... ну это... поспешил маленько... :))))))
Хотя, в свое время работал и с ним, все было нормально (при условии нормальных настроек BDE, сети и т.д.)
Ну, конечно, я не знаю много парадокс... Сорри.
Desdechado (2002-09-03 11:26:00) [11]2 Prooksius
1. не всегда, конечно, но в большинстве случаев ХП быстрее вьюх. Пример: одно из полей возвращаемого датасета зависит от другого через подзапрос. Но это второе поле имеет всего 2 значения на выборке из 100 записей. Так в ХП первое можно посчитать всего 2 раза, а потом подставлять в результат, а во вьюхе оно будет вычисляться для каждой строки. Хотя многое зависит от качества написания ХП и конкретных условий.
2. с внешней сортировкой естественно будет тормозить :) а с внутренней - нормально.
3. насчет глюков в join первый раз слышу, хотя я не часто такое использую, мне проше еще одну ХП написать
4. я работаю на FireBird 1
2 koks
1. На парадокс НЕ переходи. Это прошлый век. Пусть там и остается. Никаких вьюх, триггеров, ХП, автоматической проверки целостности и непротиворечивости там нет. Проблем явно будет больше (см. вечные вопросы в форуме по порче индексов и т.д.). Скорость - имхо, не быстрее.
2. Стартовать IB на локальной машине можно так. Поискать в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Borland\InterBase\CurrentVersion\ServerDirectory и запустить оттуда IBGuard.exe
3. можно еще и при выходе гасить IB-сервер :)
2 Prooksius
IB совсем не пушка, а нормальное противотанковое ружье - разорвет пополам как БТР, так и коммандо :)
Val (2002-09-03 11:15:00) [12]>Prooksius © (03.09.02 10:32)
зря вы советуете человеку переходить с IB на Paradox, не учитывая ничего кроме того, что база локальная - не профессионально, по-моему. IB отнюдь не пушка, а воробьи у него или нет - неизвестно.
>koks
насчет корректного запуска сервера, думаю лучше все-таки вам узнать на ibase.ru. Там все-таки именно его спецификой занимаются.
Prooksius (2002-09-03 10:32:00) [13]2 Desdechado: Вчера пробовал. Ну не получается быстрее.
Раскажи, как ?
Без сортировки - одинаково, с сортировкой (внешней), SP страшно тормозит т.к. сервер планирует запрос с вью правильнее, чем с SP.
С вью используются индексы, а с ХП - sort и все тут. :-(
Хотя, конечто, оптимизатор в IB не самый лучший...
В дополнение, если join-ить в запросах SP и table, могут быть глюки на сервере вплоть до его падения (может, уже пофиксили, незнаю).
Вообще-то я работаю на IB 5.6. Может, в этом дело... :-)
2 koks: В таком случае (как я понял, у тебя только локальная база), тебе не следует пользоваться IB.
Переходи на Paradox. Будет и быстрее, и меньше проблем..
Ну не нужно тебе стрелять пущкой по воробьям.
koks (2002-09-03 09:35:00) [14]2 Prooksuis. Я хочу сделать так, как работает IBConsole. Если ее запускаешь, а сервер не запущен, то, при попытке залогиниться на сервер она спрашивает "А не запустить ли его"... (как Local Server ecсно)
Мою программу будет юзать человек, который вздрагивает при слове "сервер". Если я ему скажу примерно следующее "Вам нужно запускать сервер вручную" - он будет ..... ну скажем так - не поймет.
А постоянно вешать сервер "по умолчанию" жалко - машина слабая, office и пр. и так тормозят.
Desdechado (2002-09-02 17:24:00) [15]2 Prooksius © (02.09.02 16:16)
а ты попробуй несколько полей возвращаемого датасета достать подзапросами из вьюхи - и поймешь всю мощь переменных в ХП :)
а сортировку с ХП тоже можно сделать (как внутри, так и к результату)
Prooksius (2002-09-02 16:54:00) [16]2 koks: Зачем тебе запускать сервер?
koks (2002-09-02 16:51:00) [17]2 Prooksius
Зачем что 1,2,3 или все вместе... я же уже про кое-что писал.
Prooksius (2002-09-02 16:16:00) [18]2 Desdechado: Обоснуй, пожалуйста, что View в IB работает медленнее. Только что создал вью и эквивалентную процедуру: работают одинаково. К тому же, если еще надо отсортировать по каким-либо полям (заранее неизвестно), с вью это сделать IMHO легче.
2 koks: Объясни зачем это тебе.
koks (2002-09-02 15:05:00) [19]Спасибо.... а как с запуском сервера...
Val (2002-09-02 12:09:00) [20]примерно так:
select rdb$procedure_name
from rdb$procedures
where ...;