Перейти к содержанию
Fire Monkey от А до Я
  • 0

Сохранение пользователей сообщений чата


Вопрос

Вот такой код написал при компеляции ошибок не  выдает. 

unit yadro;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdUDPClient,
  IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, FMX.StdCtrls, FMX.Edit,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, IdGlobal, IdSocketHandle,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
  FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Phys, FireDAC.Stan.Pool,
  FireDAC.Stan.Async, FireDAC.Phys.MSAcc, FireDAC.Phys.MSAccDef,
  FireDAC.FMXUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
  FireDAC.DApt, System.Rtti, FMX.Grid.Style, Data.Bind.EngExt,
  Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,
  Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.Grid, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    IdUDPServer1: TIdUDPServer;
    Button2: TButton;
    Button3: TButton;
    Label2: TLabel;
    Timer1: TTimer;
    FDManager1: TFDManager;
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    DataSource1: TDataSource;
    StringGrid1: TStringGrid;
    BindSourceDB1: TBindSourceDB;
    BindingsList1: TBindingsList;
    LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    LinkControlToField1: TLinkControlToField;
    LinkControlToField2: TLinkControlToField;
    LinkControlToField3: TLinkControlToField;
    LinkControlToField4: TLinkControlToField;
    Timer2: TTimer;
    Label5: TLabel;
    procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Openstr();
    procedure Closestr();
    procedure Change();

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  S:string;
  s1,s2,s3:String;
  d:integer;
  SD:boolean;
implementation

{$R *.fmx}

procedure TForm2.Button2Click(Sender: TObject);
begin
  Form2.IdUDPServer1.Active:=true;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
Form2.IdUDPServer1.Active:=false;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
FDQuery1.Insert;
end;

procedure TForm2.Button5Click(Sender: TObject);
begin
FDQuery1.Post;
end;

procedure TForm2.Button6Click(Sender: TObject);
begin
FDQuery1.Delete;
end;

procedure TForm2.Change;
begin
FDQuery1.DataSource.DataSet.Locate('Login',label3.Text,[lopartialkey]);
if  (label3.Text<>edit2.Text) then
SD:=true
else
 SD:=false;
end;

procedure TForm2.Closestr;
begin
FDQuery1.Post;
end;

procedure TForm2.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
  var
    ss:TStringStream; //сохранять буквы будем тут
  s,buff:String; //вспомогательные переменные
begin
      ss:=TStringStream.create(''); //создаем пустую строку
    ss.write(adata[0],length(adata)); //записываем в нее данные из потока байт
    s:=ss.DataString; //преобразовываем ее в текст
     ss:=TStringStream.create(''); //создаем пустую строку
    ss.write(adata[0],length(adata)); //записываем в нее данные из потока байт
    s:=ss.DataString; //преобразовываем ее в текст
      Memo1.Lines.Add(s);  // если кракоз¤бры то пробуем Utf8ToAnsi и т д (но у мен¤ и так работает)
      ss.free;//очищаем строку от мусора
       S1:=s;
      S2:=s;
      delete(S1,1,4);
      delete(S2,4,Length(S2));
      label3.Text:=S1;
      label4.Text:=S2;

end;

procedure TForm2.Openstr;
begin
FDQuery1.Insert;
end;

procedure TForm2.Timer1Timer(Sender: TObject);


begin


if form2.IdUDPServer1.Active=true then
begin

  label2.Text:='Server On - port 8488';
end
else
   label2.Text:='Server Off';
end;
procedure TForm2.Timer2Timer(Sender: TObject);

begin

if (label3.Text.Length<>0) and (label4.Text.Length<>0) then


Form2.Change;
if SD=true then

begin

d:=strtoint(label4.Text);
case d of
0:begin

FDQuery1.Insert;
label5.Text:=inttostr(d);
edit2.Text:=label3.Text;
label3.Text:='';
label4.Text:='';
end;

100:begin
label5.Text:=inttostr(d);
edit3.Text:=label3.Text;
edit4.Text:='User';
label3.Text:='';
label4.Text:='';
FDQuery1.Post;

end;
end;

End;
end;

end.

при попытке сохранить в аксес выдает вот что:

 

подозеваю чтопроблема вот в этом кусочке

FDQuery1.DataSource.DataSet.Locate('Login',label3.Text,[lopartialkey]);
if  (label3.Text<>edit2.Text) then

Потому, что когда убираю проблема исчезает, но сохранение в базу данных не происходит по-прежнему. Появляется пустая строка и все.
Если пробовать писать руками в эдиты все норм сохраняет.

 

1.jpg

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

поменял процедуру теперь тоже самое но после ввода логина:

procedure TForm2.Timer2Timer(Sender: TObject);

begin

if (label4.Text<>'') and (label3.Text<>'') and (label3.Text.Length<>0) and (label4.Text.Length<>0) then
d:=strtoint(label4.Text);
case d of
100:begin

FDQuery1.Insert;
label5.Text:=inttostr(d);
edit2.Text:=S1;
label3.Text:='';
label4.Text:='';
end;

101:begin
label5.Text:=inttostr(d);
edit3.Text:=S1;
edit4.Text:='User';
label3.Text:='';
label4.Text:='';

if (FDQuery1.DataSource.DataSet.Locate('Login',S1,[])=true) and (edit2.Text<>'') and (edit3.Text<>'') and (edit3.Text.Length<>0) and (edit2.Text.Length<>0) then
begin
FDQuery1.Post;
end
else
begin
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
end;
end;
end;
End;

 

Ссылка на комментарий
  • 0
В 09.03.2020 в 12:28, виталий Соловьёв сказал:

FDQuery1.DataSource.DataSet.Locate('Login',S1,[])=true)

http://docwiki.embarcadero.com/RADStudio/Rio/en/Finding_a_Record_(FireDAC)

еще раз - учите как правильно работать с базами данных. код полный бред. нельзя ввести query в режим ввода данных, сделать поиск по этому query а потом делать post. после первого же изменения позиции текущей строки произойдет или автосохранение или отмена вставки, в зависимости от настроек. ну или это не ваше если упорно не хотите изучать манулы. 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...