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