2017-02-05 6 views
0

私はクライアントとサーバーのアプリを持っています。 私は両方の側でテザリングアプリケーションを使用しています。 サーバー側ではSQLiteデータベースを使用 クライアント側データベースはありません。 クライアントがServerデータベースからデータを取得しています。 サーバコードの場合は大丈夫だと思います。クライアントの問題、私は分割することはできません!私はクライアントサイドにコードを書いた。誰かが私の間違いはどこにあるのですか? 分割する方法r3.Text:= AResource.Value.AsString; ?SplitStringまたはデリミタで文字列を分割する方法は?

サーバーサイドコード:

procedure TfServerPage.tAProfileResourceReceived(const Sender: TObject; 
    const AResource: TRemoteResource); 
    var 
    result:string; 
    r1,r2,r3:TstringList; 
    begin 

if AResource.Hint='List' then 
     begin 
      //ShowMessage(AResource.Value.AsString); 
      r1:=TStringList.Create; 
      r2:=TStringList.Create; 
      r3:=TStringList.Create; 
      rQuery.Open; 
      while not rQuery.Eof do 
       begin 
       r1.add(rQuery.FieldByName('username').AsString); 
       r2.add(rQuery.FieldByName('password').AsString); 
       r3.add(rQuery.FieldByName('nickname').AsString); 
       rQuery.Next; 
       end; 
      result:=r1.Text+#13+r2.Text+#13+r3.text; 
      tAProfile.SendString(tManager.RemoteProfiles.First,'List2',result); 

     end; 
end; 

クライアント側コード:サーバー側で

procedure TfAuth.tAProfileResourceReceived(const Sender: TObject; 
    const AResource: TRemoteResource); 
var i:integer; 
r3,s1,s2,s3:TStringList; 
begin 


    if AResource.Hint='List2' then 
     begin 
     r3:=TStringList.Create; 
     r3.Text:=AResource.Value.AsString; // <-From Server 

     s1:=TStringList.Create; 
     s2:=TStringList.Create; 
     s3:=TStringList.Create; 

     s1.Text:=SplitString(r3.Text,#13)[0]; //Split username 
     s2.Text:=SplitString(r3.Text,#13)[1]; //password 
     s3.Text:=SplitString(r3.Text,#13)[2]; //nickname 

     for i := 0 to r3.Count do 
      begin 
      StringGrid1.Cells[0,i]:=s1[i]; 
      StringGrid1.Cells[1,i]:=s2[i]; 
      StringGrid1.Cells[2,i]:=s3[i]; 
      end; 
    end; 

end; 
+0

私はあなたが 's1.Add(SplitString(r3.Text、#13)[0を書くべきだと思います]); '' s1.Text:= SplitString(r3.Text、#13)[0] 'の代わりに – Sami

答えて

0

サーバーサイドコード:

result:=r1.Text+#0+r2.Text+#0+r3.text; 

クライアント側コード:

s1.Text:=SplitString(r3.Text,#0)[0]; 

    s2.Text:=SplitString(r3.Text,#0)[1]; 

    s3.Text:=SplitString(r3.Text,#0)[2]; 
1

あなたは3つの文字列のリスト、R1にDBレコードからフィールドを追加 - ユーザ名、R2 - パスワードとr3 - ニックネーム。文字列リストは、既定の行末文字としてCarriageReturn - LineFeed(または#13#10)を使用します。

これらの文字列リストのテキストを、r1.Text、r2.Text、r3.Textの間の#13で連結すると、#13に基づいて文字列リストに分割するのが間違ってしまいます。文字列リストの区切り文字として、他の文字を使用する必要があります。試してみてください。 #11(垂直タブ)。

クライアント側のr3:TStringListの代わりにs:stringも使用します。

メモリが不足しているため、TStringListを解放する必要があります。

さらに大きなデータレコードを転送する場合は、XMLまたはJSONの使用を検討する必要があります。これらは、より便利な方法でデータをシリアライズする手段を提供します。

+0

Bro、JSONを私の場合で使用する方法...? ;(((((((( –

+0

)アレックスは申し訳ありませんが、Stack Overflowの回答はあまりにも幅広い話題です。ヘルプやサンプルの初心者のためには、Google for "delphi json"などがあります。ネット。 –

+0

http://stackoverflow.com/questions/42140246/delphi-how-to-get-all-images-from-server-database-by-using-app-tethering –

関連する問題