OSDN Git Service

ツールを追加したのを忘れていました
[newstable/newstable.git] / Unit1.pas
1 unit Unit1;
2
3 interface
4
5 uses
6   System.SysUtils, System.Classes, System.JSON, FireDAC.Comp.Client, Data.DB,
7   FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
8   FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
9   FireDAC.Stan.Async, FireDAC.DApt, FireDAC.UI.Intf, FireDAC.Stan.Def,
10   FireDAC.Stan.Pool, FireDAC.Phys, FireDAC.Phys.MySQL, FireDAC.Phys.MySQLDef,
11   FireDAC.Comp.DataSet, FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.FB,
12   FireDAC.Phys.FBDef;
13
14 type
15   TDataModule1 = class(TDataModule)
16     database: TFDTable;
17     indexTable: TFDTable;
18     reader: TFDTable;
19     magList: TFDTable;
20     MagazineConnection: TFDConnection;
21     FDQuery1: TFDQuery;
22     news: TFDTable;
23     FDGUIxWaitCursor1: TFDGUIxWaitCursor;
24     writer: TFDTable;
25     writerwriterId: TIntegerField;
26     writerwriter: TWideStringField;
27     writermail: TWideStringField;
28     writerpassword: TWideStringField;
29     magListwriterId: TIntegerField;
30     magListmagId: TIntegerField;
31     newsmagId: TIntegerField;
32     newsday: TDateField;
33     newschanged: TBooleanField;
34     newsenabled: TBooleanField;
35     readerreaderId: TIntegerField;
36     readerreader: TWideStringField;
37     readermail: TWideStringField;
38     readerpassword: TWideStringField;
39     indexTablereaderId: TIntegerField;
40     indexTablemagId: TIntegerField;
41     mag: TFDTable;
42     magmagId: TIntegerField;
43     magmagName: TWideStringField;
44     magcomment: TWideStringField;
45     magday: TDateField;
46     maglastDay: TDateField;
47     magenable: TBooleanField;
48     image: TFDTable;
49     newsnewsId: TIntegerField;
50     magmagNum: TWideStringField;
51     procedure DataModuleCreate(Sender: TObject);
52   private
53     { Private \90é\8c¾ }
54     function makeTable(Sender: TObject): TJSONObject;
55   public
56     { Public \90é\8c¾ }
57     procedure AddMagazine(id: integer; out Data: TJSONObject);
58     procedure backNumber(id: integer; out Data: TJSONObject);
59     function existsMail(mail: string): Boolean;
60     function checkUserPassword(id: integer; password: string): Boolean;
61     function createReaderId(Data: TJSONObject): integer;
62     procedure deleteReaderId(Data: TJSONObject);
63     function updateReaderId(Data: TJSONObject): Boolean;
64     procedure custData(id: integer; Data: TJSONObject);
65     procedure custView(id: integer; out Data: TJSONObject);
66     procedure deleteMagazine(id: integer);
67     procedure deleteNumber(id, num: integer);
68     procedure deleteWriter(id: integer);
69     procedure getView(id, num: integer; out Data: TJSONObject); overload;
70     procedure getView(id: integer; out Data: TJSONObject); overload;
71     procedure viewList(id: integer; out Data: TJSONObject);
72     procedure magazines(id: integer; out Data: TJSONObject);
73     procedure magListAll(id: integer; out Data: TJSONObject);
74     procedure magData(id: integer; out Data: TJSONObject);
75     function magid(name: string): integer;
76     procedure magIdOff(id, magid: integer);
77     procedure magIdOn(id, magid: integer);
78     procedure createMagId(id: integer; out Data: TJSONObject);
79     procedure postMessage(id: integer; Data: TJSONObject);
80     procedure createWriterId(Data: TJSONObject);
81     procedure readerData(id: integer; out Data: TJSONObject);
82     procedure titleView(id: integer;out Data: TJSONObject);
83     procedure updateWriterId(id: integer; Data: TJSONObject);
84     procedure userView(id: integer; out Data: TJSONObject);
85     function loginReader(data: TJSONObject): integer;
86     function loginWriter(data: TJSONObject): integer;
87     procedure mainView(id: integer; out data: TJSONObject);
88     procedure imageView(id: integer; out data: TJSONObject);
89     function imageId(data: TJSONObject): integer;
90   end;
91
92 var
93   DataModule1: TDataModule1;
94
95 implementation
96
97 uses System.Variants, System.Generics.Collections;
98
99 { %CLASSGROUP 'Vcl.Controls.TControl' }
100
101 {$R *.dfm}
102
103 procedure TDataModule1.AddMagazine(id: integer; out Data: TJSONObject);
104 var
105   i: integer;
106   na, com: string;
107 begin
108   FDQuery1.Open('select MAX(magId) as id from mag;');
109   i := FDQuery1.FieldByName('id').AsInteger + 1;
110   na := Data.Values['magName'].Value;
111   com := Data.Values['comment'].Value;
112   mag.AppendRecord([i, na, com, Date, Date, true]);
113   magList.AppendRecord([id, i]);
114 end;
115
116 procedure TDataModule1.backNumber(id: integer; out Data: TJSONObject);
117 const
118   con = '\82±\82Ì\8bL\8e\96\82Í\8cö\8aJ\90§\8cÀ\82ª\82 \82è\82Ü\82·.';
119 var
120   d: TJSONObject;
121   mem: TStringList;
122   blob: TStream;
123 begin
124   Data := TJSONObject.Create;
125   d := Data;
126   mem := TStringList.Create;
127   with FDQuery1 do
128   begin
129     SQL.Clear;
130     SQL.Add('select file,enabled from news where magId = :id order by lastDay;');
131     Params.ParamByName('id').AsInteger := id;
132     Open;
133     while Eof = false do
134     begin
135       blob := CreateBlobStream(FieldByName('text'), bmRead);
136       mem.LoadFromStream(blob);
137       if FieldByName('enabled').AsBoolean = true then
138         d.AddPair('text', mem.Text)
139       else
140         d.AddPair('text', con);
141       blob.Free;
142       Next;
143     end;
144   end;
145   mem.Free;
146 end;
147
148 function TDataModule1.checkUserPassword(id: integer; password: string): Boolean;
149 begin
150   result := writer.Lookup('id', id, 'password') = password;
151 end;
152
153 procedure TDataModule1.createMagId(id: integer; out Data: TJSONObject);
154 var
155   i: integer;
156 begin
157   FDQuery1.SQL.Clear;
158   FDQuery1.SQL.Add('select MAX(magId) as count from mag;');
159   FDQuery1.Open;
160   i := FDQuery1.FieldByName('count').AsInteger + 1;
161   mag.Append;
162   mag.FieldByName('magId').AsInteger := id;
163   mag.FieldByName('magNum').AsString := 'MAG'+i.ToString;
164   mag.FieldByName('day').AsDateTime := Date;
165   mag.FieldByName('lastDay').AsDateTime := Date;
166   mag.FieldByName('magName').AsString := Data.Values['magName'].Value;
167   mag.FieldByName('comment').AsString := Data.Values['comment'].Value;
168   mag.FieldByName('enable').AsString := Data.Values['enable'].Value;
169   mag.Post;
170   magList.AppendRecord([id, i]);
171 end;
172
173 function TDataModule1.createReaderId(Data: TJSONObject): integer;
174 var
175   i: integer;
176   na, ma, pa: string;
177 begin
178   na := Data.Values['name'].Value;
179   ma := Data.Values['mail'].Value;
180   pa := Data.Values['password'].Value;
181   if reader.Locate('mail',ma) = false then
182   begin
183     FDQuery1.Open('select MAX(readerid) as id from reader;');
184     i := FDQuery1.FieldByName('id').AsInteger + 1;
185     reader.AppendRecord([i, na, ma, pa]);
186     result:=i;
187   end
188   else
189     result:=0;
190 end;
191
192 procedure TDataModule1.DataModuleCreate(Sender: TObject);
193 const
194   tmp = 'create table if not exists ';
195 begin
196 //  FDQuery1.ExecSQL(tmp+'database(number int primary key, magId int, readerId int, writeId int);');
197   FDQuery1.ExecSQL
198     (tmp + 'mag(magId int primary key, magNum varchar(10), magName varchar(20), comment varchar(50), day date, lastDay date, enable bool);');
199   FDQuery1.ExecSQL
200     (tmp + 'writer(writerId int primary key, writer varchar(20), mail varchar(20), password varchar(20));');
201   FDQuery1.ExecSQL
202     (tmp + 'reader(readerId int primary key, reader varchar(20), mail varchar(20), password varchar(20));');
203   FDQuery1.ExecSQL
204     (tmp + 'news(magId int, newsId int, day date, changed bool, enabled bool, primary key (magId,newsId));');
205   FDQuery1.ExecSQL
206     (tmp + 'indexTable(readerId int, magId int, primary key (readerId,magId));');
207   FDQuery1.ExecSQL
208     (tmp + 'magList(writerId int, magId int, primary key (writerId,magId));');
209   FDQuery1.ExecSQL(tmp+'image(id int primary key, writerId int, number int, name varchar(20), data text);');
210 //  database.Open;      \83V\83\83\83b\83t\83\8b\89Â\94\\82É\82·\82é\82½\82ß\92Ê\82µ\94Ô\8d\86\82ð\95t\82¯\82½\82Ù\82¤\82ª\97Ç\82¢\82ç\82µ\82¢
211   mag.Open;
212   writer.Open;
213   reader.Open;
214   news.Open;
215   indexTable.Open;
216   magList.Open;
217   image.Open;
218 end;
219
220 procedure TDataModule1.deleteMagazine(id: integer);
221   procedure main(Sender: TObject);
222   begin
223     with Sender as TFDTable do
224       while Locate('magid',id) = true do
225         Delete;
226   end;
227
228 begin
229   main(mag);
230   main(news);
231 //    main('database');
232   main(indexTable);
233 end;
234
235 procedure TDataModule1.deleteNumber(id, num: integer);
236 begin
237   if news.Locate('magId;newsId', VarArrayOf([id, num])) = true then
238     news.Delete;
239 end;
240
241 procedure TDataModule1.deleteReaderId(Data: TJSONObject);
242 var
243   id: integer;
244   na, ma, pa: string;
245 begin
246   id := Data.Values['id'].Value.ToInteger;
247   na := Data.Values['reader'].Value;
248   ma := Data.Values['mail'].Value;
249   pa := Data.Values['password'].Value;
250   if reader.Locate('readerid;reader;mail;password', VarArrayOf([id, na, ma, pa])
251     ) = true then
252     reader.Delete;
253   while indexTable.Locate('readerid',id) = true do
254     indexTable.Delete;
255 end;
256
257 procedure TDataModule1.deleteWriter(id: integer);
258 begin
259   if writer.Locate('writerid',id) = true then
260     writer.Delete;
261   while maglist.Locate('writerid',id) = true do
262   begin
263     deleteMagazine(magList.FieldByName('magid').AsInteger);
264     magList.Delete;
265   end;
266 end;
267
268 function TDataModule1.existsMail(mail: string): Boolean;
269 begin
270   result := (writer.Locate('mail',mail) = true)or(reader.Locate('mail',mail) = true);
271 end;
272
273 procedure TDataModule1.readerData(id: integer; out Data: TJSONObject);
274 begin
275   if reader.Locate('readerid', id) = true then
276   begin
277     Data := TJSONObject.Create;
278     Data.AddPair('name', reader.FieldByName('reader').AsString);
279     Data.AddPair('mail', reader.FieldByName('mail').AsString);
280   end;
281 end;
282
283 procedure TDataModule1.userView(id: integer; out Data: TJSONObject);
284 var
285   i: integer;
286   list: TList<integer>;
287   ar: TJSONArray;
288   d: TJSONObject;
289 begin
290   list := TList<integer>.Create;
291   FDQuery1.SQL.Clear;
292   FDQuery1.SQL.Add('select * from indexTable where readerid = :id;');
293   FDQuery1.Params.ParamByName('id').AsInteger := id;
294   FDQuery1.Open;
295   while FDQuery1.Eof = false do
296   begin
297     list.Add(FDQuery1.FieldByName('magid').AsInteger);
298     FDQuery1.Next;
299   end;
300   ar:=TJSONArray.Create;
301   for i in list do
302   begin
303     titleView(i, d);
304     ar.Add(d);
305   end;
306   list.Free;
307   Data := TJSONObject.Create;
308   data.AddPair('mag',ar);
309 end;
310
311 procedure TDataModule1.viewList(id: integer; out Data: TJSONObject);
312 begin
313
314 end;
315
316 procedure TDataModule1.custData(id: integer; Data: TJSONObject);
317 begin
318   if writer.Locate('writerid', id) = true then
319   begin
320     Data.AddPair('name', writer.FieldByName('writer').AsString);
321     Data.AddPair('mail', writer.FieldByName('mail').AsString);
322   end;
323 end;
324
325 procedure TDataModule1.custView(id: integer; out Data: TJSONObject);
326 var
327   i: integer;
328   list: TList<integer>;
329 begin
330   Data := TJSONObject.Create;
331   list := TList<integer>.Create;
332   FDQuery1.SQL.Clear;
333   FDQuery1.SQL.Add('select * from maglist where readerid = :id;');
334   FDQuery1.Params.ParamByName('id').AsInteger := id;
335   FDQuery1.Open;
336   while FDQuery1.Eof = false do
337   begin
338     list.Add(FDQuery1.FieldByName('magid').AsInteger);
339     FDQuery1.Next;
340   end;
341   for i in list do
342     titleView(i, Data);
343   list.Free;
344 end;
345
346 procedure TDataModule1.getView(id, num: integer; out Data: TJSONObject);
347 begin
348   with FDQuery1.SQL do
349   begin
350     Clear;
351     Add('select updated,day,file from news');
352     Add(' where magId = :id and newsId = :num');
353     Add(' order by day;');
354   end;
355   with FDQuery1.Params do
356   begin
357     ParamByName('id').AsInteger := id;
358     ParamByName('num').AsInteger := num;
359   end;
360   FDQuery1.Open;
361   Data := makeTable(FDQuery1);
362 end;
363
364 procedure TDataModule1.getView(id: integer; out Data: TJSONObject);
365 begin
366   with FDQuery1.SQL do
367   begin
368     Clear;
369     Add('select updated,day,file from indexTable,news');
370     Add(' where readerId = :id and indexTable.magId = news.magId');
371     Add(' and enabled = true order by day;');
372   end;
373   FDQuery1.Params.ParamByName('id').AsInteger := id;
374   FDQuery1.Open;
375   Data := makeTable(FDQuery1);
376 end;
377
378 function TDataModule1.imageId(data: TJSONObject): integer;
379 var
380   writerId, number: integer;
381 begin
382   writerId:=data.Values['id'].Value.ToInteger;
383   number:=data.Values['number'].Value.ToInteger;
384   if image.Locate('writerId;number',VarArrayOf([writerId,number])) = true then
385     result:=image.FieldByName('id').AsInteger;
386 end;
387
388 procedure TDataModule1.imageView(id: integer; out data: TJSONObject);
389 begin
390   data:=TJSONObject.Create;
391   if image.Locate('id',id) = true then
392   begin
393     data.AddPair('name',image.FieldByName('name').AsString);
394     data.AddPair('data',image.FieldByName('data').AsString);
395   end;
396 end;
397
398 function TDataModule1.loginReader(data: TJSONObject): integer;
399 var
400   ma,pa: string;
401 begin
402   ma:=Data.Values['mail'].Value;
403   pa:=Data.Values['password'].Value;
404   if reader.Locate('mail;password',VarArrayOf([ma,pa])) = true then
405     result:=reader.FieldByName('readerid').AsInteger
406   else
407     result:=0;
408 end;
409
410 function TDataModule1.loginWriter(data: TJSONObject): integer;
411 var
412   ma,pa: string;
413 begin
414   ma:=Data.Values['mail'].Value;
415   pa:=Data.Values['password'].Value;
416   if writer.Locate('mail;password',VarArrayOf([ma,pa])) = true then
417     result:=writer.FieldByName('writerid').AsInteger
418   else
419     result:=0;
420 end;
421
422 procedure TDataModule1.magData(id: integer; out Data: TJSONObject);
423 begin
424   FDQuery1.SQL.Clear;
425   FDQuery1.SQL.Add('select * from mag where magid = :id;');
426   FDQuery1.ParamByName('id').AsInteger := id;
427   FDQuery1.Open;
428   if FDQuery1.FieldByName('enable').AsBoolean = true then
429   begin
430     Data := TJSONObject.Create;
431     Data.AddPair('name', FDQuery1.FieldByName('magName').AsString);
432     Data.AddPair('comment', FDQuery1.FieldByName('comment').AsString);
433     Data.AddPair('day', FDQuery1.FieldByName('day').AsString);
434     Data.AddPair('last', FDQuery1.FieldByName('lastDay').AsString);
435     FDQuery1.SQL.Clear;
436     FDQuery1.SQL.Add('select COUNT(*) as count from indextable where magid = :id;');
437     FDQuery1.ParamByName('id').AsInteger:=id;
438     FDQuery1.Open;
439     Data.AddPair('count', FDQuery1.FieldByName('count').AsString);
440   end;
441 end;
442
443 function TDataModule1.magid(name: string): integer;
444 var
445   v: Variant;
446 begin
447   v:=mag.Lookup('magNum', name, 'magid');
448   if VarIsNull(v) = true then
449     result:=0
450   else
451     result :=v;
452 end;
453
454 procedure TDataModule1.magIdOff(id, magid: integer);
455 begin
456   if indexTable.Locate('readerId;magId', VarArrayOf([id, magid])) = true then
457     indexTable.Delete;
458 end;
459
460 procedure TDataModule1.magIdOn(id, magid: integer);
461 begin
462   if (reader.Locate('readerid', id) = true) and
463     (mag.Locate('magid', magid) = true) then
464     indexTable.AppendRecord([id, magid]);
465 end;
466
467 procedure TDataModule1.magListAll(id: integer;out Data: TJSONObject);
468 var
469   js: TJSONObject;
470   ar: TJSONArray;
471   val: TJSONValue;
472   i: integer;
473   v: Variant;
474 begin
475   mag.First;
476   ar := TJSONArray.Create;
477   FDQuery1.Open('select magId,COUNT(*) as count from indexTable group by magId');
478   while mag.Eof = false do
479   begin
480     i:=mag.FieldByName('magId').AsInteger;
481     v:=FDQuery1.Lookup('magId',i,'count');
482     if VarIsNull(v) = true then
483       v:=0;
484     js := TJSONObject.Create;
485     js.AddPair('magNum',mag.FieldByName('magNum').AsString);
486     js.AddPair('magName', mag.FieldByName('magName').AsString);
487     js.AddPair('comment', mag.FieldByName('comment').AsString);
488     js.AddPair('day', mag.FieldByName('day').AsString);
489     js.AddPair('lastDay', mag.FieldByName('lastDay').AsString);
490     js.AddPair('count',v);
491     v:=magList.Lookup('magId',i,'writerId');
492     v:=writer.Lookup('writerId',v,'writer');
493     js.AddPair('writer',v);
494     if (id = 0)or(indexTable.Locate('readerId;magid',VarArrayOf([id,i])) = false) then
495       js.AddPair('fun',TJSONFalse.Create)
496     else
497       js.AddPair('fun',TJSONTrue.Create);
498     ar.Add(js);
499     mag.Next;
500   end;
501   Data := TJSONObject.Create;
502   if ar.Count > 0 then
503     Data.AddPair('items', ar)
504   else
505     Data.AddPair('items', TJSONFalse.Create);
506   if mag.FieldByName('enable').AsBoolean = true then
507     val := TJSONTrue.Create
508   else
509     val := TJSONFalse.Create;
510   Data.AddPair('enable', val);
511 end;
512
513 procedure TDataModule1.mainView(id: integer; out data: TJSONObject);
514 begin
515   data:=TJSONObject.Create;
516   FDQuery1.SQL.Clear;
517   FDQuery1.SQL.Add('select * from news,magId where news.magId = magName.magId');
518   FDQuery1.SQL.Add(' and magId = :id order by day;');
519   FDQUery1.Params.ParamByName('id').AsInteger:=id;
520   while FDQUery1.Eof = false do
521   begin
522     if FDQuery1.FieldByName('enebled').AsBoolean = true then
523     begin
524       if FDQuery1.FieldByName('changed').AsBoolean = true then
525         data.AddPair('changed',TJSONTrue.Create);
526       data.AddPair('',FDQuery1.FieldByName('').AsString);
527     end;
528     FDQuery1.Next;
529   end;
530 end;
531
532 procedure TDataModule1.magazines(id: integer; out Data: TJSONObject);
533 var
534   d: TJSONObject;
535   val: TJSONValue;
536   ar: TJSONArray;
537   list: TList<integer>;
538   i: integer;
539 begin
540   d:=data;
541   FDQuery1.SQL.Clear;
542   FDQuery1.SQL.Add('select * from maglist where writerid = :id;');
543   FDQuery1.Params.ParamByName('id').AsInteger := id;
544   FDQuery1.Open;
545   ar := TJSONArray.Create;
546   list:=TList<integer>.Create;
547   while FDQuery1.Eof = false do
548   begin
549     list.Add(FDQuery1.FieldByName('magId').AsInteger);
550     FDQuery1.Next;
551   end;
552   for i in list do
553   begin
554     magData(i,d);
555     ar.Add(d);
556   end;
557   list.Free;
558   if ar.Count = 0 then
559   begin
560     ar.Free;
561     val := TJSONFalse.Create;
562   end
563   else
564     val := ar;
565   Data := TJSONObject.Create;
566   Data.AddPair('mag', val);
567 end;
568
569 function TDataModule1.makeTable(Sender: TObject): TJSONObject;
570 var
571   day: string;
572   blob: TStream;
573   mem: TStringList;
574   ar: TJSONArray;
575   d: TJSONObject;
576 begin
577   ar:=TJSONArray.Create;
578   mem := TStringList.Create;
579   with Sender as TFDQuery do
580   begin
581     First;
582     while Eof = false do
583     begin
584       d:=TJSONObject.Create;
585       ar.Add(d);
586       day := FieldByName('day').AsString;
587       if FieldByName('updated').AsBoolean = true then
588         d.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',[day]));
589       blob := CreateBlobStream(FieldByName('file'), bmRead);
590       mem.LoadFromStream(blob);
591       blob.Free;
592       d.AddPair('text',mem.Text);
593       d.AddPair('day',day);
594       Next;
595     end;
596   end;
597   mem.Free;
598   result := TJSONObject.Create;
599   result.AddPair('news',ar);
600 end;
601
602 procedure TDataModule1.postMessage(id: integer; Data: TJSONObject);
603 var
604   i: integer;
605 begin
606   FDQuery1.SQL.Clear;
607   FDQuery1.SQL.Add('select MAX(newsId) as id from news where magId = :id;');
608   FDQuery1.Params.ParamByName('id').AsInteger := id;
609   FDQuery1.Open;
610   if FDQuery1.RecordCount > 0 then
611   begin
612     i := FDQuery1.FieldByName('id').AsInteger + 1;
613     news.AppendRecord([id, i, false, Date, Data.Values['file'], true]);
614   end;
615 end;
616
617 procedure TDataModule1.createWriterId(Data: TJSONObject);
618 var
619   i: integer;
620   na, ma, pa: string;
621 begin
622   ma := Data.Values['mail'].Value;
623   if writer.Locate('mail', ma) = false then
624   begin
625     FDQuery1.Open('select MAX(writerId) as id from writer;');
626     i := FDQuery1.FieldByName('id').AsInteger + 1;
627     na := Data.Values['name'].Value;
628     ma := Data.Values['mail'].Value;
629     pa := Data.Values['password'].Value;
630     writer.AppendRecord([i, na, ma, pa]);
631   end;
632 end;
633
634 procedure TDataModule1.titleView(id: integer;out Data: TJSONObject);
635 var
636   d: TJSONObject;
637   i: integer;
638 begin
639   Data:=TJSONObject.Create;
640   d:=Data;
641   FDQuery1.SQL.Clear;
642   FDQuery1.SQL.Add('select * from mag where magid = :id;');
643   FDQuery1.Params.ParamByName('id').AsInteger := id;
644   FDQuery1.Open;
645   with FDQuery1 do
646     while Eof = false do
647     begin
648       for i := 0 to Fields.Count - 1 do
649         d.AddPair(Fields[i].FieldName, Fields[i].AsString);
650       Next;
651     end;
652 end;
653
654 function TDataModule1.updateReaderId(Data: TJSONObject): Boolean;
655 var
656   na, ma, pa: string;
657 begin
658   na:=Data.Values['reader'].Value;
659   ma:=Data.Values['mail'].Value;
660   pa:=data.Values['password'].Value;
661   if reader.Locate('id',data.Values['id'].Value.ToInteger) = true then
662   with reader do
663   begin
664     Edit;
665     FieldByName('reader').AsString:=na;
666     FieldByName('mail').AsString:=ma;
667     FieldByName('password').AsString:=pa;
668     Post;
669     result:=true;
670   end
671   else
672     result:=false;
673 end;
674
675 procedure TDataModule1.updateWriterId(id: integer; Data: TJSONObject);
676 var
677   na, ma, pa: string;
678 begin
679   na := Data.Values['name'].Value;
680   ma := Data.Values['mail'].Value;
681   pa := Data.Values['password'].Value;
682   with writer do
683   begin
684     Edit;
685     FieldByName('writerId').AsInteger := id;
686     FieldByName('writer').AsString := na;
687     FieldByName('mail').AsString := ma;
688     FieldByName('password').AsString := pa;
689     Post;
690   end;
691 end;
692
693 end.