質問編集履歴

1

データ検索部分を追記しました

2018/04/12 07:08

投稿

Otazoman
Otazoman

スコア44

test CHANGED
File without changes
test CHANGED
@@ -68,6 +68,470 @@
68
68
 
69
69
 
70
70
 
71
+
72
+
73
+ 下記がデータ検索にかかる部分の参考のソースです。
74
+
75
+ m_product_optionとINNER JOINする前はデータを
76
+
77
+ 検索結果もJsonで返ってきていました。
78
+
79
+ INNER JOINした後はJSONレコードが
80
+
81
+
82
+
83
+ ```JavaScript
84
+
85
+ //検索
86
+
87
+ function sSearch(param,mode){
88
+
89
+ if(mode!='a'){
90
+
91
+ var param2 = '['
92
+
93
+ var size = document.getElementsByClassName('search_panel').length;
94
+
95
+ for(var i=0;i<size;i++){
96
+
97
+ if(i==0){
98
+
99
+ param2 = param2 + '{"name":"p_1","value":"A"'
100
+
101
+ }else{
102
+
103
+ param2 = param2 + '{"name":"p_' + parseInt(i+1) + '","value":"3"'
104
+
105
+ }
106
+
107
+ if(i == size-1 ){
108
+
109
+ param2 = param2 + '}';
110
+
111
+ }else{
112
+
113
+ param2 = param2 + '},';
114
+
115
+ }
116
+
117
+ }
118
+
119
+ param2 = param2 + ']';
120
+
121
+ }
122
+
123
+ if(mode=='s'){
124
+
125
+ param = [param,param2];
126
+
127
+ }
128
+
129
+ if(mode=='d'){
130
+
131
+ var cmp = '[{"name":"cmp","value":"A"}]'
132
+
133
+ param.push(cmp);
134
+
135
+ }
136
+
137
+ //2番目にパラメータを追加する
138
+
139
+ if(mode=='c'){
140
+
141
+ param.splice(1, 0, param2);
142
+
143
+ }
144
+
145
+ console.log(param);
146
+
147
+ var sKey = buildSearchkey(param);
148
+
149
+ //検索キーを元にSQL組立
150
+
151
+ var searchSql = varSqlmaker(sKey);
152
+
153
+ var elm=document.getElementById("debugger");
154
+
155
+ elm.innerHTML=searchSql;
156
+
157
+ var resultJson = sResultData(searchSql);
158
+
159
+ console.log(resultJson);
160
+
161
+ }
162
+
163
+
164
+
165
+ // パラメータを分解
166
+
167
+ function buildSearchkey(param){
168
+
169
+ var rKey =[];
170
+
171
+ var sKey;
172
+
173
+ var sVal;
174
+
175
+ for (var i = 0; i < param.length;i++){
176
+
177
+ var rt = JSON.parse(param[i]);
178
+
179
+ for(var j = 0;j < rt.length;j++){
180
+
181
+ rKey.push ([rt[j].name,rt[j].value]);
182
+
183
+ }
184
+
185
+ }
186
+
187
+ return rKey;
188
+
189
+ }
190
+
191
+
192
+
193
+ //SQLの動的生成
194
+
195
+ function varSqlmaker(param){
196
+
197
+ //横持化
198
+
199
+ var getPanel = 'SELECT m_search.p_no '
200
+
201
+ + 'FROM m_search '
202
+
203
+ + 'GROUP BY m_search.p_no '
204
+
205
+ + 'ORDER BY m_search.p_no;'
206
+
207
+ var panNoJson = getJsonData(getPanel);
208
+
209
+ var sPivotSql = 'SELECT m_search.code, '
210
+
211
+ var rt = JSON.parse(panNoJson);
212
+
213
+ for(var i=0;i < rt['data'].length;i++){
214
+
215
+ var targetNo = rt['data'][i].panel_no;
216
+
217
+ sPivotSql = sPivotSql + ' Max(IIf([m_search.p_no]=' + targetNo
218
+
219
+ +',[m_search.search_flg],0)) AS ' + targetNo;
220
+
221
+ if(i !== rt['data'].length - 1 ){
222
+
223
+ sPivotSql = sPivotSql + ',';
224
+
225
+ }
226
+
227
+ }
228
+
229
+ sPivotSql = sPivotSql + ' FROM m_search '
230
+
231
+ + 'GROUP BY m_search.code '
232
+
233
+ + 'ORDER BY m_search.code';
234
+
235
+ //横持化
236
+
237
+ var getdisp = 'SELECT t_display_d.item_id '
238
+
239
+ + 'FROM t_display_detail '
240
+
241
+ + 'GROUP BY t_display_d.item_id '
242
+
243
+ + 'ORDER BY t_display_d.item_id; '
244
+
245
+ var dispNoJson = getJsonData(getdisp);
246
+
247
+
248
+
249
+ var dPivotSql = 'SELECT t_display_d.p_code, '
250
+
251
+ var dpselSql = '';
252
+
253
+ var rt = JSON.parse(dispNoJson);
254
+
255
+ for(var i=0;i < rt['data'].length;i++){
256
+
257
+ var targetNo = rt['data'][i].display_item_id;
258
+
259
+ dPivotSql = dPivotSql + ' Max(IIf([t_display_d.item_id]=' + targetNo
260
+
261
+ + ',[t_display_d.i_detail])) AS ' + targetNo;
262
+
263
+ dpselSql = dpselSql + ' First(dd.[' + targetNo + ']) AS ' + targetNo + ',';
264
+
265
+ if(i !== rt['data'].length - 1 ){
266
+
267
+ dPivotSql = dPivotSql + ',';
268
+
269
+ }
270
+
271
+ }
272
+
273
+ dPivotSql = dPivotSql + ' FROM t_display_detail '
274
+
275
+ + 'GROUP BY t_display_d.p_code '
276
+
277
+ + 'ORDER BY t_display_d.p_code';
278
+
279
+ // 検索条件にパネルの設定値埋込
280
+
281
+ var panelSql = 'SELECT m_search.p_no '
282
+
283
+ + 'FROM m_search WHERE m_search.search_activate_flg=1 '
284
+
285
+ + 'GROUP BY m_search.p_no ORDER BY m_search.p_no;';
286
+
287
+ var panelJson = getJsonData(panelSql);
288
+
289
+ var rt = JSON.parse(panelJson);
290
+
291
+ var sParaSql = '';
292
+
293
+ var j = 7;
294
+
295
+ for(var i=0;i < rt['data'].length;i++){
296
+
297
+ var targetNo = rt['data'][i].panel_no;
298
+
299
+ //テーブルのフラグとフォーム上のフラグ変換処理
300
+
301
+ var sVal;
302
+
303
+ if(j < param.length){
304
+
305
+ switch(param[j][1]){
306
+
307
+ case "1":
308
+
309
+ sVal = '=' + 1;
310
+
311
+ break;
312
+
313
+ case "2":
314
+
315
+ sVal = '=' + 0;
316
+
317
+ break;
318
+
319
+ case "3":
320
+
321
+ sVal = '>=' + 0;
322
+
323
+ break;
324
+
325
+ default:
326
+
327
+ sVal = '=' + param[j][1];
328
+
329
+ break;
330
+
331
+ }
332
+
333
+ }
334
+
335
+ var companyId = '"*"';
336
+
337
+ sParaSql = sParaSql + ' ((m.[' + targetNo + ']) '
338
+
339
+ + sVal + ') AND '
340
+
341
+ j = j + 1;
342
+
343
+ }
344
+
345
+ //検索項目のパラメータ設定
346
+
347
+ var whParSql = 'HAVING '
348
+
349
+ + ' (((i.sex)=' + param[0][1] +') AND '
350
+
351
+ + ' ((i.age)=' + param[1][1] +') AND '
352
+
353
+ + ' ((i.d_lim) >=' + param[6][1] +') AND '
354
+
355
+ + ' ((i.period_in)=' + param[2][1] +') AND '
356
+
357
+ + ' ((i.payment_p)=' + param[3][1] +') AND '
358
+
359
+ + ' ((i.payment_m)=' + param[4][1] +') AND '
360
+
361
+ + ' ((i.b_amount)=' + param[5][1] +'));'
362
+
363
+ //SQL生成
364
+
365
+ var mySql = 'SELECT p.product_code, m.code, p.product_name AS 1, '
366
+
367
+ +' i.b_amount AS 3, i.fee AS 4, '
368
+
369
+ + dpselSql
370
+
371
+ +' i.sex, i.age, i.d_lim, i.period_in, '
372
+
373
+ +' i.payment_p, i.payment_m ,Count(o.o_code) AS op_count'
374
+
375
+ +' FROM m_product_option AS o'
376
+
377
+ +' INNER JOIN (m_company AS c '
378
+
379
+ +' INNER JOIN((' + dPivotSql + ') AS dd '
380
+
381
+ +' INNER JOIN(((' + sPivotSql + ') AS m '
382
+
383
+ + 'INNER JOIN t_insurance AS i '
384
+
385
+ + ' ON m.code = i.code )'
386
+
387
+ + ' INNER JOIN m_product AS p '
388
+
389
+ + ' ON m.code = p.product_code )'
390
+
391
+ + ' ON dd.plan_code = m.code )'
392
+
393
+ + ' ON c.company_id = p.company_id )'
394
+
395
+ + ' ON p.product_code = o.product_code '
396
+
397
+ + ' WHERE ('
398
+
399
+ + sParaSql
400
+
401
+ + ' ((c.company_activate_flg)=1) '
402
+
403
+ + ' AND '
404
+
405
+ + ' ((p.product_active_flg)=1)'
406
+
407
+ + ' AND'
408
+
409
+ + '((p.company_id) Like '+ companyId + ') '
410
+
411
+ + ' AND'
412
+
413
+ + ' ((o.activate_flg)= 1 ))'
414
+
415
+ + ' GROUP BY '
416
+
417
+ + ' p.product_code, m.code, p.product_name, '
418
+
419
+ + ' i.b_amount, i.fee,'
420
+
421
+ + ' i.sex, i.age, i.d_lim, i.period_in, i.payment_p, i.payment_m, '
422
+
423
+ + whParSql;
424
+
425
+
426
+
427
+ return mySql;
428
+
429
+
430
+
431
+ }
432
+
433
+
434
+
435
+ // 検索結果のレコード件数を取得しレコードと一緒にJson出力
436
+
437
+ function sResultData(sql) {
438
+
439
+ try {
440
+
441
+ var rs = database.Execute(sql);
442
+
443
+ var recCount = rs.RecordCount
444
+
445
+ //console.log("SQL:" + sql);
446
+
447
+ //console.log("Count:" + rs.RecordCount);
448
+
449
+ var rJson = '[' + '{"count":"' + rs.RecordCount + '"},';
450
+
451
+ var j = 0;
452
+
453
+ if (rs.RecordCount == 0){
454
+
455
+ rJson = rJson + '{"data":"non"}';
456
+
457
+ }else{
458
+
459
+ for( ; !rs.EOF ; rs.MoveNext()) {
460
+
461
+ rJson = rJson+ '{' + '\n';
462
+
463
+ for (var i = 0; i < rs.Fields.Count; i++){
464
+
465
+ rJson = rJson + '\t\t' + '"' + rs.fields(i).Name + '":';
466
+
467
+ if (i == rs.Fields.Count -1){
468
+
469
+ rJson = rJson + '"' + escapeChar(rs.fields(i).Value) + '"' +'\n';
470
+
471
+ }else{
472
+
473
+ rJson = rJson + '"' + escapeChar(rs.fields(i).Value) + '",'+ '\n';
474
+
475
+ }
476
+
477
+ }
478
+
479
+ if(j == recCount - 1 ){
480
+
481
+ rJson = rJson + '\t' + '}' + '\n';
482
+
483
+ }else{
484
+
485
+ rJson = rJson + '\t' + '}' + ',' + '\n';
486
+
487
+ }
488
+
489
+ j= j + 1;
490
+
491
+ }
492
+
493
+ }
494
+
495
+ rJson = rJson + ']';
496
+
497
+ } catch(e1) {
498
+
499
+ if(rs != null){
500
+
501
+ try {rs.Close();} catch(e2) {}
502
+
503
+ rs = null;
504
+
505
+ }
506
+
507
+ if(database != null){
508
+
509
+ database.Close();
510
+
511
+ database = null;
512
+
513
+ }
514
+
515
+ throw e1;
516
+
517
+ }
518
+
519
+ return rJson;
520
+
521
+ rs = null;
522
+
523
+ database.Close();
524
+
525
+ database = null;
526
+
527
+ }
528
+
529
+
530
+
531
+ ```
532
+
533
+
534
+
71
535
  SQLが悪いのかと思いJavaScriptで生成されたSQLを取得し、
72
536
 
73
537
  ACCESSのクエリーに貼り付けて実行するとレコードはきちんと
@@ -76,9 +540,7 @@
76
540
 
77
541
  キャッシュでも残っているのかと考えてaccdbをコピーしリンク先を
78
542
 
79
- そちらにしてみましたが、結果は変わりません。
543
+ そちらに変更してみましたが、結果は変わりません。
80
-
81
-
82
544
 
83
545
 
84
546