Как получить все изображения из базы данных сервера, используя привязку к приложениям?
На самом деле, это очень просто сделать, как я это сделал.
Я надеюсь, что, сравнивая свои приложения с двумя ниже, вы сможете понять , что вам нужно сделать, чтобы получить ваш правильно работать или, если нет, то по крайней мере, может помочь уточнить д чтобы сосредоточиться на том, что такое точная проблема.
Чтобы остановить детали, такие как отсутствие доступных здесь данных, а также использование FMX и живых привязок (и как вы можете их использовать), я вставил свои приложения в данные BioLife.CDS найдите в папке Delphi Samples/Data.Я на основе кода из двух приложений на Malcolm Гровс учебник здесь
http://www.malcolmgroves.com/blog/?p=1854
и в обоих приложениях у меня есть ClientDataSet, DataSource, DBGrid, DBNavigator и DBImage в каждом приложении, подключены именно так, как вы бы ожидайте в минимальном приложении db-aware-101.
Механизма привязывать отправляют данные CDS первого приложения для второго приложения в виде потока, с использованием TClientDataSet SaveToStream
и LoadFromStream
методы.
Эти два приложения работали в первый раз с нулевой отладкой.
App1 код:
TApp1Form = class(TForm)
TetheringManager1: TTetheringManager;
TetheringAppProfile1: TTetheringAppProfile;
DBImage1: TDBImage;
btnConnect: TButton;
Label1: TLabel;
CDS1: TClientDataSet;
CDS1SpeciesNo: TFloatField;
CDS1Category: TStringField;
CDS1Common_Name: TStringField;
CDS1SpeciesName: TStringField;
CDS1Lengthcm: TFloatField;
CDS1Length_In: TFloatField;
CDS1Notes: TMemoField;
CDS1Graphic: TGraphicField;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
btnSendStream: TButton;
[...]
end;
[...]
procedure TApp1Form.btnConnectClick(Sender: TObject);
begin
TetheringManager1.AutoConnect;
end;
procedure TApp1Form.btnSendStreamClick(Sender: TObject);
begin
CDSToStream;
end;
procedure TApp1Form.FormCreate(Sender: TObject);
begin
CDS1.Open;
Caption := Format('App1 : %s', [TetheringManager1.Identifier]);
end;
procedure TApp1Form.TetheringManager1PairedToRemote(const Sender: TObject; const
AManagerInfo: TTetheringManagerInfo);
begin
Label1.Caption := Format('Connected : %s %s',
[AManagerInfo.ManagerIdentifier,
AManagerInfo.ManagerName]);
end;
procedure TApp1Form.CDSToStream;
var
Stream : TMemoryStream;
begin
Stream := TMemoryStream.Create;
CDS1.SaveToStream(Stream);
Stream.Position := 0;
TetheringAppProfile1.Resources.FindByName('BioLife').Value := Stream;
end;
код клиента:
type
TFmxApp2Form = class(TForm)
CDS1: TClientDataSet;
DataSource1: TDataSource;
ImageControl1: TImageControl;
BindingsList1: TBindingsList;
BindNavigator1: TBindNavigator;
BindSourceDB1: TBindSourceDB;
LinkControlToField2: TLinkControlToField;
TetheringManager1: TTetheringManager;
TetheringAppProfile1: TTetheringAppProfile;
StringGrid1: TStringGrid;
Label1: TLabel;
CDS1SpeciesNo: TFloatField;
CDS1Category: TStringField;
CDS1Common_Name: TStringField;
CDS1SpeciesName: TStringField;
CDS1Lengthcm: TFloatField;
CDS1Length_In: TFloatField;
CDS1Notes: TMemoField;
CDS1Graphic: TGraphicField;
LinkGridToDataSource1: TLinkGridToDataSource;
procedure TetheringAppProfile1ResourceReceived(const Sender: TObject; const
AResource: TRemoteResource);
procedure TetheringManager1PairedFromLocal(const Sender: TObject; const
AManagerInfo: TTetheringManagerInfo);
private
end;
[...]
procedure TFmxApp2Form.TetheringAppProfile1ResourceReceived(const Sender: TObject;
const AResource: TRemoteResource);
begin
AResource.Value.AsStream.Position := 0;
CDS1.LoadFromStream(AResource.Value.AsStream);
end;
procedure TFmxApp2Form.TetheringManager1PairedFromLocal(const Sender: TObject; const
AManagerInfo: TTetheringManagerInfo);
begin
Label1.Text := Format('Connected : %s %s',
[AManagerInfo.ManagerIdentifier,
AManagerInfo.ManagerName]);
end;
Client DFM
object FmxApp2Form: TFmxApp2Form
[...]
object ImageControl1: TImageControl
Bitmap.PNG = {}
object BindNavigator1: TBindNavigator
[...]
DataSource = BindSourceDB1
end
object StringGrid1: TStringGrid
[...]
end
object Label1: TLabel
[...]
end
object CDS1: TClientDataSet
Aggregates = <>
FieldDefs = <
item
Name = 'Species No'
DataType = ftFloat
end
item
Name = 'Category'
DataType = ftString
Size = 15
end
item
Name = 'Common_Name'
DataType = ftString
Size = 30
end
item
Name = 'Species Name'
DataType = ftString
Size = 40
end
item
Name = 'Length (cm)'
DataType = ftFloat
end
item
Name = 'Length_In'
DataType = ftFloat
end
item
Name = 'Notes'
DataType = ftMemo
Size = 50
end
item
Name = 'Graphic'
DataType = ftGraphic
end>
IndexDefs = <>
Params = <>
StoreDefs = True
Left = 40
Top = 32
object CDS1SpeciesNo: TFloatField
FieldName = 'Species No'
end
object CDS1Category: TStringField
FieldName = 'Category'
Size = 15
end
object CDS1Common_Name: TStringField
FieldName = 'Common_Name'
Size = 30
end
object CDS1SpeciesName: TStringField
FieldName = 'Species Name'
Size = 40
end
object CDS1Lengthcm: TFloatField
FieldName = 'Length (cm)'
end
object CDS1Length_In: TFloatField
FieldName = 'Length_In'
end
object CDS1Notes: TMemoField
FieldName = 'Notes'
BlobType = ftMemo
Size = 50
end
object CDS1Graphic: TGraphicField
FieldName = 'Graphic'
BlobType = ftGraphic
end
end
object DataSource1: TDataSource
DataSet = CDS1
Left = 104
Top = 32
end
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 40
Top = 152
object LinkControlToField2: TLinkControlToField
Category = 'Quick Bindings'
DataSource = BindSourceDB1
FieldName = 'Graphic'
Control = ImageControl1
Track = False
end
object LinkGridToDataSource1: TLinkGridToDataSource
Category = 'Quick Bindings'
DataSource = BindSourceDB1
GridControl = StringGrid1
Columns = <>
end
end
object BindSourceDB1: TBindSourceDB
DataSet = CDS1
ScopeMappings = <>
Left = 40
Top = 88
end
object TetheringManager1: TTetheringManager
OnPairedFromLocal = TetheringManager1PairedFromLocal
Text = 'TetheringManager1'
AllowedAdapters = 'Network'
Left = 40
Top = 240
end
object TetheringAppProfile1: TTetheringAppProfile
Manager = TetheringManager1
Text = 'TetheringAppProfile1'
Group = 'MAGroup'
Actions = <>
Resources = <
item
Name = 'BioLife'
IsPublic = True
Kind = Mirror
ResType = Stream
OnResourceReceived = TetheringAppProfile1ResourceReceived
end>
OnResourceReceived = TetheringAppProfile1ResourceReceived
Left = 224
Top = 240
end
end
TClientDataSets, кажется, хорошо работают с LiveBindings, так что если вы все еще возникают проблемы, это может стоить делать передачу данных так же, как и я.
Что касается второго д
Как скопировать все изображения из базы данных сервера и сохранить на компьютере-клиенте папку [Client \ DB \ изображения]?
Если вы используете TClientDataSet для хранения данных на клиентском компьютере (даже если вы показываете его с помощью какой-то LiveBindings механизм), вы можете сохранить его на клиенте, просто вызвав метод SaveToFile
компакт-дисках игровая.
Пожалуйста, используйте только общий тег Delphi и тег ** отдельного тега ** для версии Delphi, которую вы используете. Добавление всех из них (в том числе нескольких, которые ** не поддерживают привязку **, просто смешно. –
Я исправлю сейчас. –