Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeos aktualizacja blob'a problem

67 views
Skip to first unread message

J-23

unread,
Jan 13, 2018, 3:26:11 PM1/13/18
to
Witam,
Mam taki kod

procedure TDBCard.SaveCard;
var
BlobStream: TBlobField;
FS: TFileStream;
begin
try
FS := TFileStream.Create(ExtractFilePath(Application.ExeName)
+'StreamOut.xml', fmCreate);
FXML.Position:=0;
FS.CopyFrom(FXML, FXML.Size);
finally
FS.Free;
end;

with FZTable do
begin
Edit;
BlobStream := FieldByName('CAR_CARD') as TBlobField;
BlobStream.LoadFromStream(FXML);
FieldByName('CAR_VERSION').AsInteger := 33;
FieldByName('CAR_MODIFICATIONDATE').AsDateTime := NOW;
Post;
end;
end;

Z tym że ten kod poniżej jest tylko w formie znalezieniem problemu a
chodzi o zapis xml do pola blob

try
FS := TFileStream.Create(ExtractFilePath(Application.ExeName)
+'StreamOut.xml', fmCreate);
FXML.Position:=0;
FS.CopyFrom(FXML, FXML.Size);
finally
FS.Free;
end;
Tutaj robie zrzut xml do pliku bo myślałem że mam coś nie tak z
przetwarzaniem xml zmieniam w nim jedna wartość jak wynika z pliku
StreamOut wartość jest zmieniana za każdym razem i to jest jak
najbardziej dzialanie ok

Problem wydaje się wynikać że nie zawsze jest aktualizowanie pole blob,
czy spotkał się ktoś z Was z tym problemem

Pozdrawiam
J-23

zpksoft

unread,
Jan 14, 2018, 10:44:43 AM1/14/18
to
A jakiś commit po post?

J-23

unread,
Jan 14, 2018, 11:07:18 AM1/14/18
to
W dniu 14.01.2018 o 16:44, zpksoft pisze:
Tutaj mam autocommit to raz dwa np zmieniam wartości 'CAR_VERSION' i to
się zmienia a zawartość pola blob nie ulega zmianie

Pozdrawiam
J-23

zpksoft

unread,
Jan 14, 2018, 11:27:59 AM1/14/18
to
Z tego co widzę, to otwierasz strumień, ustawiasz go na 0 a następnie wrzucasz do pliku.
Potem chcesz załadować go do bloba, ale licznik jest na końcu.
Spróbuj przed ładowaniem do bloba zrobić jeszcze ras seek(0)

Paweł

zpksoft

unread,
Jan 14, 2018, 12:37:06 PM1/14/18
to
Ech, trochę namieszałem w tej odpowiedzi, sory, wieczorne piwko ;)

Faktem jednak jest że:
Po wykreowaniu strumienia niepotrzebnie ustawiasz mu licznik na 0.
Po załadowaniu strumienia z pliku licznik jest ustawiony na jego końcu i tu właśnie po tej operacji brakuje position:=0 (lub seek(0); żeby można było z niego czytać

Pozdrawiam
Paweł

J-23

unread,
Jan 14, 2018, 2:05:53 PM1/14/18
to
W dniu 14.01.2018 o 18:37, zpksoft pisze:
Masz na myśli taką zmianę prawda?

with FZTable do
begin
Edit;
BlobStream := FieldByName('CAR_CARD') as TBlobField;
FXML.Position:=0;
BlobStream.LoadFromStream(FXML);
FieldByName('CAR_VERSION').AsInteger := 33;
FieldByName('CAR_MODIFICATIONDATE').AsDateTime := NOW;
Post;
end;
end;

Lecz ona nie przynosi skutku.

Zrobiłem jeszcze coś takiego
with FZTable do
begin
Edit;
BlobStream := FieldByName('CAR_CARD') as TBlobField;
FXML.Position:=0;
BlobStream.LoadFromStream(FXML);
BlobStream.SaveToFile(ExtractFilePath(Application.ExeName)
+'BlobOut.xml');
FXML.Position:=0;
FieldByName('CAR_VERSION').AsInteger := 33;
FieldByName('CAR_MODIFICATIONDATE').AsDateTime := NOW;
Post;
end;
end;

Gdzie w pliku BlobOut.xml jest to co chciałbym by było w Bazie i to
działa jak najbardziej prawidłowo.

Jednak po wykonaniu post zawartość bloba się nie uaktualnia pozostałe
kolumny jak najbardziej
Ponadto dodam że chodzi o bazę MSSQL

Pozdrawiam
J-23

zpksoft

unread,
Jan 14, 2018, 4:56:58 PM1/14/18
to
Tak, to miałem na myśli. Ale widać że nie o to chodziło.
Nie pracowałem na MSSQL.
Z grupy wiem że Wloochacz pracuje na takich bazach, może odczyta ten wątek i coś Ci poradzi.

Powodzenia
Paweł

J-23

unread,
Jan 14, 2018, 6:36:40 PM1/14/18
to
W dniu 13.01.2018 o 21:26, J-23 pisze:
Jest błąd w Zeosach (Nie sądze by to było zamierzone działanie) -
poniższy kod działa prawidłowo:

procedure TDBCard.SaveCard;
var
BlobStream: TBlobField;
begin
with FZTable do
begin
Edit;
BlobStream := FieldByName('CAR_CARD') as TBlobField;
BlobStream.Clear;
Post;
Edit;
BlobStream := FieldByName('CAR_CARD') as TBlobField;
FXML.Position:=0;
BlobStream.LoadFromStream(FXML);
FieldByName('CAR_VERSION').AsInteger := 33;
FieldByName('CAR_MODIFICATIONDATE').AsDateTime := NOW;
Post;
end;
end;

Nie znam źródeł Zeos może w wolnej chwili zajrzę do tego ale prośba do
Miaba (bo o ile dobrze kojarzę to on zajmuje się jak nie develop to
testami Zeosa) by zwrócił na powyższy błąd uwagę

Pozdrawiam
J-23

immo

unread,
Jan 15, 2018, 2:03:43 AM1/15/18
to
W dniu niedziela, 14 stycznia 2018 22:56:58 UTC+1 użytkownik zpksoft napisał:

> Nie pracowałem na MSSQL.
> Z grupy wiem że Wloochacz pracuje na takich bazach, może odczyta ten wątek i coś Ci poradzi.

MSSQL nie ma tutaj nic do rzeczy. Na FireDAC czy SDAC podobna konstrukcja działa bez problemu.

pozdrawiam,
Przemek O.

miab

unread,
Mar 11, 2018, 4:21:09 AM3/11/18
to
W dniu 15-01-2018 o 00:36, J-23 pisze:

>
> Jest błąd w Zeosach (Nie sądze by to było zamierzone działanie) -
> poniższy kod działa prawidłowo:
>
> procedure TDBCard.SaveCard;
> var
>   BlobStream: TBlobField;
> begin
>   with FZTable do
>    begin
>      Edit;
>      BlobStream := FieldByName('CAR_CARD') as TBlobField;
>      BlobStream.Clear;
>      Post;
>      Edit;
>      BlobStream := FieldByName('CAR_CARD') as TBlobField;
>      FXML.Position:=0;
>      BlobStream.LoadFromStream(FXML);
>      FieldByName('CAR_VERSION').AsInteger := 33;
>      FieldByName('CAR_MODIFICATIONDATE').AsDateTime := NOW;
>      Post;
>    end;
>  end;
>
> Nie znam źródeł Zeos może w wolnej chwili zajrzę do tego ale prośba do
> Miaba (bo o ile dobrze kojarzę to on zajmuje się jak nie develop to
> testami Zeosa) by zwrócił na powyższy błąd uwagę

Ściągnij snapszota z:
https://sourceforge.net/p/zeoslib/code-0/HEAD/tree/branches/testing-7.2/
i zobacz czy sie nie poprawiło.

Miab

miab

unread,
Mar 12, 2018, 5:44:56 AM3/12/18
to
W dniu 11-03-2018 o 09:21, miab pisze:
> W dniu 15-01-2018 o 00:36, J-23 pisze:

>> Nie znam źródeł Zeos może w wolnej chwili zajrzę do tego ale prośba do
>> Miaba (bo o ile dobrze kojarzę to on zajmuje się jak nie develop to
>> testami Zeosa) by zwrócił na powyższy błąd uwagę
>
> Ściągnij snapszota z:
> https://sourceforge.net/p/zeoslib/code-0/HEAD/tree/branches/testing-7.2/
> i zobacz czy sie nie poprawiło.

Albo zeosdbo-7.2.3-rc.zip:
https://sourceforge.net/projects/zeoslib/files/Zeos%20Database%20Objects/zeosdbo-7.2.3-rc/

miab

J-23

unread,
Mar 17, 2018, 7:13:22 PM3/17/18
to
W dniu 12.03.2018 o 10:45, miab pisze:
Próbowałem zainstalować pod Lazarusem 1.8.0 - zeosdbo-7.2.3-rc lecz
podczas kompilacji dostaje

ZDatasetUtils.pas(538,24) Error: identifier idents no member "IsRaw"

Pozdrawiam
J-23

miab

unread,
Mar 18, 2018, 5:39:33 AM3/18/18
to
W dniu 18-03-2018 o 00:13, J-23 pisze:
U mnie zeosdbo-7.2.3-rc bez problemu instaluje się i działa w Lazarus
1.8.2-Win32:
Może zostały gdzieś jakieś pozostałości starej wersji na ścieżkach
przeszukiwania kompilatora. Wyczyść je i spróbuj zgodnie z moja receptą:
http://zeoslib.sourceforge.net/viewtopic.php?f=3&t=44184

miab


J-23

unread,
Mar 18, 2018, 7:55:53 PM3/18/18
to
W dniu 18.03.2018 o 10:39, miab pisze:
Na Lazarus 1.8.2 poszło faktycznie bez problemu :) odpuściłem
sprawdzenie tego co nie działa na wersji 1.8.0 skoro już jest nowszy

Jeśli chodzi o błąd z blob to faktycznie na Zeos 7.2.3-rc problem już
nie występuje :) Także ten temat można uznać za zamknięty.

Znalazłem jednak inny problem który "zdaję się występować" w Zeos ale to
napiszę w innym wątku tak by nie mieszać :)

Pozdrawiam
J-23
0 new messages