Wie erhalten Sie alle Bilder von der Server-Datenbank mithilfe von App-Tethering?
Eigentlich ist das sehr einfach zu tun, so wie ich es unten getan habe.
Ich hoffe, dass Ihre Anwendungen mit den beiden unten durch einen Vergleich, werden Sie in der Lage sein , um herauszufinden, was Sie tun müssen, um zu bekommen Ihr richtig oder zu arbeiten, wenn nicht, ist es zumindest könnte Ihre q verfeinern helfen sich auf das genaue Problem konzentrieren.
Um zu verhindern, dass Ihre Daten hier nicht verfügbar sind und die Verwendung von FMX und Live Bindings (und wie Sie sie verwenden) in die Quere kommen, stütze ich meine Apps auf den BioLife.CDS Daten finden Sie in Ihrem Delphi Samples/Data-Ordner.Ich Basis den Code der beiden Anwendungen auf Malcolm Groves Tutorial hier
http://www.malcolmgroves.com/blog/?p=1854
und in beiden Apps Ich habe eine ClientDataSet, Datasource, DBGrid, DBNavigator und DBImage in jeder App, genau verbunden, wie Sie würde erwartet in einer minimalen db-aware-101-Anwendung.
Das Anbinden Mechanismus sendet die erste CDS-Daten der App auf die zweite Anwendung als ein Strom, der TClientDataSet SaveToStream
und LoadFromStream
Methoden.
Die beiden Apps funktionierten zum ersten Mal mit Null Debugging.
App1 Code:
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;
Client-Code:
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 scheinen mit Livebindings gut zu funktionieren, wenn Sie also nach wie vor Probleme, es haben, werden Es könnte sich lohnen, die Datenübertragung auf die gleiche Weise wie ich durchzuführen.
Was Ihre zweite q
Wie alle Bilder aus Server-Datenbank kopieren und auf dem Client erstellten Ordner [Client \ db \ images] speichern?
Wenn Sie eine TClientDataSet verwenden, um die Daten auf dem Client zu halten (auch wenn Sie es mit einigen Livebindings Mechanismus Anzeige), können Sie es auf dem Client speichern, indem einfach die SaveToFile
Methode des CDS aufrufen.
Verwenden Sie nur das generische Delphi-Tag und das ** einzelne ** spezifische Versions-Tag für die von Ihnen verwendete Delphi-Version. Hinzufügen von allen von ihnen (einschließlich mehrere, die ** nicht unterstützen Tethering ** ist einfach lächerlich. –
Ich werde jetzt korrigieren. –