Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объясните разницу между DDL и DML. И еще кое-что :)... / 25 сообщений из 36, страница 1 из 2
02.03.2004, 18:14
    #32428499
Объясните разницу между DDL и DML. И еще кое-что :)...
Уважаемые!

Просьба не бить ногами сразу - интербейз я только изучаю, но делаю это, так сказать, в процессе переписывания приложения, работавшего через БДЕ с парадоксовскими таблицами.

Основная мысль - по возможности перенести всю логику приложения на сервер, дабы максимально облегчить клиента. В идеале - чтобы все функции работали исключительно на сервере, а клиент с помощью ХП инициировал определенные процессы в определенное время. Пока до чего дошел - к сожалению, в таком виде проблема нерешаема. Например - в ХП/триггерах невозможно использовать DDL-вызовы, т.е. ни инициировать генератор, ни создать таблицу в теле ХП я не могу :(. А надо...

Потом - существует ли серверный процесс, в контексте которого я могу выполнять определенные действия? Ну что-то типа того, чтобы при открытии базы сервер выставлял бы начальное значение генератора - если оно равно нулю.

Также очень помогли бы советы по выбору компонентов для Дельфи 7, с помощью которых работать с базой... Прочитав Ковязина/Вострикова (пока до середины дошел :), склоняюсь к FIBPlus - вплоть до того, что если оно будет действительно полезно, куплю... 750 р. - не те деньги, за которые стоит переживать ;). Очень буду благодарен за ссылку на русский ресурс, посвященный FIBPlus.

Программер из меня... кгхм... слабенький - основная деятельность - администрирование сетей Netware. Так что сразу прошу прощения за глупые вопросы :)
...
Рейтинг: 0 / 0
03.03.2004, 03:15
    #32428782
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
привет
Ногами бить не буду :)) тем более ты начал с самого правильного с изучения литературы, значит далеко пойдешь, если нужно будет.

далее по делу. Логику перенести на сервер, очень верная мысль. Так будет проще разобраться и с безопасностью, и расчитать какие-то параметры, и уменьшить трафик на сети. В ХП создавать процы, таблицы и прочие объекты и не нужно. Достаточно сделать один раз и пользоваться. Тем самым будет нормально бэкапы работать. Вобщем нужна правильная структура сразу. Серверного процесса в твоем понимании нет. По крайней мере в интербэйзе. Вопрос, зачем нужно выставлять генератор в 0 при открытии базы? Класическое использование генератора -- создание уникальной последовательности чисел. Как правило для первичного ключа таблицы. Соответственно сбрасывать в ноль его будет более чем не прааильно. Кстате, частенько возникает беспокойство по поводу хватит ли мне генератора? даже если генерировать по одной строке в секунду в режиме 7*24 получим хватит более чем на 60 лет. И это используя только 32 разряда. А можно и 64...

По выбору компонентов. Народ вроде хвалит FIBPlus... Не знаю не юзал, но работают совсем не детские проекты у меня на IBX... тем более в семерке слышал (у меня пятерка и IBX не обновлены) существуют компоненты для написания собственного администратора для сервера... Вобщем меня они устраивают, хотя на вкус и цвет товарищей нет.

по поводу ресурса, если по IB и его клонам, то посмотри на www.ibase.ru очень приятный сайт...
...
Рейтинг: 0 / 0
03.03.2004, 08:44
    #32428883
Объясните разницу между DDL и DML. И еще кое-что :)...
StarWind - генератор мне не надо выставлять в ноль. У меня уже есть таблицы с заполненными ключевыми полями - перенес из парадокса. Вопрос был - если генератор выставлен в ноль (т.е. не инициализирован), каким образом его прописать? Я так понял, что мне надо его проиницализировать только один раз - потом он будет давать уникальные значения. Собственно - пока я не понял, во-первых, с какой стороны и в какой момент времени мне это делать. С сервера или с клиента? Если по п.1 вопрос решен - каким именно образом выставлять значение генератора run-time?

По поводу компонентов - не один раз видел в сети, да и авторы книги говорят, что IBX по сравнению с FIBPlus кривоват.

Клоны - выбрал Firebird.
...
Рейтинг: 0 / 0
03.03.2004, 09:13
    #32428928
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Может ты всё-таки сначала хоть что-то почитаешь ? Прежде, чем задавать вопросы, ответ на который на первых страницах всех книг...
:)
...
Рейтинг: 0 / 0
03.03.2004, 09:19
    #32428935
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Выставить значение генератора можно не только с помощью DDL:
Код: plaintext
SET GENERATOR GEN_TABLE001 TO xxx;

но и с помощью SQL конечно же, например нужно нам выставить его в 0:
Код: plaintext
1.
2.
3.
SELECT
  GEN_ID(GEN_TABLE001, -GEN_ID(GEN_TABLE001,  0 )) 
FROM
  RDB$DATABASE

вызов GEN_ID(GEN_TABLE001, 0) дает текущее значение, ну и в любое значение следовательно так:
Код: plaintext
1.
2.
3.
SELECT
  GEN_ID(GEN_TABLE001, -GEN_ID(GEN_TABLE001,  0 )+xxx) 
FROM
  RDB$DATABASE

А при коннекте клиента можно запускать с клиента процедуру инициализации, только при количестве клиентов больше одного(ИМХО) смысла это не имеет и программировать нужно по-другому...
А компоненты ... Я очень доволен FIBPlus http://www.fibplus.com.ua/rus/index.shtml
...
Рейтинг: 0 / 0
03.03.2004, 09:19
    #32428937
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
> Может ты всё-таки сначала хоть что-то почитаешь ?

Johnmen, человек говорит, что читал пол-книги Ковязина. Не надо так с новичками, плз. Если тебе трудно кратко ответить - подожди, может ответит кто-нибудь, и вопрос будет исчерпан
...
Рейтинг: 0 / 0
03.03.2004, 09:24
    #32428943
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
вкратце - один раз запускаете SET GENERATOR GEN_TABLE001 TO xxx; а потом (best practice) в триггере на добавление делаете new.id = GEN_ID(GEN_TABLE001, 1)
...
Рейтинг: 0 / 0
03.03.2004, 09:27
    #32428947
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
>fedd

Лично я Ковязина не читал. Неужели про генераторы во второй половине книги ? :)
Не обращай внимания на тон моего предыдущего поста, он может показаться грубоватым... Но он призван "взбодрить" автора :)
...
Рейтинг: 0 / 0
03.03.2004, 09:30
    #32428953
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
я не обращаю, я просто пытаюсь таким образом выполнять модераторские обязанности. вдруг администратор нетваре не знает что такое ":)" в твоем посте и обидится?
...
Рейтинг: 0 / 0
03.03.2004, 12:31
    #32429346
Объясните разницу между DDL и DML. И еще кое-что :)...
Johnmen и прочим - парни, я прекрасно понимаю раздражение от глупых вопросов :) Но я уже извинился заранее.

Теперь - про генераторы... В книге про генераторы - в первой половине. До того читал доку по шестому интербейзу - ибо это уже не первый подход, просто сейчас, что называется, "клиент дозерл" (с)...
Я прекрасно осведомлен про Set Generator ... Вопрос, собственно, в том - как вызвать на исполнение эту команду run-time! Ломал голову две недели - ответа пока не нашел. Почему сюда и обратился :)

Пробовал сделать через FIBPlus-компонент pFIBQuery - вбил туда:

If Select Max(ID) Grom Table=0 Then Set Generator ...

Не катит! Повесил это хозяйство на событие pFIBDatabase.AfterConnect. Ошибка вываливается и все тут!

Был бы крайне признателен за описание FIBPlus на языке родных осин. Прекрасно понимаю, что читать доки "в оригинале" есть хороший тон - мне просто некогда этим заниматься. По ряду причин. Мне нужен ответ - и быстро.

Ни на кого не обиделся и прошу прощения, если кого-то обидел :)
...
Рейтинг: 0 / 0
03.03.2004, 12:33
    #32429354
Объясните разницу между DDL и DML. И еще кое-что :)...
Да, вот еще что... Я видел в том же Ковязине, что можно выставлять значение генератора, изменяя системные таблицы... Но, во-первых, так там делать не рекомендуется, а, во-вторых, сам не люблю "недокументированные возможности". Хочется сделать именно через нормальный синтаксис SQL-команд. Ибо ковыряние в системных таблицах... От чего-то у меня печень ныть начинает при мыслях об этом... Нет, если, конечно, нельзя обойтись без этого - придется, ессно... Только зачем тогда придумали Set Generator? ;)
...
Рейтинг: 0 / 0
03.03.2004, 12:37
    #32429361
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Иван ЛевшинЯ видел в том же Ковязине, что можно выставлять значение генератора, изменяя системные таблицы...
Чушь полная. Не мог Лексей Ковязин такой бред написать.
Дежа-вю, батенька?
...
Рейтинг: 0 / 0
03.03.2004, 12:42
    #32429372
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Иван Левшин
я прекрасно понимаю раздражение от глупых вопросов


Ни в коей мере ! Никакого раздражения !

Иван Левшин
про Set Generator ... Вопрос, собственно, в том - как вызвать на исполнение эту команду run-time


В IBQuery/pFIBQuery прописать SET GENERATOR TO <новое значение>.
Есть еще такая ф-ия, как GEN_ID()

...
Рейтинг: 0 / 0
03.03.2004, 12:45
    #32429380
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Мимопроходящий
Чушь полная. Не мог Лексей Ковязин такой бред написать.


Нет не чушь. Очень даже... Но не стОит...

...
Рейтинг: 0 / 0
03.03.2004, 12:48
    #32429386
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Обидно даже немножко, что Иван Левшин не читал мой пост, где есть ответ на его вопрос...\r
все же прочитайте\r
\r
Выполняете FIBQuery со следующим текстом - генератор в нуле\r
Код: plaintext
1.
2.
3.
SELECT\r
  GEN_ID(GEN_TABLE001, -GEN_ID(GEN_TABLE001,  0 )) \r
FROM\r
  RDB$DATABASE
\r
\r
хотите в ноль по условию - пишите ХП. или так :\r
\r
Код: plaintext
1.
2.
3.
4.
5.
SELECT\r
  GEN_ID(GEN_TABLE001, -GEN_ID(GEN_TABLE001,  0 )) \r
FROM\r
  RDB$DATABASE\r
WHERE\r
   0 =(Select Max(ID) Grom Table)
\r
\r
Иван ЛевшинПрекрасно понимаю, что читать доки "в оригинале" есть хороший тон - мне просто некогда этим заниматься.\r
и кстати, для FIBPlus родной язык - русский\r
Иван ЛевшинМне нужен ответ - и быстро.\r
... моментально, торопливый вы наш
...
Рейтинг: 0 / 0
03.03.2004, 12:51
    #32429398
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
JohnmenНет не чушь. Очень даже... Но не стОит...
Повторяю, для особо упёртых, ЧУШЬ ПОРОСЯЧЬЯ !
...
Рейтинг: 0 / 0
03.03.2004, 12:58
    #32429408
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Иван ЛевшинЯ видел в том же Ковязине, что можно выставлять значение генератора, изменяя системные таблицы...
JohnmenНет не чушь. Очень даже... Но не стОит...

Пустые споры, пусть авторы приведет пример такого запроса на изменение значения генераторы через системные таблицы, мне кажется, что подобного запроса не существует в природе...

-----------------------------------------------------------------
когда я ем, я глух и нем, когда я пью, вообще дурной
...
Рейтинг: 0 / 0
03.03.2004, 13:07
    #32429426
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
это я чтоли неправильно понимаю?

человек уже понял:

Иван ЛевшинЯ так понял, что мне надо его проиницализировать только один раз - потом он будет давать уникальные значения. Собственно - пока я не понял, во-первых, с какой стороны и в какой момент времени мне это делать

ну и сделать один раз (не в "ран тайме") это из ИБЭксперта. Вот он перекачал данные из парадокса, нашел макимум и установил генератор, как сказал Могун:

SET GENERATOR GEN_TABLE001 TO xxx;

а потом, чтобы следующее число получать, нужно делать "в ран тайме" (лучше в триггере)

GEN_ID(GEN_TABLE001, 1)

по моему, это и есть то, что человеку нужно.

а вы тут че-то в системные таблицы полезли..

или я не догоняю?
...
Рейтинг: 0 / 0
03.03.2004, 13:12
    #32429436
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Если человек пишет программу, которую применяет не он один, то есть смысл, перед началом работы с базой, для подобных действий
--------------------------------------------------------------------
Это вам не шубу в трусы заправлять!
...
Рейтинг: 0 / 0
03.03.2004, 16:33
    #32429845
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Мимопроходящий
Повторяю, для особо упёртых, ЧУШЬ ПОРОСЯЧЬЯ!


Признаю, что был неправ ! Видимо подклинило меня

А то, что якобы Ковязин про это написал, лишний раз подтверждает моё предположение (сделанное еще перед первым моим постом), что автор вопроса не только не читает ответы, но и книгу не читал. А значит сознательно врал отвечающим...
Таким людям помогать неохота...

...
Рейтинг: 0 / 0
03.03.2004, 16:40
    #32429854
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
> Таким людям помогать неохота...

лично я если отвечаю, по большей части делаю это для себя! и всем советую. а для себя это нужно: чтобы не забыть самому как там что, чтобы попонтоваться, чтобы получить благодарность, еще массу причин можно найти! :)
...
Рейтинг: 0 / 0
03.03.2004, 16:57
    #32429895
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
JohnmenПризнаю, что был неправ !

Johnmen, так авторитета не заработать, если взялся за гуж, не говори...


-----------------------------------------------------------------------------
Плохая примета, когда тебе дорогу перебежала черная кошка с пустыми
ведрами.
...
Рейтинг: 0 / 0
03.03.2004, 17:07
    #32429914
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
>fedd

:)

>Могун

Э-э-э... Не понял...
Просто признал свою очевидную ошибку. Причем тут авторитет ?
...
Рейтинг: 0 / 0
03.03.2004, 17:34
    #32429976
Объясните разницу между DDL и DML. И еще кое-что :)...
Что я могу сказать :) Лишний раз убедился, что здесь - нормальный полноценный форум. Это раз... Народ, который занимается компьютерами - несколько мнящий о себе - это два... Есть еще и три - но тогда пост уже превратится во флейм :)
Итак, по порядку:

1. Могун - виноват. Действительно, в Ковязине этого нет. Про генераторы. Действительно, на с. 34 прямо сверху - Select для получения значения генератора. Собственно, вопрос про системные таблицы - если можно сделать Select - почему нельзя сделать Update без условия Where? В таблице все равно только одна строка - ее он и перепишет. Говорю сразу для любителей ткнуть носом - я размышляю. А не подаю вселенские истины. Посему прошу еще раз не судить строго. Хотя, по большому счету, мне безразлично - мне важен результат, а не ваше ко мне отношение.

Про FIBPlus - я осведомлен, где и как он делается. При этом дока, лежащая на сайте - на буржуинском. Читать на нем я читаю, но не настолько, чтобы после десятка страниц не вскипала голова. Ибо программирование и администрирование - суть разные явления со своим набором терминов и оборотов речи. Не веришь - могу переслать пару док по настройке того же ZEN - а потом попросить по-честному ответить - все ли понял и нет ли вопросов ;)

2. fedd - я понимаю, что можно руками сделать все на свете. Просто мне надо получить универсальное приложение, работающее с минимальным вмешательством рук (я не про интерфейс говорю, а про настройки). Причина - именно та, которую описал Могун .

3. Johnmen - в мыслях не держал заставлять кого-то оказывать мне помощь. Не хочется - сюда можно просто не отвечать ;). Это я так, на случай, если это очевидное решение сразу в голову не пришло.

Ко всем - парни... Если очень хочется поумничать насчет моей безграмотности - ivan19@email.ru. Сюда можно слать любой хлам, не относящийся к вопросу. Ибо мне все равно - а вам приятно :). Еще раз прошу прощения - если кого задел и обидел. Цели такой не имел.

По существу вопроса - про Gen_ID - понимаю, читал. Пользоваться умею. На парадоксе - писал, оттого не падаю в обморок от слов таблица, база данных и пр. Хотя, безусловно, признаю ваш авторитет в области программирования - по причинам, изложенным в начале треда. Если можно - больше конкретики. Например - насколько работоспособна конструкция, описанная в моем втором ответе. Там, где If Select...
...
Рейтинг: 0 / 0
03.03.2004, 17:51
    #32430005
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните разницу между DDL и DML. И еще кое-что :)...
Все очень просто значения генераторов не лежат в таблице - они в системной странице БД и доступны лишь функции GEN_ID, плюс SET/CREATE/DROP... Все AFAIK
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объясните разницу между DDL и DML. И еще кое-что :)... / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]