Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

Сохранение НД   Найти похожие ветки 

 
Spawn ©   (2003-07-10 08:29) [0]

Разобрался с одной проблемой, а щас такая вот возникла:

Делаю изменения в DBGrid - все ок(Присутствует TIBUpdateSQL).
Вызываю стандартное событие из TActionList - DataSetPost и данные не сохраняются на сервере. Пробовал делать IBTransaction.Commit - тоже ни чего не сохрагяется. Свойство CachedUpdates у IBQuery стоит в True. SQL - запросы у IBUpdateSQL сгенерированны компонентом. В чем проблема? Заранее спасибо.


 
Spawn ©   (2003-07-10 08:31) [1]

При вызове же IBUpdateSQL.Apply(ukModify) возникает ошибка.


 
Zacho ©   (2003-07-10 08:34) [2]

Во-первых, делай IBQuery.ApplyUpdates вместо IBUpdateSQL.Apply(ukModify)
Во-вторых, выкинь IBQuery и используй IBDataSet


 
Spawn ©   (2003-07-10 08:47) [3]

Использую IBDataSet, при вызове IBQuery.ApplyUpdates возникает ошибка IBInterBaseError with message "internal error"(причем она возникает тоьлко в том случае, если добавить/изменить данные в DBGrid)


 
Spawn ©   (2003-07-10 08:48) [4]

То есть при вызове IBDataSet.ApplyUpdates;


 
Zacho ©   (2003-07-10 08:53) [5]


> Spawn © (10.07.03 08:47)

Ничего не понял, так у тебя IBDataSet или IBQuery ?
А вообще похоже на баг в IBX, попробуй поставить другую версию.


 
Spawn ©   (2003-07-10 08:54) [6]

IBDataSet у меня


 
Spawn ©   (2003-07-10 08:56) [7]

Я FireBird сверху поставил


 
Zacho ©   (2003-07-10 09:08) [8]


> Spawn © (10.07.03 08:54)
> IBDataSet у меня

Выключи CachedUpdates. Практически в каждой версии IBX есть баги в CachedUpdates.

> Spawn © (10.07.03 08:56)

А это вообще к этой проблеме отношения не имеет.


 
Spawn ©   (2003-07-10 09:11) [9]

Та же ошибка без CachedUpdates


 
VAleksey ©   (2003-07-10 09:14) [10]

Код запроса и код запроса на обновление давай.


 
Johnmen ©   (2003-07-10 09:15) [11]

>Spawn © (10.07.03 08:56)
>Я FireBird сверху поставил

А для БД сделал backup/restore ? Или сразу стал использовать под FB ?



 
Spawn ©   (2003-07-10 09:16) [12]

Код сгенерированный компонентом:

Modify:
update DOCUMENTS
set
ID = :ID,
NAME = :NAME,
ANNOT = :ANNOT,
PICTURE = :PICTURE,
DEVFIO = :DEVFIO,
TEL = :TEL,
LABNUM = :LABNUM,
ZAVFIO = :ZAVFIO
where
ID = :OLD_ID and
NAME = :OLD_NAME and
ANNOT = :OLD_ANNOT and
PICTURE = :OLD_PICTURE and
DEVFIO = :OLD_DEVFIO and
TEL = :OLD_TEL and
LABNUM = :OLD_LABNUM and
ZAVFIO = :OLD_ZAVFIO

Запрос самый обычный:

SELECT * FROM Documents


 
Spawn ©   (2003-07-10 09:17) [13]

Johnmen © (10.07.03 09:15) сразу начал использовать. А с этим связаны какие то проблемы?


 
ЮЮ ©   (2003-07-10 09:23) [14]

>Запрос самый обычный:
Гораздо лучше, когда он выглядит так: :-)
update DOCUMENTS
set
NAME = :NAME,
ANNOT = :ANNOT,
PICTURE = :PICTURE,
DEVFIO = :DEVFIO,
TEL = :TEL,
LABNUM = :LABNUM,
ZAVFIO = :ZAVFIO
where
ID = :OLD_ID


 
Johnmen ©   (2003-07-10 09:34) [15]

>Spawn © (10.07.03 09:17)

Ещё какие...
Общая рекомендация, приводимая практически везде - backup под предыдущей версией сервера и restore под новой.
Иначе могут быть трудноуловимые, практически неисправляемые глюки при работе с БД.


 
Spawn ©   (2003-07-10 11:05) [16]

Так что то тут не то. Короче, я проверил прилагаемую к книге прогу для работы с базой employee. Перевел ее на файл серверную все было ок и прекрасно работало (Практически те же самые запросы что и я делал). Я решил заново создать свою БД, поскольку записей там практически еще и нету. Но вот проблемка - первую свою БД я создал, преобразовав ее из Paradox БД в InterBase (и кстати при этом какая то ошибка вылезла). Но, рещив ее сделать с нуля, не могу ее сохранить. Создаю в IBConsole файл в котором будут храниться таблицы InterBase. Затем пытался создать в DataBase Desktop таблицу и добавить в файл, но не тут то было ))) Не как не сохранить там. Неужели нужно создавать таблицу SQL-ем? Что то типа Create Table ???


 
Zacho ©   (2003-07-10 11:20) [17]


> Spawn © (10.07.03 11:05)

А чего бы это DataBase Desktop работал с IB ?
Вообще-то и создание метаданных (таблицы, ХП, триггера и т.п.), и работа с данными в SQL-серверах делается только соответствующими SQL-запросами. А если тебе нужен инструмент для разработки и администрирования БД для IB - то смотри здесь: http://www.ibase.ru/d_tools.htm
Я бы посоветовал IBExpert - http://pwww.ibexpert.com


 
Spawn ©   (2003-07-10 11:40) [18]

Создал в Interactive SQL таблицу. А можно ли после этого изменть тип поля?


 
Zacho ©   (2003-07-10 12:00) [19]


> Spawn © (10.07.03 11:40)

Можно. Удали это поле и создай новое.
Читай Data Definition Guide, Chapter 6 "Working with Tables", Altering tables
А вообще, как ты себе представляешь изменение типа поля ? Что при этом должно происходить с данными, которые были в этом поле ?


 
Spawn ©   (2003-07-10 12:09) [20]

Нет) Я не собираюсь во время работы базы менять поля. Просто во время создания создал не то поле (Но уже прочитал, что нужно юзать ALTER TABLE ... для удаления/добавления этих полей). Ошибки не стало, но сохранения данных в базе не происходит))) Ни при ApplyApdates, ни при использовании Action-события DataSetPost


 
Spawn ©   (2003-07-10 12:37) [21]

Меня ето просто бесит уже!!! Как так то. Почему данные не созраняются на сервере. Делаю абсолютно все как было написано в книге. Даже так сделал - в рабочей программе от книги, заменил базу на свою. DBGrid заполняется данными, но после редактирования и выходе из проги данные не сохраняются. КАК ТАКОЕ МОЖЕ БЫТЬ!!!!!!!


 
Spawn ©   (2003-07-10 13:40) [22]

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


 
Spawn ©   (2003-07-10 13:46) [23]

И если в это первое поле (тип VARCHAR) ввести не числовое значение и попытаться сохранить данные, то возникает ошибка -
EIBInterBaseError with message "arithmetic exception, numeric overflow, or string truncation". К чему бы это?


 
Mike1 Kouzmine1   (2003-07-10 13:49) [24]

Транзакции?
Св-ва IBDatabase?


 
Spawn ©   (2003-07-10 13:54) [25]

Так с одним я разобрался нужно было указать Primary Key для того чтобы я мог вносить изменения в любую запись. Теперь другая проблемы - если ввожу значения отличные от цифр, то возникает ошибка, описанная мною выше.


 
Mike1 Kouzmine1   (2003-07-10 13:57) [26]

При подключении - какая кодировка указана?


 
Spawn ©   (2003-07-10 13:57) [27]

Так еще одно прояснение))) Ошибка вылетает только с русскими буквами)) Где то я тут видел тему на етот счет ща найду) Кажись мои мучения подходят к концу)


 
Spawn ©   (2003-07-10 13:59) [28]

Mike1 Kouzmine1 (10.07.03 13:57) Кодировка Pdox ANSI Cyrillic


 
Mike1 Kouzmine1   (2003-07-10 14:04) [29]

А что это такое для компонент прямого доступа?
Может какая другая нужна? Например, win1251?


 
Spawn ©   (2003-07-10 14:07) [30]

Это в BDE администраторе она такая, а так то конечно win1251


 
Mike1 Kouzmine1   (2003-07-10 14:32) [31]

А как именно она указана для IBDatabase?


 
Spawn ©   (2003-07-10 14:38) [32]

Всмысле для IBDataBase? Там разве тоже кодировку можно прописывать? Я такого свойства не видел там, разве что в Params?


 
Johnmen ©   (2003-07-10 14:44) [33]

Даблклик на IBDataBase или в Params lc_ctype=WIN1251


 
Spawn ©   (2003-07-10 15:04) [34]

Johnmen © (10.07.03 14:44) большое спасибо.
И все таки не Primary Key влияло на невозможность внесения данных в БД, а наличие в ней BLOB полей(Протестировал на 5 различных комбинациях и там где были BLOB изменять нельзя другие поля после их первого установления). Почему так?


 
Johnmen ©   (2003-07-10 15:26) [35]

Как прописан ModifySQL ?


 
Spawn ©   (2003-07-10 16:36) [36]

Сгенерированный компонентом:

update DOC
set
ID = :ID,
NAME = :NAME,
ANNOT = :ANNOT, //BLOB
PICTURE = :PICTURE, //BLOB
DEVFIO = :DEVFIO,
TEL = :TEL,
LABN = :LABN,
ZAVFIO = :ZAVFIO
where
ID = :OLD_ID and
NAME = :OLD_NAME and
ANNOT = :OLD_ANNOT and //BLOB
PICTURE = :OLD_PICTURE and //BLOB
DEVFIO = :OLD_DEVFIO and
TEL = :OLD_TEL and
LABN = :OLD_LABN and
ZAVFIO = :OLD_ZAVFIO



 
Johnmen ©   (2003-07-10 16:53) [37]

Разве в where одного поля ID не достаточно для однозначной идентификации записи ? :)

ANNOT = :OLD_ANNOT and //BLOB
PICTURE = :OLD_PICTURE and //BLOB


А это вообще что-то немыслимое...:)


 
Spawn ©   (2003-07-10 17:01) [38]

Дак я на SQL перешел пару дней назад и до этого то один раз только базами занимался, а литературы по нми хорошей нет)))) Не подскажешь ли что с Блобами делать?


 
Spawn ©   (2003-07-10 17:04) [39]

Ладно)) Вроде пока все нормально Блобы нацеплю на TDBImage и TDBMemo


 
Johnmen ©   (2003-07-10 17:13) [40]

>Spawn © (10.07.03 17:01)

Я бы на твоём месте всё-таки сначала почитал книги, прежде чем топтать клаву на предмет баз данных...:)))



Страницы: 1 2 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.02 c
1-100760
tovSuhov
2003-07-16 15:58
2003.07.31
TSaveDialog


7-101001
Zew
2003-05-19 21:06
2003.07.31
CD-ROM


7-100996
Bogdan 2003
2003-05-15 01:02
2003.07.31
Обмен по LPT порту


1-100775
mox
2003-07-16 22:11
2003.07.31
Edit или Memo др. приложения


1-100762
ss300
2003-07-16 12:27
2003.07.31
Tray-глюк