Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоинкрементное поле и ZeosLib 
:(
    Опции темы
UsamaBrainLaden
Дата 12.2.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Перешёл с ODBC+ADO на ZEOS, после чего стали неверно распознаваться типы полей таблицы БД, при добавлении объектов-полей в компоненте ClientDataSet. Например поле, которое в базе данных является автоинкрементным, воспринимается как TIntegerField (чего не происходит когда я работал с ODBC+ADO, там оно интерпретируется как TAutoincField), вследствие чего не прокатывает вставка записи без указания значения этого поля, то есть мне приходится самому задавать значение автоинкрементного поля, что не приемлемо. Аналогично и с другим полем, которое воспринимается нормально (тип "Дата"), но значение требует, хотя в БД явно указано значение по умолчанию (опять же, работало с ODBC+ADO). Раньше, где-то у меня такое возникало, вернее, я этого не замечал и просто задавался вопросом, почему TTable (или TQuery) требовал у меня значение автоинкрементного поля. Кто-нибудь сталкивался с аналогичной проблемой и как её решать?

PostgresSQL 8.2.9
ZeosLib 6.6.4
PM MAIL   Вверх
Akella
Дата 13.2.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  12.2.2009,  17:39 Найти цитируемый пост)
Например поле, которое в базе данных является автоинкрементным, воспринимается как TIntegerField

всё правильно

Добавлено через 1 минуту и 14 секунд
Ты уверен, что у ZeosLib есть автоинкрементные persistent-поля?
PM MAIL   Вверх
UsamaBrainLaden
Дата 13.2.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Цитата(Akella @  13.2.2009,  17:48 Найти цитируемый пост)
Ты уверен, что у ZeosLib есть автоинкрементные persistent-поля? 

Ну допустим,у Zeos'a нету автоинкрементных полей и че теперь, мне самому значение вводить или осуществлять вставку через INSERT?

PS:
Если в запросе INSERT не указывать автоинкрементного поля и соответственно его значения то прокатит!
PM MAIL   Вверх
Akella
Дата 13.2.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  13.2.2009,  18:25 Найти цитируемый пост)
Если в запросе INSERT не указывать автоинкрементного поля и соответственно его значения то прокатит! 

ну вот так и делай
PM MAIL   Вверх
UsamaBrainLaden
Дата 15.2.2009, 14:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Зачем тогда спрашивается DB компоненты, я то их использую, жму добавить запись и уже в этой пустой записи устанавливаю значения полей посредством DB компонентов. А в твоем варианте мне придется использовать обычные Edit'ы и считывая с них добавлять информацию в поля записи, не по русски! тебе так не кажется?! И с полем даты, у меня должна вставляться дата серверная (по умолчанию у поля на сервере стоит значение now, то есть текущее время), изначально я планировал вообще не передавать никакого значения при добавлении и в итоге сервер сам поставит значение текущей даты. А в твоем случае мне придется передавать клиентскую дату и чтобы не менялась логика БД лепить триггер и в нем тупо затирать переданную дату на серверную. Я в тексте топика указал, что в ADO через ODBC драйвер все работало прекрасно, то есть и автоинкрементные поля подхватывались и обязательные поля со значением по умолчанию не требовали ввода значения при добавлении записи.
PM MAIL   Вверх
Akella
Дата 15.2.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  15.2.2009,  14:29 Найти цитируемый пост)
Зачем тогда спрашивается DB компоненты,

это не означает, что ты или я их обязаны использовать smile

Добавлено @ 20:30
Запомни одно очень важное правило: пишущая транзакция должна быть как можно короче по времени.

Теперь представь ситуацию. Ты используешь DBEdit и иже с ним. В этом случае тебе придётся держать пишущую транзакцию пока пользователь заполняет форму добавления/редактирования. А пользователю до одного места твои транзакции и все твои правила. И чем больше ты будешь ограничивать своими правилами заполнения компонентов или форм ввода, тем меньше будут пользоваться твоими программами.
DBEdit больше подходит для работы с файлсерверными СУБД, ака DBE (Paradox, DBF).


Цитата(UsamaBrainLaden @  15.2.2009,  14:29 Найти цитируемый пост)
А в твоем варианте мне придется использовать обычные Edit'ы и считывая с них добавлять информацию в поля записи, не по русски!

Это нормально. При чём здесь по-русски? Вообще как ты предлагаешь, то в жаргоне это называется китайское программирование, типа дёшево и быстро сваять программу и отдать заказчику, а там хоть трава не расти.



Цитата(UsamaBrainLaden @  15.2.2009,  14:29 Найти цитируемый пост)
И с полем даты, у меня должна вставляться дата серверная (по умолчанию у поля на сервере стоит значение now, то есть текущее время), 

Так пусть сервер и заполняет. Вот у Firebird`а есть триггеры на добавление, редактирование записи и т.д. . Вот в этих триггера сам сервер и заполняет, например дату добавления или редактирования. Мало того, есть такое понятие, как значение по-умолчанию. Если серверу не передавать значение поля, то сервер может заполнить его сам.



Цитата(UsamaBrainLaden @  15.2.2009,  14:29 Найти цитируемый пост)
и в нем тупо затирать переданную дату на серверную

сделай не тупо, сделай по-умному smile 
Триггеры для того и придуманы, чтобы делать по-уму, а не ТУПО!!


Цитата(UsamaBrainLaden @  15.2.2009,  14:29 Найти цитируемый пост)
Я в тексте топика указал, что в ADO через ODBC драйвер все работало прекрасно, то есть и автоинкрементные поля подхватывались и обязательные поля со значением по умолчанию не требовали ввода значения при добавлении записи. 

я читал smile 
Ничего страшного, зачем тебе ID будущей записи? Я уверен, что в постгре есть способы получить ID будущей записи.

Попробуй сам создать поле типа AutoInc. Будет работать?

Ты смотрел AnyDAC?

Это сообщение отредактировал(а) Akella - 15.2.2009, 20:41
PM MAIL   Вверх
UsamaBrainLaden
Дата 16.2.2009, 01:00 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



ЭниДак платный! я в своей жизни из ПО тока контр страйк покупал (и то друг платил). Насчет транзакций я в курсе, но у меня трехзвенка, я на этот счет не заморачиваюсь;) А переход с DB компонент на обычные Edit'ы мне добавят геммора (занесение значений полей в Edit'ы при редактировании записи и считывание с них значений для дальнейшего формирования INSERT запроса). Просто в голове не укладывается, как так, в ODBC драйвере который все гноят и ненавидят - все прекрасно! а в Zeos'е с прямым доступом через API и высокой скоростью (в последнем лично убедился)  и такой вещи нету. Я нашел статейку на англоязычном форуме (http://zeos.firmos.at/viewtopic.php?t=1675&postdays=0&postorder=asc&start=0&sid=3d131ad4b20d24a1bb2cec14d0ab670d) на нем кстати можна вырулить на статью где подробно описано как этот бажек исправить, тока косяк в том что речь идет об MySQL а в кодах для PostgreSQL немнога по другому все, руки уже опускаются просто и я забил. Буду наверное сидеть все таки через ADO+ODBC, просто с подгрузкой записей я все таки разобрался (трехзвенная архитектура, топик ещё поднимал недавно) поэтому скорость впринципе меня не волнует, все равно скорость интернет канала у конечных пользователей не будет меньше чем у Zeos'а поэтому скорость загрузки записей не будет так ощутима (тем более я экспериментировал на таблице с числом записей примерно 60000, что далеко от истины в моем случае). Единственный минус что мне придется переходить на Windows хостинг, ибо убунтовский ODBC драйвер не подхватывается моим сервером приложений запущенным под вайном.

ЗЫ:
Меня добивают те факты, что это одна статья на ВЕСЬ интернет, причем именно то о чем я говорил, что не подхватываются значения по дефолту и автоинкрементные поля. Так же поражает что никто и никогда с этим не сталкивался, толи все используют INSERT скрипт толи делают как я, а потом когда у них не получается они делают через INSERT, а самые вумные используют ODBC драйвер. Наверное же не зря есть автоинкрементные поля и значения по умолчанию, которые я указывал при создании БД в PostgreSQL, почему я должен ещё лепить триггеры и вместо программы делать черезжопный вариант, при котором поле будет получать значение, потом триггер его затрет и значение по дефолту у этого поля ваще никогда использоваться не будет.
PM MAIL   Вверх
Akella
Дата 16.2.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  16.2.2009,  01:00 Найти цитируемый пост)
ЭниДак платный! 

опять ты невнимателен

Добавлено @ 09:04
UsamaBrainLaden, посмотри сообщение Коваленко Дмитрия (по поводу первичного ключа)
http://www.sql.ru/forum/actualthread.aspx?tid=638316#6814387

Добавлено через 5 минут и 58 секунд
Кстати, почитай доку к постгре, поддерживает ли он
Код

INSERT INTO TABLE (...) VALUES (...)  RETURNING ...


Это сообщение отредактировал(а) Akella - 16.2.2009, 09:04
PM MAIL   Вверх
Akella
  Дата 16.2.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  16.2.2009,  01:00 Найти цитируемый пост)
Просто в голове не укладывается, как так, в ODBC драйвере который все гноят и ненавидят - все прекрасно! а в Zeos'е с прямым доступом через API и высокой скоростью (в последнем лично убедился)  и такой вещи нету.

Предлагаю 2 варианта.
1. Найти и купить компоненты, которые смогут удовлетворить большинство твоих амбиций.
2. Найти разработчика и заказать компоненты специально для тебя, которые удовлетворят ВСЕ твои амбиции.
3. Написать самому компоненты специально для себя.



Цитата(UsamaBrainLaden @  16.2.2009,  01:00 Найти цитируемый пост)
Я нашел статейку на англоязычном форуме (http://zeos.firmos.at/viewtopic.php?t=1675&postdays=0&postorder=asc&start=0&sid=3d131ad4b20d24a1bb2cec14d0ab670d) на нем кстати можна вырулить на статью где подробно описано как этот бажек исправить, тока косяк в том что речь идет об MySQL а в кодах для PostgreSQL немнога по другому все, руки уже опускаются просто и я забил. Буду наверное сидеть все таки через ADO+ODBC, просто с подгрузкой записей я все таки разобрался (трехзвенная архитектура, топик ещё поднимал недавно) поэтому скорость впринципе меня не волнует, все равно скорость интернет канала у конечных пользователей не будет меньше чем у Zeos'а поэтому скорость загрузки записей не будет так ощутима (тем более я экспериментировал на таблице с числом записей примерно 60000, что далеко от истины в моем случае). Единственный минус что мне придется переходить на Windows хостинг, ибо убунтовский ODBC драйвер не подхватывается моим сервером приложений запущенным под вайном.

я рад за тебя smile 


Цитата(UsamaBrainLaden @  16.2.2009,  01:00 Найти цитируемый пост)
Меня добивают те факты, что это одна статья на ВЕСЬ интернет, 

Напиши свою, правильную, на русском, или лучше несколько. И больше тебя никто добавить не будет. smile 


Цитата(UsamaBrainLaden @  16.2.2009,  01:00 Найти цитируемый пост)
толи все используют INSERT скрипт

да, стараются сделать по-уму



И вообще, купи AnyDAC или используй их бесплатную версию.
PM MAIL   Вверх
UsamaBrainLaden
Дата 16.2.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Цитата(Akella @  16.2.2009,  11:09 Найти цитируемый пост)
я рад за тебя

Мой дед однажды сказал:"Меньше говори, а больше делай!"
От того что ты пишешь всякую ерунду, толку мало будет. И причем тут амбиции, вполне гуманное требование. Смысловая нагрузка конечно небольшая, но все же есть и ничего криминального в этом нет! А насчет внимательности повторю, что я работаю с трёхзвенной архитектурой и даже если INSERT не возвращает записей, то в компонентах для этой технологии есть соответствующие свойства и методы.
PM MAIL   Вверх
Akella
Дата 16.2.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(UsamaBrainLaden @  16.2.2009,  17:16 Найти цитируемый пост)
Мой дед однажды сказал:"Меньше говори, а больше делай!"

судя по твоим сообщениям - ты не в деда  smile

Добавлено через 4 минуты и 39 секунд
Цитата(UsamaBrainLaden @  16.2.2009,  17:16 Найти цитируемый пост)
От того что ты пишешь всякую ерунду, толку мало будет. 

От твоих возмущений в сторону БЕСПЛАТНЫХ КОМПОНЕНТ, тем более  smile 

Возьми и напиши бесплатные компоненты с хорошей документацией, примерами и статьями. Посмотрим как это у тебя получиться. smile 



Цитата(UsamaBrainLaden @  16.2.2009,  17:16 Найти цитируемый пост)
А насчет внимательности повторю

Я тебе тоже повторю. Мне всё равно как ты работаешь. Я тебе говорю о том, что:
1. Есть бесплатная версия AnyDAC, версия 1.х.
2. Функционал, документирование и примеры бесплатной версии AnyDAC превосходит функционал, документирование и примеры ZeosDBO.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.