Тема
|
Проблем с база данни
|
|
Автор | Учeниka (Нерегистриран) |
Публикувано | 25.04.01 13:19 |
|
Тривиална програма с база данни. Но от време на време компютъра или блокира, или се рестартира, при което купища въведени данни се загубват.
Как да осигуря сигурен запис на диска след употребата на TTable.Post?
|
|
Тема
|
Много просто но не елегантно решение...
[re: Учeниka]
|
|
Автор |
PhantomAS (новак) |
Публикувано | 25.04.01 15:26 |
|
Ако си с D5 (dBase, Paradox работи със сигурност) погледни какво прави метода
TTable.FlushBuffers; TQuery.FlushBuffers
ако го извикаш в OnAfterPost на съответната table - ще запише пормените на диска.
Има и друг на4ин - на по ниско ниво - BDE има подобна функция - ако ти трябва ще ти я кажа.
Защо казвам 4е на4ина не е елегантен - ами по добре ще е да решиш проблема с блокирането - това е по доброто решение.
---
IN VINO VERITAS!
|
|
Тема
|
Re: Много просто но не елегантно решение...
[re: PhantomAS]
|
|
Автор |
SDR (новак) |
Публикувано | 26.04.01 11:52 |
|
oshte po lesno .Close sledwano ot .Open - towa e za wsishki wersii i wyrshi syshtata rabota!
|
|
Тема
|
Re: Много просто но не елегантно решение...
[re: SDR]
|
|
Автор |
PhantomAS (новак) |
Публикувано | 26.04.01 23:54 |
|
Ама я си представи една заявка с 10000 реда - която трябва да се update-ва - това close - open ще отнеме 1 мин даже и на бърза машина.
Колкото до разли4ните версии - ами има си поддръжка в BDE -то и на4ин да се запишат промените "насилствено" 4рез BDE фунция - об4е на мен не ми харесва подобно решение - макар 4е в някои слу4аи това е единственото решение.
Още един на4ин за който се сещам е да се вклю4и Local Share - то и при това системата сама си записва всяка промяна - не е нужно да се правят подобни глупости с отваряне и затвяряне на таблица.
---
IN VINO VERITAS!
|
|
Тема
|
ДА, ама НЕ
[re: PhantomAS]
|
|
Автор | Учeниka (Нерегистриран) |
Публикувано | 27.04.01 08:46 |
|
Тези начини и разни други ги опитах. Въведа си няколко записа, давам запис (Post) и рестартирам компютъра без да съм напуснал формата. Ефектът е нулев - нищо не се записва. Опитвах FlushBuffers, ApplyUpdates и т.н., но не става.
Така че викът ми за помощ остава.
|
|
Тема
|
Re: ДА, ама НЕ
[re: Учeниka]
|
|
Автор |
NDeu (непознат
) |
Публикувано | 27.04.01 09:08 |
|
За Учeниka:
За да се записват при Post данните в/у диска виж. property CachedUpdates: Boolean;
За PhantomAS:
При TTable Close/Open не изтегля всички записи, а само тези които се изобразяват.Редактирано от NDeu на 27.04.01 09:12.
|
|
Тема
|
Re: ДА, ама НЕ
[re: NDeu]
|
|
Автор |
Mandor (8-) |
Публикувано | 27.04.01 10:53 |
|
Всичко, което казва NDeu, плюс забележката, че проблемът може да е на по-ниско ниво - при инсталиране на Windows по подразбиране е разрешено кеширане на запис. Така че е възможно Windows-а да не ти записва данните, а не Database Engine-а.
|
|
Тема
|
По принцип съм съгласен...
[re: NDeu]
|
|
Автор |
PhantomAS (новак) |
Публикувано | 27.04.01 12:29 |
|
за таблиците - да - макар 4е когато отваряш 10-15 пак ще се замота. Оба4е при Query - тата въпроса както знаеш е доста по - комплексен - времето за отваряне зависи от сложността на заявка и броя таблици вклю4ени в нея.
---
IN VINO VERITAS!
|
|
|
Paradox, dBase или друга
Освен това въпроса май "намирисва" на несвързан само с Delphi ами и с Winбозата -то при мен нямам проблеми с на4ина който казах.
Ще потърся и другия "по-дълбок" на4ин за запис на данните и ще ти го кажа.
Ама вземи си виж техниката/софтуера - най- малко защото едва ли на някой ще му е приятно да работи на компютър забиващ по 2-3 (или пове4е) пъти на ден.
---
IN VINO VERITAS!
|
|
|
Една извадка от ..\Delphi5\BDE\bde32.hlp - за пове4е информация виж там
в BDE function reference \ Table functions
-------------------------------------------------
пробвай с тази функция
като я извикаш така
Check(DbiSaveChanges (MyTable.Handle));
тази функция трябва да е в BDE.dcu
--------------------------------------------------------
Delphi syntax
function DbiSaveChanges (hCursor: hDBICur): DBIResult stdcall;
Description
DbiSaveChanges forces all updated records associated with hCursor to disk.
Parameters
hCursor Type: hDBICur (Input)
Specifies the cursor handle.
Usage
If the table associated with hCursor is a temporary table (created with DbiCreateTempTable), DbiSaveChanges saves all buffered changes to disk and makes the table permanent. This table will not be removed when the cursor is closed.
SQL: This function is not supported with SQL tables.
DbiResult Meaning
DBIERR_NONE All changes have been saved successfully.
DBIERR_INVALIDHNDL The specified cursor is invalid or NULL.
DBIERR_NODISKSPACE The changes could not be saved because there is no disk space available.
DBIERR_NOTSUPPORTED This function is not supported for SQL tables.
---
IN VINO VERITAS!
|
|