🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
8 messages
8 total messages Started by J-23 Sat, 13 Jan 2018 21:26
Zeos aktualizacja blob'a problem
#81135
Author: J-23
Date: Sat, 13 Jan 2018 21:26
48 lines
1238 bytes
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
Re: Zeos aktualizacja blob'a problem
#81136
Author: zpksoft
Date: Sun, 14 Jan 2018 07:44
57 lines
1568 bytes
W dniu sobota, 13 stycznia 2018 21:26:11 UTC+1 użytkownik J-23 napisał:
> 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

A jakiś commit po post?
Re: Zeos aktualizacja blob'a problem
#81138
Author: zpksoft
Date: Sun, 14 Jan 2018 08:27
76 lines
2315 bytes
W dniu niedziela, 14 stycznia 2018 17:07:18 UTC+1 użytkownik J-23 napisał:
> W dniu 14.01.2018 o 16:44, zpksoft pisze:
> > W dniu sobota, 13 stycznia 2018 21:26:11 UTC+1 użytkownik J-23 napisał:
> >> 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
> > 
> > A jakiś commit po post?
> > 
> 
> 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

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ł
Re: Zeos aktualizacja blob'a problem
#81139
Author: zpksoft
Date: Sun, 14 Jan 2018 09:37
10 lines
408 bytes
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ł
Re: Zeos aktualizacja blob'a problem
#81141
Author: zpksoft
Date: Sun, 14 Jan 2018 13:56
63 lines
2038 bytes
W dniu niedziela, 14 stycznia 2018 20:05:53 UTC+1 użytkownik J-23 napisał:
> W dniu 14.01.2018 o 18:37, zpksoft pisze:
> > 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ć
> 
> 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

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ł
Re: Zeos aktualizacja blob'a problem
#81137
Author: J-23
Date: Sun, 14 Jan 2018 17:06
59 lines
1695 bytes
W dniu 14.01.2018 o 16:44, zpksoft pisze:
> W dniu sobota, 13 stycznia 2018 21:26:11 UTC+1 użytkownik J-23 napisał:
>> 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
>
> A jakiś commit po post?
>

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
Re: Zeos aktualizacja blob'a problem
#81140
Author: J-23
Date: Sun, 14 Jan 2018 20:05
47 lines
1439 bytes
W dniu 14.01.2018 o 18:37, zpksoft pisze:
> 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ć

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
Re: Zeos aktualizacja blob'a problem
#81142
Author: immo
Date: Sun, 14 Jan 2018 23:03
11 lines
369 bytes
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.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads