TClientDataSet + TGraphicField
0 отговора
11 прегледа
TClientDataSet + TGraphicField
Спретнал съм някво уж multi-tier приложенийце и търкалям разни данни на разни хора + снимките им. Отдолу седи парадокска таблица с разни полета и едно Graphic BLOB (размера му в .DB е 15 байта, ако има някакво значение). В "сървъра" е TTable, TDataSetProvider, цялото тва нещо в TRemoteDataModule. Оттатъка (в клиента) е TDCOMConnection + TClientDataSet. Вместо борландския midas.dll ползвам Hyperbase 3.5 на един руснак (Владимир Гаетанов или нещо от сорта беше). Във формичката съм турил TImage и след стандартните DCOM.Connected := TRUE, CDS.Open и CDS.Data := CDS.DataRequest('') се пробвам да чета и пиша снимката със следния примерен код:
И тука се явява проблемът (с главно П :-)
дори след CDS.Post, ChangeCount на CDS-а си остава 0, съответно ApplyUpdates не аплайва ъпдейти :-) и снимката пътува в небитието...
Начи реших че нещо съм мноу тъп или подобно, ама за всеки случай реших да пробвам същото нещо, само че директно с TTable, както и с TClientDataSet, ама направо към TDataSetProvider<->TTable. И хоп - Владко остана изненадан, щото тва бачка като пушка... Реших след това отново да пробвам през DCOM-а (без изобщо да модифицирам кода) и то и оттам стана... баси кво стаа тука ся?
Пиша го същото нещо (Цопъ-Пасте) в баш-програмчето и... познайте - тва отново не бачка (т.е. снимките не се записват в базата). Доколкото схванах, след един директен запис в базата данни (направо с TTable) всичко почва да работи нормално. Някой да има представа от какво може да е това?
uses JPEG;
// четене на снимката от файл
procedure TForm1.Button1Click(Sender: TObject);
var fmt : Word;
h : THandle;
pal : HPalette;
begin
dlgOpen.Filter := GraphicFilter(TGraphic);
dlgOpen.DefaultExt := GraphicExtension(TGraphic);
if not dlgOpen.Execute then
Exit;
Img.Picture.LoadFromFile(dlgOpen.FileName);
Img.Picture.SaveToClipboardFormat(fmt, h, pal);
Img.Picture.LoadFromClipboardFormat(fmt, h, pal);
end;
// За ClientDataSet<->DCOM<->Provider<->Table
procedure TForm1.Button2Click(Sender: TObject);
begin
If not CDS.Active then begin
CDS.Open;
CDS.Data := CDS.DataRequest('');
end;
If CDSPicture.BlobSize > 0 then
Img.Picture.Assign(CDSPicture);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
If not CDS.Active then begin
CDS.Open;
CDS.Data := CDS.DataRequest('');
end;
CDS.Edit;
CDSPicture.Assign(Img.Picture);
CDS.Post;
CDS.ApplyUpdates(-1);
end;
И тука се явява проблемът (с главно П :-)
дори след CDS.Post, ChangeCount на CDS-а си остава 0, съответно ApplyUpdates не аплайва ъпдейти :-) и снимката пътува в небитието...
Начи реших че нещо съм мноу тъп или подобно, ама за всеки случай реших да пробвам същото нещо, само че директно с TTable, както и с TClientDataSet, ама направо към TDataSetProvider<->TTable. И хоп - Владко остана изненадан, щото тва бачка като пушка... Реших след това отново да пробвам през DCOM-а (без изобщо да модифицирам кода) и то и оттам стана... баси кво стаа тука ся?
Пиша го същото нещо (Цопъ-Пасте) в баш-програмчето и... познайте - тва отново не бачка (т.е. снимките не се записват в базата). Доколкото схванах, след един директен запис в базата данни (направо с TTable) всичко почва да работи нормално. Някой да има представа от какво може да е това?