2017-02-05 4 views
0

У меня есть клиент и серверные приложения. Я использую приложение для привязки в обе стороны. На стороне сервера У меня база данных SQLite На стороне клиента Нет базы данных; Клиент, получающий данные из базы данных сервера. С кодом сервера Я думаю, что все в порядке. Проблема с клиентом, я не могу Сплит !!! Я написал код на стороне клиента. Может кто-нибудь сказать мне, где моя ошибка ??? Как разделить 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 - имена пользователей, r2 - пароли и r3 - псевдонимы. Строковые списки используют CarriageReturn - LineFeed (или # 13 # 10) как символы конца строки по умолчанию.

Когда вы объединяете тексты этих строковых списков с # 13 между r1.Text, r2.Text и r3.Text, разделение обратно на строковые списки на основе # 13 идет не так. Вы должны использовать другой символ в качестве разделителя для строковых списков. Попробуйте, например, # 11 (вертикальная вкладка).

Я бы использовал только s:string вместо r3:TStringList со стороны клиента.

Вы теряете память и должны освобождать TStringList!

Лучше, если вы собираетесь передавать большие записи данных, вам следует рассмотреть возможность использования XML или JSON. Они обеспечивают средства для сериализации данных более удобным способом.

+0

Bro, Как использовать JSON в моем случае ...? ; ((( –

+0

Извините Alex, но это слишком широкая тема, на которую нужно ответить здесь, на Stack Overflow. Для стартового просмотра в справке и образцах Google для «delphi json» и т. Д. Существует множество документов и статей о сеть. –

+0

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