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(var 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   if mag.Locate('magId',id) = true then
230     mag.Delete;
231   main(news);
232 //  main(database);
233   main(indexTable);
234 end;
235
236 procedure TDataModule1.deleteNumber(id, num: integer);
237 begin
238   if news.Locate('magId;newsId', VarArrayOf([id, num])) = true then
239     news.Delete;
240 end;
241
242 procedure TDataModule1.deleteReaderId(Data: TJSONObject);
243 var
244   id: integer;
245   na, ma, pa: string;
246 begin
247   id := Data.Values['id'].Value.ToInteger;
248   na := Data.Values['reader'].Value;
249   ma := Data.Values['mail'].Value;
250   pa := Data.Values['password'].Value;
251   if reader.Locate('readerid;reader;mail;password', VarArrayOf([id, na, ma, pa])
252     ) = true then
253     reader.Delete;
254   while indexTable.Locate('readerid',id) = true do
255     indexTable.Delete;
256 end;
257
258 procedure TDataModule1.deleteWriter(var id: integer);
259 begin
260   if writer.Locate('writerid',id) = true then
261     writer.Delete;
262   while magList.Locate('writerid',id) = true do
263   begin
264     deleteMagazine(magList.FieldByName('magid').AsInteger);
265     magList.Delete;
266   end;
267   id:=0;
268 end;
269
270 function TDataModule1.existsMail(mail: string): Boolean;
271 begin
272   result := (writer.Locate('mail',mail) = true)or(reader.Locate('mail',mail) = true);
273 end;
274
275 procedure TDataModule1.readerData(id: integer; out Data: TJSONObject);
276 begin
277   if reader.Locate('readerid', id) = true then
278   begin
279     Data := TJSONObject.Create;
280     Data.AddPair('name', reader.FieldByName('reader').AsString);
281     Data.AddPair('mail', reader.FieldByName('mail').AsString);
282   end;
283 end;
284
285 procedure TDataModule1.userView(id: integer; out Data: TJSONObject);
286 var
287   i: integer;
288   list: TList<integer>;
289   ar: TJSONArray;
290   d: TJSONObject;
291 begin
292   list := TList<integer>.Create;
293   FDQuery1.SQL.Clear;
294   FDQuery1.SQL.Add('select * from indexTable where readerid = :id;');
295   FDQuery1.Params.ParamByName('id').AsInteger := id;
296   FDQuery1.Open;
297   while FDQuery1.Eof = false do
298   begin
299     list.Add(FDQuery1.FieldByName('magid').AsInteger);
300     FDQuery1.Next;
301   end;
302   ar:=TJSONArray.Create;
303   for i in list do
304   begin
305     titleView(i, d);
306     ar.Add(d);
307   end;
308   list.Free;
309   Data := TJSONObject.Create;
310   data.AddPair('mag',ar);
311 end;
312
313 procedure TDataModule1.viewList(id: integer; out Data: TJSONObject);
314 begin
315
316 end;
317
318 procedure TDataModule1.custData(id: integer; Data: TJSONObject);
319 begin
320   if writer.Locate('writerid', id) = true then
321   begin
322     Data.AddPair('name', writer.FieldByName('writer').AsString);
323     Data.AddPair('mail', writer.FieldByName('mail').AsString);
324   end;
325 end;
326
327 procedure TDataModule1.custView(id: integer; out Data: TJSONObject);
328 var
329   i: integer;
330   list: TList<integer>;
331 begin
332   Data := TJSONObject.Create;
333   list := TList<integer>.Create;
334   FDQuery1.SQL.Clear;
335   FDQuery1.SQL.Add('select * from maglist where readerid = :id;');
336   FDQuery1.Params.ParamByName('id').AsInteger := id;
337   FDQuery1.Open;
338   while FDQuery1.Eof = false do
339   begin
340     list.Add(FDQuery1.FieldByName('magid').AsInteger);
341     FDQuery1.Next;
342   end;
343   for i in list do
344     titleView(i, Data);
345   list.Free;
346 end;
347
348 procedure TDataModule1.getView(id, num: integer; out Data: TJSONObject);
349 begin
350   with FDQuery1.SQL do
351   begin
352     Clear;
353     Add('select updated,day,file from news');
354     Add(' where magId = :id and newsId = :num');
355     Add(' order by day;');
356   end;
357   with FDQuery1.Params do
358   begin
359     ParamByName('id').AsInteger := id;
360     ParamByName('num').AsInteger := num;
361   end;
362   FDQuery1.Open;
363   Data := makeTable(FDQuery1);
364 end;
365
366 procedure TDataModule1.getView(id: integer; out Data: TJSONObject);
367 begin
368   with FDQuery1.SQL do
369   begin
370     Clear;
371     Add('select updated,day,file from indexTable,news');
372     Add(' where readerId = :id and indexTable.magId = news.magId');
373     Add(' and enabled = true order by day;');
374   end;
375   FDQuery1.Params.ParamByName('id').AsInteger := id;
376   FDQuery1.Open;
377   Data := makeTable(FDQuery1);
378 end;
379
380 function TDataModule1.imageId(data: TJSONObject): integer;
381 var
382   writerId, number: integer;
383 begin
384   writerId:=data.Values['id'].Value.ToInteger;
385   number:=data.Values['number'].Value.ToInteger;
386   if image.Locate('writerId;number',VarArrayOf([writerId,number])) = true then
387     result:=image.FieldByName('id').AsInteger;
388 end;
389
390 procedure TDataModule1.imageView(id: integer; out data: TJSONObject);
391 begin
392   data:=TJSONObject.Create;
393   if image.Locate('id',id) = true then
394   begin
395     data.AddPair('name',image.FieldByName('name').AsString);
396     data.AddPair('data',image.FieldByName('data').AsString);
397   end;
398 end;
399
400 function TDataModule1.loginReader(data: TJSONObject): integer;
401 var
402   ma,pa: string;
403 begin
404   ma:=Data.Values['mail'].Value;
405   pa:=Data.Values['password'].Value;
406   if reader.Locate('mail;password',VarArrayOf([ma,pa])) = true then
407     result:=reader.FieldByName('readerid').AsInteger
408   else
409     result:=0;
410 end;
411
412 function TDataModule1.loginWriter(data: TJSONObject): integer;
413 var
414   ma,pa: string;
415 begin
416   ma:=Data.Values['mail'].Value;
417   pa:=Data.Values['password'].Value;
418   if writer.Locate('mail;password',VarArrayOf([ma,pa])) = true then
419     result:=writer.FieldByName('writerid').AsInteger
420   else
421     result:=0;
422 end;
423
424 procedure TDataModule1.magData(id: integer; out Data: TJSONObject);
425 begin
426   FDQuery1.SQL.Clear;
427   FDQuery1.SQL.Add('select * from mag where magid = :id;');
428   FDQuery1.ParamByName('id').AsInteger := id;
429   FDQuery1.Open;
430   if FDQuery1.FieldByName('enable').AsBoolean = true then
431   begin
432     Data := TJSONObject.Create;
433     Data.AddPair('name', FDQuery1.FieldByName('magName').AsString);
434     Data.AddPair('comment', FDQuery1.FieldByName('comment').AsString);
435     Data.AddPair('day', FDQuery1.FieldByName('day').AsString);
436     Data.AddPair('last', FDQuery1.FieldByName('lastDay').AsString);
437     FDQuery1.SQL.Clear;
438     FDQuery1.SQL.Add('select COUNT(*) as count from indextable where magid = :id;');
439     FDQuery1.ParamByName('id').AsInteger:=id;
440     FDQuery1.Open;
441     Data.AddPair('count', FDQuery1.FieldByName('count').AsString);
442   end;
443 end;
444
445 function TDataModule1.magid(name: string): integer;
446 var
447   v: Variant;
448 begin
449   v:=mag.Lookup('magNum', name, 'magid');
450   if VarIsNull(v) = true then
451     result:=0
452   else
453     result :=v;
454 end;
455
456 procedure TDataModule1.magIdOff(id, magid: integer);
457 begin
458   if indexTable.Locate('readerId;magId', VarArrayOf([id, magid])) = true then
459     indexTable.Delete;
460 end;
461
462 procedure TDataModule1.magIdOn(id, magid: integer);
463 begin
464   if (reader.Locate('readerid', id) = true) and
465     (mag.Locate('magid', magid) = true) then
466     indexTable.AppendRecord([id, magid]);
467 end;
468
469 procedure TDataModule1.magListAll(id: integer;out Data: TJSONObject);
470 var
471   js: TJSONObject;
472   ar: TJSONArray;
473   val: TJSONValue;
474   i: integer;
475   v: Variant;
476 begin
477   mag.First;
478   ar := TJSONArray.Create;
479   FDQuery1.Open('select magId,COUNT(*) as count from indexTable group by magId');
480   while mag.Eof = false do
481   begin
482     i:=mag.FieldByName('magId').AsInteger;
483     v:=FDQuery1.Lookup('magId',i,'count');
484     if VarIsNull(v) = true then
485       v:=0;
486     js := TJSONObject.Create;
487     js.AddPair('magNum',mag.FieldByName('magNum').AsString);
488     js.AddPair('magName', mag.FieldByName('magName').AsString);
489     js.AddPair('comment', mag.FieldByName('comment').AsString);
490     js.AddPair('day', mag.FieldByName('day').AsString);
491     js.AddPair('lastDay', mag.FieldByName('lastDay').AsString);
492     js.AddPair('count',v);
493     v:=magList.Lookup('magId',i,'writerId');
494     v:=writer.Lookup('writerId',v,'writer');
495     if VarIsNull(v) = true then
496       js.AddPair('writer',TJSONFalse.Create)
497     else
498       js.AddPair('writer',v);
499     if (id = 0)or(indexTable.Locate('readerId;magid',VarArrayOf([id,i])) = false) then
500       js.AddPair('fun',TJSONFalse.Create)
501     else
502       js.AddPair('fun',TJSONTrue.Create);
503     ar.Add(js);
504     mag.Next;
505   end;
506   Data := TJSONObject.Create;
507   if ar.Count > 0 then
508     Data.AddPair('items', ar)
509   else
510     Data.AddPair('items', TJSONFalse.Create);
511   if mag.FieldByName('enable').AsBoolean = true then
512     val := TJSONTrue.Create
513   else
514     val := TJSONFalse.Create;
515   Data.AddPair('enable', val);
516 end;
517
518 procedure TDataModule1.mainView(id: integer; out data: TJSONObject);
519 begin
520   data:=TJSONObject.Create;
521   FDQuery1.SQL.Clear;
522   FDQuery1.SQL.Add('select * from news,magId where news.magId = magName.magId');
523   FDQuery1.SQL.Add(' and magId = :id order by day;');
524   FDQUery1.Params.ParamByName('id').AsInteger:=id;
525   while FDQUery1.Eof = false do
526   begin
527     if FDQuery1.FieldByName('enebled').AsBoolean = true then
528     begin
529       if FDQuery1.FieldByName('changed').AsBoolean = true then
530         data.AddPair('changed',TJSONTrue.Create);
531       data.AddPair('',FDQuery1.FieldByName('').AsString);
532     end;
533     FDQuery1.Next;
534   end;
535 end;
536
537 procedure TDataModule1.magazines(id: integer; out Data: TJSONObject);
538 var
539   d: TJSONObject;
540   val: TJSONValue;
541   ar: TJSONArray;
542   list: TList<integer>;
543   i: integer;
544 begin
545   d:=data;
546   FDQuery1.SQL.Clear;
547   FDQuery1.SQL.Add('select * from maglist where writerid = :id;');
548   FDQuery1.Params.ParamByName('id').AsInteger := id;
549   FDQuery1.Open;
550   ar := TJSONArray.Create;
551   list:=TList<integer>.Create;
552   while FDQuery1.Eof = false do
553   begin
554     list.Add(FDQuery1.FieldByName('magId').AsInteger);
555     FDQuery1.Next;
556   end;
557   for i in list do
558   begin
559     magData(i,d);
560     ar.Add(d);
561   end;
562   list.Free;
563   if ar.Count = 0 then
564   begin
565     ar.Free;
566     val := TJSONFalse.Create;
567   end
568   else
569     val := ar;
570   Data := TJSONObject.Create;
571   Data.AddPair('mag', val);
572 end;
573
574 function TDataModule1.makeTable(Sender: TObject): TJSONObject;
575 var
576   day: string;
577   blob: TStream;
578   mem: TStringList;
579   ar: TJSONArray;
580   d: TJSONObject;
581 begin
582   ar:=TJSONArray.Create;
583   mem := TStringList.Create;
584   with Sender as TFDQuery do
585   begin
586     First;
587     while Eof = false do
588     begin
589       d:=TJSONObject.Create;
590       ar.Add(d);
591       day := FieldByName('day').AsString;
592       if FieldByName('updated').AsBoolean = true then
593         d.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',[day]));
594       blob := CreateBlobStream(FieldByName('file'), bmRead);
595       mem.LoadFromStream(blob);
596       blob.Free;
597       d.AddPair('text',mem.Text);
598       d.AddPair('day',day);
599       Next;
600     end;
601   end;
602   mem.Free;
603   result := TJSONObject.Create;
604   result.AddPair('news',ar);
605 end;
606
607 procedure TDataModule1.postMessage(id: integer; Data: TJSONObject);
608 var
609   i: integer;
610 begin
611   FDQuery1.SQL.Clear;
612   FDQuery1.SQL.Add('select MAX(newsId) as id from news where magId = :id;');
613   FDQuery1.Params.ParamByName('id').AsInteger := id;
614   FDQuery1.Open;
615   if FDQuery1.RecordCount > 0 then
616   begin
617     i := FDQuery1.FieldByName('id').AsInteger + 1;
618     news.AppendRecord([id, i, false, Date, Data.Values['file'], true]);
619   end;
620 end;
621
622 procedure TDataModule1.createWriterId(Data: TJSONObject);
623 var
624   i: integer;
625   na, ma, pa: string;
626 begin
627   ma := Data.Values['mail'].Value;
628   if writer.Locate('mail', ma) = false then
629   begin
630     FDQuery1.Open('select MAX(writerId) as id from writer;');
631     i := FDQuery1.FieldByName('id').AsInteger + 1;
632     na := Data.Values['name'].Value;
633     ma := Data.Values['mail'].Value;
634     pa := Data.Values['password'].Value;
635     writer.AppendRecord([i, na, ma, pa]);
636   end;
637 end;
638
639 procedure TDataModule1.titleView(id: integer;out Data: TJSONObject);
640 var
641   d: TJSONObject;
642   i: integer;
643 begin
644   Data:=TJSONObject.Create;
645   d:=Data;
646   FDQuery1.SQL.Clear;
647   FDQuery1.SQL.Add('select * from mag where magid = :id;');
648   FDQuery1.Params.ParamByName('id').AsInteger := id;
649   FDQuery1.Open;
650   with FDQuery1 do
651     while Eof = false do
652     begin
653       for i := 0 to Fields.Count - 1 do
654         d.AddPair(Fields[i].FieldName, Fields[i].AsString);
655       Next;
656     end;
657 end;
658
659 function TDataModule1.updateReaderId(Data: TJSONObject): Boolean;
660 var
661   na, ma, pa: string;
662 begin
663   na:=Data.Values['reader'].Value;
664   ma:=Data.Values['mail'].Value;
665   pa:=data.Values['password'].Value;
666   if reader.Locate('id',data.Values['id'].Value.ToInteger) = true then
667   with reader do
668   begin
669     Edit;
670     FieldByName('reader').AsString:=na;
671     FieldByName('mail').AsString:=ma;
672     FieldByName('password').AsString:=pa;
673     Post;
674     result:=true;
675   end
676   else
677     result:=false;
678 end;
679
680 procedure TDataModule1.updateWriterId(id: integer; Data: TJSONObject);
681 var
682   na, ma, pa: string;
683 begin
684   na := Data.Values['name'].Value;
685   ma := Data.Values['mail'].Value;
686   pa := Data.Values['password'].Value;
687   with writer do
688   begin
689     Edit;
690     FieldByName('writerId').AsInteger := id;
691     FieldByName('writer').AsString := na;
692     FieldByName('mail').AsString := ma;
693     FieldByName('password').AsString := pa;
694     Post;
695   end;
696 end;
697
698 end.