powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как содержимое кэша отправить в базу? (в FIBPlus)
25 сообщений из 29, страница 1 из 2
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32209107
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кэш получен в ДатаСете1 путём DataSet1.LoadFromFile ( или LoadFromStream; предварительно файл или стрим получены из точно такого же DataSet2, "привязанного" к таблице с точно такой же структурой, как и DataSet1 (select-ы и обе таблицы - идентичны, только первая таблица пустая, а вторая - полная). Я даже вижу содержимое кэша 1-го ДатаСета через Грид, НО!.. - никакими ухищрениями не получается отправить содержимое кэша в базу. Перепробовал что только можно - и Aplay, и AplayUpdates, и AplayUpdatesToBase (точно не помню название метода), и стартовал-коммитил транзакцию, и Edit-Post - результат нулевой. Ни одной записи в базу не попало. Подскажите выход...

Краткая предыстория. Задачка возникла от необходимости "перегнать" данные из 1-го диалекта в 3-й (кол-во таблиц - немеренное). Хорош бы был гетерогенный запрос + БДЕ-шный БатчМув (метод компонента Table), но БДЕ к сожалению не понимает маленькие буквы. Вроде можно через файл или стрим, но никак не получается долбаный кэш отправить в базу.. Я просто в трансе..

SOS-SOS-SOS...

Сергей Васильев.
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32209369
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aplay - как я понял это Apply :)

>>Задачка возникла от необходимости "перегнать" данные из 1-го диалекта в 3-й (кол-во таблиц - немеренное)
А через обычный backup/restore - "перегнать" базу уже не получается?
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32210298
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>А через обычный backup/restore - "перегнать" базу уже не получается?

К сожалению это система реального времени, данные надо перегонять из проекта... Особенности русского Бэйс-Билда объяснять долго и больно...

Вот фрагмент кода:
...
dsetFrom.Last;
dsetFrom.SaveToFile('C:\Base\CMM.txt');

dsetTo1.Transaction.StartTransaction; // так написано в хэлпе по фибам..
dsetTo1.LoadFromFile('C:\Base\CMM.txt');
dsetTo1.Last;

dsetTo1.ApplyUpdToBase;
dsetTo1.Transaction.Commit;
//dsetTo1.CommitUpdToCach;

После всего этого в гриде, прицепленном к dsetTo1 данные я вижу, но после переоткрытия dsetTo1 – они бесследно исчезают (т.е в базу - не попадают)..

--------------------------------------------------------------------------

Свойства, прописанные в инспекторе объектов:

dsetTo1.AllowedUpdateKinds := [ukModify,ukInsert,ukDelete];
dsetTo1.AutoCommit := true;
dsetTo1.AutoUpdateOptions.UpdateOnlyModifiedFields := false;
dsetTo1.UpdateRecordTypes := [cusUnmodified,cusModified,cusInserted];
dsetTo1.Transaction := trW3;
dsetTo1.UpdateTransaction := trW3;

trW3.TimeoutAction := TACommit;
trW3.TPBMode := tpbReadCommitted;

--------------------------------------------------------------------------
Время катострофически заканчивается, через несколько дней надо сдавать проект, а этот камень ну никак не объехать.. Чует моё сердце - скоро на земле одним базистом станет меньше...
А может кто-то всё-таки поможет добрым советом?
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32211570
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А время стремительно убегает...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32212663
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32213080
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32216364
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32216485
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А цепочку edit-post-comit (без ApplyUpdata) пробовал?
Или даже без post?
В IBDataSet есть св-во CacheUpdates. От его состояния зависит необходимый набор в "цепочке".
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32218735
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>1man Хоть одна живая душа отозвалась, сенькаю :).

Без "CacheUpdates=true" данные в кэш просто не попадают. А "edit-post-comit" - перепробовал в разных комбинациях (чуть ли не полный перебор) - не помогает. Такое впечатление, что в данной версии pFIBPlus (4.4412) на этом месте просто заглушка стоит.

Всё-таки хотелось бы услышать компетентное мнение, вопрос по-прежнему ещё актуален..
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32219072
MrAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что в 4.7.7 тот же эффект...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32219349
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тебе данные нужно в кэш отправить (и любоваться ими), или в базу? Если все же в базу - попробуй отключить cash, как я уже писал.
З.Ы. Извини за некомпетентное мнение - другого не имею :(
а помочь хочу, т.к. сталкивался с подобной странностью, но досконально не разобрался - не хватило ни времени ни квалификации.
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32219807
MrAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда данные загружаются через LoadFromFile они и находятся в кэше...
Интересно... Как это отключить кэш...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32219826
MrAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда данные загружаются через LoadFromFile они и находятся в кэше...
Интересно... Как это отключить кэш...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32220011
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>1man "Если все же в базу - попробуй отключить cash, как я уже писал.
"...
Извини, имел в виду кого-нить из разработчиков фибов (про компетентное мнение)...
Для чистоты эксперимента - завтра же попробую отключить CacheUpdates..
_______________________

>>MrAlex "...Как это отключить кэш..."
Может в этом что-то и есть (отключить CacheUpdates) - по идее они (данные) должны и попасть в другую БД, минуя кэш (после LoadFromFile). Если так - останется только "запостировать"... В любом случае - надо проверить...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32220258
Vovochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мой тебе совет не пожалей времени и зайди сюда .......... почитай.........
http://www.fibplus.com.ua/rus/articles/cache_xxx.shtml
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32220262
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как попробуешь - пожалуйста, напиши что получилось.
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32220277
MrAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Simai "Может в этом что-то и есть (отключить CacheUpdates) - по идее они (данные) должны и попасть в другую БД, минуя кэш (после LoadFromFile). Если так - останется только "запостировать"... В любом случае - надо проверить..."

Выдержка из Help:

procedure LoadFromFile(const FileName: string);

Description

Call LoadFromFile TO FILL THE LOCAL BUFFER by file data.
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32223134
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Vovochka “ .......... почитай......... http://www.fibplus.com.ua/rus/articles/cache_xxx.shtml”

Про LoadFromFile (SaveToFile) – там ничего не сказано..
____________________________
>>MrAlex “ Выдержка из Help… Call LoadFromFile TO FILL THE LOCAL BUFFER by file data.”
В том же хэлпе написано ~ для фиксации изменений применяйте ApplyUpdToBase. Включаешь – не работает.
____________________________
>>1man «Как попробуешь - пожалуйста, напиши что получилось.»
Отвечаю – не получилось ничего:

dsetTo1.Transaction := trW3;
dsetTo1.AutoCommit := false;
...
if not trW3.InTransaction then
dsetTo1.Transaction.StartTransaction;
dsetTo1.Edit;
dsetTo1.LoadFromFile('Путь\файл');
//dsetTo1.Post;
if trW3.Active then
dsetTo1.Transaction.Commit;

метод “dsetTo1.Post” закомментирован, т.к. в этом месте возникает ошибка – «датасет не находится в состоянии Edit или Insert». Так что LoadFromFile «выводит» датасет из режима Edit... Но и «dsetTo1.Transaction.Commit» ничего не даёт – псле переоткрытия dsetTo1 – пуст...
Вообще-то Edit-Post в данной ситуации не совсем подходит, эта парочка ведь для редактирования одной записи.. В общем туман не рассеивается.. пока..
Наиболее вероятно, что здесь всё же должен работать метод dsetTo1.ApplyUpdToBase но почему-то не работает. Написано «Тэтчер», а на самом деле – «Ганди»…
Есть, конечно же железобетонный способ (с Edit-Post кстати) – переприсваивание полей через FieldByName (FieldsValue). Но это тоскливый способ, - уж очень много таблиц и полей (работа больше для спинного мозга).
Благо проект рухнул по вине более достойных членов команды. Но вопрос хотелось бы всё же «дотоптать» – не за горами вторая серия.. Кто прольёт свет, а-у?!?..
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32223155
Alexandr K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А запрос на вставку во втором датасете прописан ?
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32223242
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пробовал ApplyUpdate при CachedUpdates (или что там в FIB-DataSet)=false ?
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32224464
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>1man Что-то я на ровном месте ошибаться стал. Ну конечно же
dsetTo1.CacheUpdates := false в последнем примере, именно так я и пробовал (а не dsetTo1.AutoCommit := false ).
ApplyUpdate пробовал при CachedUpdates=true и при CachedUpdates=false (и ApplyUpdToBase тоже пробовал и так и так) - не получилось...
______________________________

>>Alexandr K. "А запрос на вставку во втором датасете прописан ?"

1). А как он должен выглядеть?

Пусть в обоих таблицах по 2 поля:
F1 integer (Primary Key),
F2 integer;
...
dsetFrom.Last;
dsetFrom.SaveToFile('C:\Base\CMM.txt');

dsetTo1.Transaction.StartTransaction;
dsetTo1.LoadFromFile('C:\Base\CMM.txt');
dsetTo1.Last; // в этот момент все считанные данные видны в прицепленном к dsetTo1 гриду

, 2). а дальше?..
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32225933
Alexandr K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я имею в виду Insert SQL в Dataset1
типа
insert into Table1 (F1,F2 ) values (:F1, :F2)
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32231582
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уехал в отпуск. Попробую позже...
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32234382
x.diablo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему нельзя просто перебросить из одного датасета в другой путем Append - Post?
...
Рейтинг: 0 / 0
Как содержимое кэша отправить в базу? (в FIBPlus)
    #32252309
Фотография Simai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>x.diablo Просто так не получается. Можешь написать фрагмент кода?
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как содержимое кэша отправить в базу? (в FIBPlus)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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