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

CodeTyphon + ZEOSLIB + problem z zapisem grafiki

54 views
Skip to first unread message

jw_developer

unread,
Nov 12, 2017, 6:19:12 AM11/12/17
to
Witam !

Windows 10/64 bit + Firebird 2.5 + CodeTyphon 6.2 +
ZEOSLIB(zainstalowana z CT)

Pole w bazie danych zadeklarowane jako :
F_03 BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL
W poprzedniej wersji CT (5.9) zapis i odczyt grafiki działał bez
problemu a w aktualnej wersji nie zapisuje się nic albo ewentualnie
jakieś "krzaki" bez względu na format zapisywanej grafiki.

StoredProc_1.Params.AddParam(StoredProc_1.Params.CreateParam(ftBlob,'P_03',
ptInput));
if OpenPictureDialog1.FileName.IsEmpty then
StoredProc_1.ParamByName('P_03').Value := Null
else
StoredProc_1.ParamByName('P_03').LoadFromFile(OpenPictureDialog.FileName,
ftBlob);

Gdzie może być błąd ?.....

miab

unread,
Nov 13, 2017, 5:52:50 AM11/13/17
to
W dniu 12-11-2017 o 12:19, jw_developer pisze:
> F_03 BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL

Dlaczego NOT NULL?
Masz klucz?

miab

jw_developer

unread,
Nov 13, 2017, 7:28:30 AM11/13/17
to
W dniu 2017-11-13 o 11:51, miab pisze:
Tak. Jest to tabela przechowująca wizerunki (zdjęcia) pracowników
(jeżeli takowe istnieją), która posiada również pole F_02 (integer)
będącym kluczem obcym do tabeli pracowników. Zapomniałem napisać, że
ZEOS-y to 7.2.1-rc

miab

unread,
Nov 13, 2017, 9:23:10 AM11/13/17
to
W dniu 13-11-2017 o 13:28, jw_developer pisze:
Mi taka sekwencja:

<code>
if OpenPictureDialog1.Execute then
begin
ZQuery1.ParamByName('F_BLOB').LoadFromFile(OpenPictureDialog1.FileName,
ftBlob);
ZQuery1.ParamByName('F1').Value:=StrToInt(Edit1.Text);
ZQuery1.ParamByName('F2').Value:=Edit2.Text;
ZQuery1.ExecSQL;
end;
</code>

dla SQL:
INSERT INTO T1 VALUES (:F1, :F2, :F_BLOB)

działa z formatem *.bmp w Lazarus 1.8RC5-Win32 i Delphi 10-Win32
dla FB2.5 i ZEOS 7.2.x svn 4052(7.3.x zresztą też):
https://sourceforge.net/p/zeoslib/code-0/HEAD/tree/branches/testing-7.2/
Nie wiem dlaczego w CT to nie działa(może autor za bardzo odpłynął od
głównego nurtu Lazarus'a)

miab



Roman Tyczka

unread,
Nov 13, 2017, 9:40:24 AM11/13/17
to
On Sun, 12 Nov 2017 12:19:16 +0100, jw_developer wrote:

> Pole w bazie danych zadeklarowane jako :
> F_03 BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL
[...]
> StoredProc_1.ParamByName('P_03').LoadFromFile(OpenPictureDialog.FileName,
> ftBlob);

> Gdzie może być błąd ?.....

W nazwie kolumny... nie P_03 tylko F_03

--
pozdrawiam
Roman Tyczka

miab

unread,
Nov 13, 2017, 9:42:04 AM11/13/17
to
W dniu 13-11-2017 o 13:28, jw_developer pisze:
Na marginesie .
Nie wiem dlaczego piszesz ze używasz:
ZEOS-y to 7.2.1-rc
skoro autor CT pisze:
-Update pl_ZeosDBO to Ver 6.3.1 Source SVN Rev 4013
do tego nie za bardzo wiem za bardzo z której gałęzi ciągnie i co tam
przerabia.

miab

miab

unread,
Nov 13, 2017, 9:44:43 AM11/13/17
to
W dniu 13-11-2017 o 15:40, Roman Tyczka pisze:
No, parametry można sobie nazywać fantazyjnie.

miab

Roman Tyczka

unread,
Nov 13, 2017, 10:04:53 AM11/13/17
to
On Mon, 13 Nov 2017 15:42:55 +0100, miab wrote:

>>> Gdzie może być błąd ?.....
>>
>> W nazwie kolumny... nie P_03 tylko F_03
>>
>
> No, parametry można sobie nazywać fantazyjnie.

Tak, ale zwracam uwagę, że tu też może być błąd.

--
pozdrawiam
Roman Tyczka

miab

unread,
Nov 13, 2017, 10:38:10 AM11/13/17
to
W dniu 13-11-2017 o 15:21, miab pisze:
W wersji:
Typhon 6.2 Data 2017-05-17 r54940 FPC 3.1.1 i386-win32-win32/win64
też mi to działa.

miab

jw_developer

unread,
Nov 14, 2017, 5:55:00 AM11/14/17
to
W dniu 2017-11-13 o 15:21, miab pisze:
przy wykorzystaniu powyższej konstrukcji udało mi się zapisać *.bmp lecz
pozostałe formaty dalej się *wykrzaczają*. Jest to ważne, ponieważ mam
również potrzebę zapisywania do bazy załączników w najrozmaitrzych
formatach, z których *.bmp będzie formatem zapisywanym sporadyczne !
Przy zapisie tekstowych BLOB-ów jest OK

CT 6.2 2017-10-30 r55649 FPC 3.1.1
ZConnection -> Version -> 7.2.1 -rc

Przy okazji, czy zna ktoś jakąś sensowną alternatywę (darmową) do
obsługi Firebird możliwą do zainstalowania w CT 6.2 (oczywiście poza
pakietami instalowanymi razem z IDE) ?

Pozdrawiam

miab

unread,
Nov 14, 2017, 6:06:18 AM11/14/17
to
W dniu 14-11-2017 o 11:55, jw_developer pisze:

>
> przy wykorzystaniu powyższej konstrukcji udało mi się zapisać *.bmp lecz
> pozostałe formaty dalej się *wykrzaczają*. Jest to ważne, ponieważ mam
> również potrzebę zapisywania do bazy załączników w najrozmaitrzych
> formatach, z których *.bmp będzie formatem zapisywanym sporadyczne !
> Przy zapisie tekstowych BLOB-ów jest OK

Z tego w zasadzie wynika ze problem masz z prezentacja wizualną
uprzednio zapisanych a następnie odczytanych danych. Może to:
http://forum.lazarus.freepascal.org/index.php?topic=17606.0

miab

jw_developer

unread,
Nov 14, 2017, 6:31:14 AM11/14/17
to
W dniu 2017-11-14 o 12:04, miab pisze:
Ponieważ korzystam z IBExpert-a mam możliwość podglądu zapisanych danych
w przeglądarce BLOB-ów i widzę, że problem leży nie w prezentacji a w
błędnym zapisie.Jak już wcześniej pisałem, we wcześniejszej wersji
CT 5.9 wszystko działało rewelacyjnie (dokładnie ta sama wersja FB) !

Pozdrawiam

miab

unread,
Nov 14, 2017, 7:33:38 AM11/14/17
to
W dniu 14-11-2017 o 12:31, jw_developer pisze:
U mnie prawidłowao działa zapis wspomniana metodą w:
Lazarus 1.8RC5 ZEOS 7.2.x svn 4052
i CT 6.2 pl_ZeosDBO Ver 6.1.2 Date 10-03-2017 SVN trunk Rev 3981.
I dotyczy to formatów *.bmp, *.jpg i *.png i widać to nawet w DBImage.
Na marginesie w Delphi 10 DBImage radzi sobie tylko z formatem *.bmp.
Z tego co pamietam w podobnej sytuacji nie używałem w Delphi wprost DBImage.

miab

miab

unread,
Nov 27, 2017, 6:18:39 PM11/27/17
to
W dniu 12-11-2017 o 12:19, jw_developer pisze:
Raczej nie w ZEOS (teraz sprawdziłem).
W Delphi 10 i Lazarus 1.8RC5 działa
.LoadFromFile(OpenPictureDialog.FileName, ftBlob)
natomiast w CT 6.30 nie(znaczy działa z błędami w danych).
Natomiast ładowanie przez pośredniego stream-a działa dla wszystkich:
<code>
procedure TForm1.Button4Click(Sender: TObject);
var
blob, fs: TStream;
begin
if OpenPictureDialog1.Execute then
begin
//
ZTable1.Insert;
ZTable1.FieldByName('F1').AsInteger:= 4;
blob:= ZTable1.CreateBlobStream(ZTable1.FieldByName('F_BLOB'), bmWrite);
try
blob.Seek(0, soFromBeginning);

fs:= TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead or
fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;

ZTable1.Post;

end;
end;
</code>

miab

jw_developer

unread,
Nov 28, 2017, 7:19:25 AM11/28/17
to
W dniu 2017-11-28 o 00:16, miab pisze:
Witam !

Chociaż jest to konstrukcja *bardzo pokrętna* to działa !
Niestety ja dokonuję zapisu z użyciem StoredProc + Execproc (BLOB jest
jednym z parametrów) i nie wiem za bardzo jak dostosować powyższy kod.
Poza tym pozostaje problem odczytu (umieszczenia LOBA w Image.Picture) gdyż

ST := TStringStream.Create(StoredProc_1.ParamByName('NAZWA PARAMETRU
BLOB').AsString);
Image1.Picture.LoadFromStream(ST);

również nie działa (w CT 5.9 działa super !). Pobieranie parametru
dokonuje się również przy użyciu StoreProc + Execproc gdyż w
międzyczasie dokonywane są inne odczyty, zapisy do tabel tymczasowych
itp ... co mogłoby generować niepotrzebny ruch w sieci.

Pozdrawiam
0 new messages