midrange.com code scratchpad
Name:
JDBCR4 PreparedStatements stay open
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
04/04/2016 12:49:13 pm
IP:
Logged
Description:
Hello,

I’m using JDBCR4 to populate a MySQL database with AS400 data for our CRM program.
When I look at the com_stmt_prepare and com_stmt_close variables, the numbers are not the same (156176 prepared, 94856 closed).

I use JDBC_FreeResult and JDBC_FreePrepStmt methods.

Can anyone see what I’m missing in my code? Or does anyone have any tips on how I can improve my code?

Greetz,
Frederik
Code:
  1.       *  Compileren:
  2.       *     CRTBNDRPG PGM(PRDVDAPGM/AV612RGB) SRCFILE(AVENNESRC/QRPGLESRC) DBGVIEW(*LIST)
  3.      H DFTACTGRP(*NO) BNDDIR('JDBC':'PRDVDA')
  4.      H Option(*nodebugio:*srcstmt)
  5.  
  6.      FAVCRMIL1  UF   E           K disk
  7.      FAVCRMML1  IF   E           K disk
  8.  
  9.       /copy AVENNESRC/QRPGLESRC,jdbc_h
  10.       /Copy Avennesrc/qrpglesrc,TABPARPR
  11.  
  12.      D AV612RGB        PR                  extpgm('AV612RGB')
  13.      D    bedrijf                     3S 0 const
  14.      D    bestand                    10A
  15.      D    batch                       1A
  16.      D AV612RGB        PI
  17.      D    bedrijf                     3S 0 const
  18.      D    bestand                    10A
  19.      D    batch                       1A
  20.  
  21.      D InsertRec       PR             1N
  22.      D UpdateRec       PR             1N
  23.      D DeleteRec       PR             1N
  24.      D CheckFiche      PR             1N
  25.      D CheckDatum      PR             1N
  26.  
  27.      D conn            s                   like(Connection)
  28.      D ErrMsg          s             50A
  29.      D wait            s              1A
  30.      D count           s             10I 0
  31.      D rs              s                   like(ResultSet)
  32.      D rcDB            s             10I 0
  33.  
  34.      D i               s              2  0
  35.      D j               s              2  0
  36.      D t               s              2  0
  37.      D PosW            s              4  0
  38.      D PosL            s              4  0
  39.      D lijn            S              6  0
  40.      D TeVerwTabel     S             20A
  41.      D Col             S             20A   DIM(99)
  42.      D PCol            S             20A   DIM(99)
  43.      D IndexCa         S              2  0
  44.      D IndexPCa        S              2  0
  45.      D tijdc           s              8
  46.      D stat            s              2  0
  47.      D uitvoeren       s              1  0
  48.      D teller          s              3  0
  49.      D tellerA         s              3A
  50.      D                 DS
  51.      DCHECKEDFICHES                        DIM(1000)
  52.      D Bedr                           3  0 Overlay(CHECKEDFICHES:1) Inz(*Zeros)
  53.      D Klnr                          17A   Overlay(CHECKEDFICHES:4) Inz(*Blanks)
  54.      D Exts                           2  0 Overlay(CHECKEDFICHES:22) Inz(*Zeros)
  55.  
  56.      D                 DS
  57.      DGEGEVENS                             DIM(40)
  58.      D VeldAS400                     10A   Overlay(GEGEVENS:1)
  59.      D Lengte                         4A   Overlay(GEGEVENS:11)
  60.      D Type                           1A   Overlay(GEGEVENS:15)
  61.      D CRMTabel                      20A   Overlay(GEGEVENS:16)
  62.      D VeldCRM                       20A   Overlay(GEGEVENS:36)
  63.      D Waarde                       120A   Overlay(GEGEVENS:56)
  64.      D LVrKomma                       2  0 Overlay(GEGEVENS:176)
  65.      D LNaKomma                       2  0 Overlay(GEGEVENS:178)
  66.       *
  67.       *
  68.      DTabParResult     DS
  69.      D OKX0                           1
  70.      D TSWR                          30
  71.      D RKWR                          15S 6
  72.  
  73.       /free
  74.        *inlr = *on;
  75.        //Connectie maken met de MySQL-Server
  76.        conn = JDBC_Connect( 'com.mysql.jdbc.Driver'
  77.                           : 'jdbc:mysql://XXX.YYY.ZZZ.AAA/AS400'
  78.                           : '******'
  79.                           : '******');
  80.        if (conn = *NULL);
  81.            return;
  82.        endif;
  83.  
  84.        //Te gebruiken database instellen
  85.        rcDB = JDBC_ExecUpd( conn : 'Use AS400' );
  86.  
  87.  
  88.        If (bestand <> *Blanks);
  89.          Exsr VerwerkBestand;
  90.        Else;
  91.          If (batch = 'X');
  92.            teller = 0;
  93.            Dow (teller < 10 or Tswr <> *Blanks);
  94.              teller += 10;
  95.              tellerA = %editC(%dec(teller:3:0):'X');
  96.              TabPar(1:'10':'N':'2':'100849':tellerA:TabParResult);
  97.              If (Tswr <> *Blanks);
  98.                bestand = Tswr;
  99.                ExSr VerwerkBestand;
  100.              EndIf;
  101.            EndDo;
  102.            Bestand = *Blanks;
  103.          EndIf;
  104.        EndIf;
  105.  
  106.        jdbc_close(conn);
  107.        return;
  108.  
  109.  
  110.        BegSr VerwerkBestand;
  111.          //Gekozen bestand verwerken
  112.          lijn = 0;
  113.          SetLl (Bedrijf:Bestand) AVCRMIL1;
  114.          ReadE (Bedrijf:Bestand) AVCRMIL1;
  115.          Dow not %eof(AVCRMIL1);
  116.            Chain (BedrCr:FileCr) AVCRMML1;
  117.            If %found(AVCRMML1);
  118.              i = 1;
  119.              PosW = 1;
  120.              PosL = 1;
  121.              lijn += 1;
  122.              VeldAs400 = *Blanks;
  123.              Lengte = *Blanks;
  124.              Type = *Blanks;
  125.              CRMTabel = *Blanks;
  126.              VeldCRM = *Blanks;
  127.              Waarde = *Blanks;
  128.              LVrKomma = *Zeros;
  129.              LNaKOmma = *Zeros;
  130.              //Record uitsplitsen en in een tabel steken.
  131.              //Er zullen maximum 40 rijen zijn.
  132.              Dow (i <= 40);
  133.                If (%len(%trim(FldsCm)) > (i*10) - 9);
  134.                  //Velnaam uit AS400
  135.                  VeldAs400(i) = %subst(FldsCm:(i*10)-9:10);
  136.                  //Lengte van het veld (vb 15,3)
  137.                  Lengte(i) = %subst(FldlCm:PosL:4);
  138.                  //Type van het veld (A = Alfanumeriek, N = Numeriek en S = Signed)
  139.                  Type(i) = %subst(FldtCm:i:1);
  140.                  //Tot welke CRM-tabel hoort het veld
  141.                  CrmTabel(i) = %subst(TbmsCm:(i*20)-19:20);
  142.                  //Wat is de naam van het veld in de CRM-tabel
  143.                  VeldCrm(i) = %subst(FlmsCm:(i*20)-19:20);
  144.                  //Testen of het veld getallen na de komma heeft.
  145.                  If (%dec(%subst(Lengte(i):3:2):2:0) > 0);
  146.                    Select;
  147.                      When (Type(i) = 'S');
  148.                        //Signed ==> 2 karakters meer rekenen dan de lengte,
  149.                        //           voor , en voor - teken.
  150.                        Waarde(i) =%subst(DataCr:
  151.                                      PosW:
  152.                                      %dec(%subst(Lengte(i):1:2):2:0)+2);
  153.                        posW += %dec(%subst(Lengte(i):1:2):2:0) + 2;
  154.                      When (Type(i) = 'N');
  155.                        //Numeriek ==> 1 karakter meer rekenen dan de lengte,
  156.                        //           voor , .
  157.                        Waarde(i) =%subst(DataCr:
  158.                                      PosW:
  159.                                      %dec(%subst(Lengte(i):1:2):2:0)+1);
  160.                        posW += %dec(%subst(Lengte(i):1:2):2:0) + 1;
  161.                    EndSl;
  162.                  Else;
  163.                    //Tekst of geen getallen na de komma ==> gewone lengte gebruiken
  164.                    If (VeldCrm(i) = 'Facturatiecondities');
  165.                      Waarde(i) = %subst(DataCr:PosW:120);
  166.                      posW += 120;
  167.                    Else;
  168.                      Waarde(i) =%subst(DataCr:
  169.                                        PosW:
  170.                                        %dec(%subst(Lengte(i):1:2):2:0));
  171.                      posW += %dec(%subst(Lengte(i):1:2):2:0);
  172.                    EndIf;
  173.                  EndIf;
  174.  
  175.                  PosL += 4;
  176.                  i += 1;
  177.                Else;
  178.                  i = 41;
  179.                EndIf;
  180.              EndDo;
  181.  
  182.              uitvoeren = 1;
  183.              If (Bestand = 'ORPDGR'); //Voor tabel Billing_Accounts
  184.                //Eerst controleren of de datum <= huidige datum.
  185.                If CheckDatum();
  186.                  uitvoeren = 1;
  187.                Else;
  188.                  uitvoeren = 0;
  189.                EndIf;
  190.              EndIf;
  191.  
  192.              If (uitvoeren = 1);
  193.                Select;
  194.                  When (IuadCr = 'A');
  195.                    //Toevoegen van een record.
  196.                    //Voor de tabellen die uit meerdere bestanden opgevuld worden,
  197.                    //moet enkel het hoofdbestand verwerkt worden als toe te voegen
  198.                    //record, de rest zijn eigenlijk updates van bestaande records.
  199.                    If (bestand = 'OBTFKD' or bestand = 'ORKLEV' or
  200.                        bestand = 'AVKDBN' or bestand = 'ORKOMF' or
  201.                        bestand = 'ORK5BK' or bestand = 'FINANCIAL' or
  202.                        bestand = 'ORPDGR' or bestand = 'ORKPRS' or
  203.                        bestand = 'ORKFAK' or bestand = 'AVQSNR' or
  204.                        bestand = 'AVRBTS');
  205.                      UpdateRec();
  206.                    Else;
  207.                      If (bestand = 'FICHE');
  208.                        //Als een fiche reeds bestaat, dan moet deze eerst verwijderd
  209.                        //worden vooraleer de nieuwe toegevoegd kunnen worden.
  210.                        CheckFiche();
  211.                      EndIf;
  212.                      InsertRec();
  213.                    EndIf;
  214.                  When (IuadCr = 'U');
  215.                    //Wijzigen van een record.
  216.                    UpdateRec();
  217.                  When (IuadCr = 'D');
  218.                    //Verwijderen van een record.
  219.                    DeleteRec();
  220.                EndSl;
  221.              EndIf;
  222.            EndIf;
  223.            ReadE (Bedrijf:Bestand) AVCRMIL1;
  224.          EndDo;
  225.        EndSr;
  226.  
  227.       /end-free
  228.  
  229.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  230.       * InsertRec():  Insert record into RPGTEST table
  231.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  232.      P InsertRec       b
  233.      D InsertRec       PI             1N
  234.      D rc              s             10I 0
  235.      D rs              S                   like(ResultSet)
  236.      D stmt            s                   like(PreparedStatement)
  237.      D num             s             30P 9
  238.      D SqlString       S           1024A
  239.      D SqlSelect       S           1024A
  240.      D SqlWhere        S           1024A
  241.      D LevDat          s               D   datfmt(*ISO)
  242.      D VerwTabel       S             20A   dim(40)
  243.      D Done            S              1  0
  244.      D indexArray      S              4  0
  245.      D insertTabel     S              2  0 dim(40)
  246.      D indexInsert     S              2  0
  247.      D checkTabel      S              2  0 dim(40)
  248.      D indexCheck      S              2  0
  249.      D n               S              2  0
  250.       /free
  251.  
  252.         i = 1;
  253.         t = 1;
  254.         Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
  255.           //Testen of tabel reeds verwerkt geweest is
  256.           If (%Lookup(CrmTabel(i):VerwTabel) > 0);
  257.             Done = 1;
  258.           Else;
  259.             Done = 0;
  260.           EndIf;
  261.  
  262.           If (Done = 0);
  263.             TeVerwTabel = CrmTabel(i);
  264.             //Alle kolomnamen ophalen van de SQL-tabel
  265.             Col = *Blanks;
  266.             Exsr ColArray;
  267.             //Alle kolomnamen ophalen van de primaire sleutel van de tabel
  268.             PCol = *Blanks;
  269.             Exsr PColArray;
  270.  
  271.             //Eerst controleren of record reeds bestaat, indien wel ==> rest
  272.             //niet uitvoeren!! Door het toevoegen van unieke id, zou een
  273.             //'A' record met zelfde gegevens gewoon worden toegevoegd!
  274.             If (bestand <> 'FICHE');
  275.               Exsr CheckRec;
  276.             Else;
  277.               ErrMsg = *Blanks;
  278.             EndIf;
  279.  
  280.             If (%trim(ErrMsg) <> 'Bestaat!');
  281.               //SQL code opbouwen
  282.               SqlString = 'Insert Into ' + %trim(CrmTabel(i)) + ' (';
  283.               //Array met kolomnamen overlopen en deze zoeken in de VeldCrm array.
  284.               //Als hij gevonden is, de kolomnaam toevoegen aan de SQL code en
  285.               //de index opslaan zodat de waarde later gemakkelijk opgehaald kan
  286.               //worden.
  287.               j = 1;
  288.               indexInsert = 1;
  289.               Dow (Col(j) <> *Blanks);
  290.                 indexArray = %lookup(Col(j):VeldCrm);
  291.                 If (indexArray > 0);
  292.                   SqlString = %trim(SqlString) + ' ' +
  293.                               %trim(VeldCrm(indexArray)) + ',';
  294.                   insertTabel(indexInsert) = indexArray;
  295.                   indexInsert += 1;
  296.                 EndIf;
  297.                 j += 1;
  298.               EndDo;
  299.               //Laatse komma wegdoen en een ')' zetten.
  300.               SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
  301.               SqlString = %trim(SqlString) + ')';
  302.  
  303.               //SQL code verder opbouwen met de values.
  304.               //Per veld een ? zetten. Deze ? worden dan later opgevuld door de
  305.               //correcte waarden.
  306.               SqlString = %trim(SqlString) + ' values (';
  307.               Dow (indexInsert > 1);
  308.                 SqlString = %trim(SqlString) + '?,';
  309.                 indexInsert -= 1;
  310.               EndDo;
  311.               //Opnieuw laatste komma wegdoen en een ')' zetten.
  312.               SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
  313.               SqlString = %trim(SqlString) + ')';
  314.  
  315.               stmt = JDBC_PrepStmt(conn : SqlString);
  316.               If (stmt = *NULL);
  317.                 ErrMsg = 'Prepare Statement failed!';
  318.                 return *OFF;
  319.               EndIf;
  320.  
  321.               //Opvullen parameters
  322.               //Array overlopen waarin de indexen weggeschreven werden.
  323.               //Met deze index het type (N, A of D) gaan ophalen en de waarde
  324.               //converteren naar het juiste type.
  325.               indexInsert = 1;
  326.               Dow (insertTabel(indexInsert) <> *Zeros);
  327.                 n = insertTabel(indexInsert);
  328.                 Select;
  329.                   When (Type(n) = 'N' or Type(n) = 'S');
  330.                     If (Waarde(n) = *Blanks);
  331.                       num = 0;
  332.                     Else;
  333.                       num = %dec(Waarde(n):30:9);
  334.                     EndIf;
  335.                     JDBC_SetDecimal(stmt:indexInsert:num);
  336.                   When (Type(n) = 'A');
  337.                     JDBC_SetString(stmt:indexInsert:%trim(Waarde(n)));
  338.                   When (Type(n) = 'D');
  339.                     If (LVrKomma(n) = 8 and LNaKomma(n) = 0);  //Numeriek doorgegeven
  340.                       LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
  341.                       JDBC_SetDate(stmt:indexInsert:LevDat);
  342.                     EndIf;
  343.                     //Waarschijnlijk nog testen toevoegen wanneer het een echt
  344.                     // 'D' RPG-datatype is.
  345.                 EndSl;
  346.                 indexInsert += 1;
  347.               EndDo;
  348.  
  349.               //Uitvoeren van de SQL code
  350.               rc = JDBC_ExecPrepUpd( stmt );
  351.               If (rc < 0);
  352.                 //Niet gelukt
  353.                 If (StatCr = *Blanks);
  354.                   stat = 1;
  355.                 Else;
  356.                   stat = %dec(StatCr:2:0);
  357.                   If (stat < 99);
  358.                     stat += 1;
  359.                   EndIf;
  360.                 EndIf;
  361.                 StatCr = %char(stat);
  362.                 Update Avcrmir;
  363.                 ErrMsg = 'Execute Prepared Failed!';
  364.                 Return *OFF;
  365.               Else;
  366.                 //Record verwerkt ==> Aanpassen van AVCRMI
  367.                 //   - Datum + tijd interface
  368.                 //   - Geschrapt op '*' zetten ==> dit record is verwerkt
  369.                 IndtCr = %int(%char(%date():*iso0));
  370.                 tijdc = %char(%time:*HMS);
  371.                 tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) +
  372.                         %subst(tijdc:7:2);
  373.                 IntdCr = %dec(tijdc:6:0);
  374.                 FlagCr = '*';
  375.                 Update Avcrmir;
  376.               Endif;
  377.  
  378.               JDBC_FreePrepStmt(stmt);
  379.               //Tabel wegschrijven in reeds verwerkte tabellen array.
  380.               VerwTabel(t) = CrmTabel(i);
  381.               t += 1;
  382.             EndIf;
  383.           EndIf;
  384.           i += 1;
  385.         EndDo;
  386.  
  387.         Return *ON;
  388.  
  389.  
  390.         //Array met de kolomnamen van de SQL tabel opvullen
  391.         BegSr ColArray;
  392.           SqlString = 'Select column_name' +
  393.              ' From INFORMATION_SCHEMA.COLUMNS' +
  394.              ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
  395.  
  396.           rs = jdbc_ExecQry( conn : SqlString);
  397.           indexCA = 0;
  398.           Dow (jdbc_nextRow(rs));
  399.             indexCA += 1;
  400.             Col(indexCA) = jdbc_getCol(rs: 1);
  401.           Enddo;
  402.           JDBC_FreeResult(rs);
  403.         EndSr;
  404.  
  405.         //Array met Primary key kolomnamen voor tabel opvullen
  406.         BegSr PColArray;
  407.           SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
  408.                      + ' where key_name = ''PRIMARY''';
  409.  
  410.           rs = jdbc_ExecQry( conn : SqlString);
  411.           indexPCA = 0;
  412.           Dow (jdbc_nextRow(rs));
  413.             indexPCA += 1;
  414.             PCol(indexPCA) = jdbc_getCol(rs: 5);
  415.           Enddo;
  416.           JDBC_FreeResult(rs);
  417.         EndSr;
  418.  
  419.         //Controleren of record niet reeds bestaat
  420.         BegSr CheckRec;
  421.           SqlSelect = 'Select';
  422.           SqlWhere = 'Where';
  423.           j = 1;
  424.           indexCheck = 1;
  425.           Dow (PCol(j) <> *Blanks);
  426.             indexArray = %lookup(PCol(j):VeldCrm);
  427.             If (indexArray > 0);
  428.               If (j = 2);
  429.                 SqlSelect = %trim(SqlSelect) + ' ' + %trim(VeldCrm(indexArray));
  430.                 SqlWhere = %trim(SqlWhere) + ' ' +
  431.                           %trim(VeldCrm(indexArray)) + '=?';
  432.               Else;
  433.                 SqlSelect = %trim(SqlSelect) + ' , ' +
  434.                             %trim(VeldCrm(indexArray));
  435.                 SqlWhere = %trim(SqlWhere) + ' and ' +
  436.                           %trim(VeldCrm(indexArray)) + '=?';
  437.               EndIf;
  438.               checkTabel(indexCheck) = indexArray;
  439.               indexCheck += 1;
  440.             Else;
  441.               //ERROR!!!
  442.             EndIf;
  443.             j += 1;
  444.           EndDo;
  445.           //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
  446.           SqlWhere = %trim(SqlWhere) +
  447.                           ' and Deleted IS NULL or Deleted <> ''X''';
  448.  
  449.           SqlString = %trim(SqlSelect) + ' From ' + %trim(CrmTabel(i));
  450.           SqlString = %trim(SqlString) + ' ' + %trim(SqlWhere);
  451.  
  452.           stmt = JDBC_PrepStmt(conn : SqlString);
  453.           If (stmt = *NULL);
  454.             ErrMsg = 'Prepare Statement failed!';
  455.             return *OFF;
  456.           EndIf;
  457.  
  458.           //Opvullen parameters
  459.           //Array overlopen waarin de indexen weggeschreven werden.
  460.           //Met deze index het type (N, A of D) gaan ophalen en de waarde
  461.           //converteren naar het juiste type.
  462.           indexCheck = 1;
  463.           Dow (checkTabel(indexCheck) <> *Zeros);
  464.             n = checkTabel(indexCheck);
  465.             Select;
  466.               When (Type(n) = 'N' or Type(n) = 'S');
  467.                 If (Waarde(n) = *Blanks);
  468.                   num = 0;
  469.                 Else;
  470.                   num = %dec(Waarde(n):30:9);
  471.                 EndIf;
  472.                 JDBC_SetDecimal(stmt:indexCheck:num);
  473.               When (Type(n) = 'A');
  474.                 JDBC_SetString(stmt:indexCheck:%trim(Waarde(n)));
  475.               When (Type(n) = 'D');
  476.                 If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
  477.                   LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
  478.                   JDBC_SetDate(stmt:indexCheck:LevDat);
  479.                 EndIf;
  480.                 //Waarschijnlijk nog testen toevoegen wanneer het een echt
  481.                 // 'D' RPG-datatype is.
  482.             EndSl;
  483.             indexCheck += 1;
  484.           EndDo;
  485.  
  486.           rs = jdbc_ExecPrepQry(stmt);
  487.           If jdbc_nextRow(rs);
  488.             //Al records aanwezig ==> Deleten.
  489.             ErrMsg = 'Bestaat!';
  490.           Else;
  491.             ErrMsg = 'Bestaat nog niet!';
  492.             //Return *OFF;
  493.           EndIf;
  494.           JDBC_FreeResult(rs);
  495.           JDBC_FreePrepStmt(stmt);
  496.         EndSr;
  497.       /end-free
  498.      P                 E
  499.  
  500.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  501.       * UpdateRec():  Update record in RPGTEST table
  502.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  503.      P UpdateRec       b
  504.      D UpdateRec       PI             1N
  505.      D rc              s             10I 0
  506.      D stmt            s                   like(PreparedStatement)
  507.      D num             s             30P 9
  508.      D SqlString       S           1024A
  509.      D LevDat          s               D   datfmt(*ISO)
  510.      D VerwTabel       S             20A   dim(40)
  511.      D Done            S              1  0
  512.      D indexArray      S              4  0
  513.      D updateTabel     S              2  0 dim(40)
  514.      D indexUpdate     S              2  0
  515.      D n               S              2  0
  516.      D datum           S              8  0
  517.       /free
  518.         i = 1;
  519.         t = 1;
  520.         Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
  521.           If (%Trim(waarde(2)) = '987654');
  522.             Done = 0;
  523.           ENDIF;
  524.           //Testen of tabel reeds verwerkt geweest is
  525.           If (%Lookup(CrmTabel(i):VerwTabel) > 0);
  526.             Done = 1;
  527.           Else;
  528.             Done = 0;
  529.           EndIf;
  530.  
  531.           If (Done = 0);
  532.             TeVerwTabel = CrmTabel(i);
  533.             //Alle kolomnamen ophalen van de tabel
  534.             Col = *Blanks;
  535.             Exsr ColArray;
  536.             //Alle kolomnamen ophalen van de primaire sleutel van de tabel
  537.             PCol = *Blanks;
  538.             Exsr PColArray;
  539.  
  540.             //SQL code opbouwen
  541.             SqlString = 'Update ' + %trim(CrmTabel(i)) + ' set ';
  542.             //Array met kolomnamen overlopen (uitgezonderd de primaire sleutel)
  543.             //en deze zoeken in de VeldCrm array.
  544.             //Als hij gevonden is, de kolomnaam toevoegen aan de SQL code en
  545.             //de index opslaan zodat de waarde later gemakkelijk opgehaald kan
  546.             //worden.
  547.             If (Bestand = 'OBTFKD');
  548.               //OBTFKD ==> A.d.h.v. de CODE bepalen welk veld er in de MySQL-
  549.               //           tabel gëupdate moet worden
  550.               j = 1;
  551.               indexUpdate = 1;
  552.               indexArray = %lookup('CODE':VeldAs400);
  553.               If (indexArray > 0);
  554.                 Select;
  555.                   When Waarde(indexArray) = 'T';
  556.                     SqlString = %trim(SqlString) + ' Telefoon=?,';
  557.                   When Waarde(indexArray) = 'E';
  558.                     SqlString = %trim(SqlString) + ' Email=?,';
  559.                   When Waarde(indexArray) = 'G';
  560.                     SqlString = %trim(SqlString) + ' Gsm=?,';
  561.                   When Waarde(indexArray) = 'F';
  562.                     SqlString = %trim(SqlString) + ' Fax=?,';
  563.                   When Waarde(indexArray) = 'W';
  564.                     SqlString = %trim(SqlString) + ' Website=?,';
  565.                   When Waarde(indexArray) = 'L';
  566.                     SqlString = %trim(SqlString) + ' GPS=?,';
  567.                 EndSl;
  568.                 updateTabel(indexUpdate) = indexArray + 1;
  569.                 indexUpdate += 1;
  570.               EndIf;
  571.             Else;
  572.               j = 1;
  573.               indexUpdate = 1;
  574.               Dow (Col(j) <> *Blanks);
  575.                 If (%lookup(Col(j):PCol) = 0);
  576.                   indexArray = %lookup(Col(j):VeldCrm);
  577.                   If (indexArray > 0);
  578.                     SqlString = %trim(SqlString) + ' ' +
  579.                                 %trim(VeldCrm(indexArray)) + '=?,';
  580.                     updateTabel(indexUpdate) = indexArray;
  581.                     indexUpdate += 1;
  582.                   EndIf;
  583.                 EndIf;
  584.                 j += 1;
  585.               EndDo;
  586.             EndIf;
  587.             //Laatse komma wegdoen
  588.             SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
  589.             //Where stuk invullen met primaire sleutelvelden
  590.             SqlString = %trim(SqlString) + ' Where ';
  591.             j = 1;
  592.             Dow (PCol(j) <> *Blanks);
  593.               indexArray = %lookup(PCol(j):VeldCrm);
  594.               If (indexArray > 0);
  595.                 If (j = 2);
  596.                   SqlString = %trim(SqlString) + ' ' +
  597.                             %trim(VeldCrm(indexArray)) + '=?';
  598.                 Else;
  599.                   SqlString = %trim(SqlString) + ' and ' +
  600.                             %trim(VeldCrm(indexArray)) + '=?';
  601.                 EndIf;
  602.                 updateTabel(indexUpdate) = indexArray;
  603.                 indexUpdate += 1;
  604.               Else;
  605.                 //ERROR!!!
  606.               EndIf;
  607.               j += 1;
  608.             EndDo;
  609.             //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
  610.             Sqlstring = %trim(Sqlstring) +
  611.                             ' and Deleted IS NULL or Deleted <> ''X''';
  612.  
  613.             stmt = JDBC_PrepStmt(conn : SqlString);
  614.             If (stmt = *NULL);
  615.               ErrMsg = 'Prepare Statement failed!';
  616.               return *OFF;
  617.             EndIf;
  618.  
  619.             //Opvullen parameters
  620.             //Array overlopen waarin de indexen weggeschreven werden.
  621.             //Met deze index het type (N, A of D) gaan ophalen en de waarde
  622.             //converteren naar het juiste type.
  623.             indexUpdate = 1;
  624.             Dow (updateTabel(indexUpdate) <> *Zeros);
  625.               n = updateTabel(indexUpdate);
  626.               Select;
  627.                 When (Type(n) = 'N' or Type(n) = 'S');
  628.                   If (Waarde(n) = *Blanks);
  629.                     num = 0;
  630.                   Else;
  631.                     num = %dec(Waarde(n):30:9);
  632.                   EndIf;
  633.                   JDBC_SetDecimal(stmt:indexUpdate:num);
  634.                 When (Type(n) = 'A');
  635.                   JDBC_SetString(stmt:indexUpdate:%trim(Waarde(n)));
  636.                 When (Type(n) = 'D');
  637.                   If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
  638.                     LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
  639.                     JDBC_SetDate(stmt:indexUpdate:LevDat);
  640.                   EndIf;
  641.                   //Waarschijnlijk nog testen toevoegen wanneer het een echt
  642.                   // 'D' RPG-datatype is.
  643.               EndSl;
  644.               indexUpdate += 1;
  645.             EndDo;
  646.  
  647.             rc = JDBC_ExecPrepUpd( stmt );
  648.             if (rc <= 0);
  649.               If (StatCr = *Blanks);
  650.                 stat = 1;
  651.               Else;
  652.                 stat = %dec(StatCr:2:0);
  653.                 If (stat < 99);
  654.                   stat += 1;
  655.                 EndIf;
  656.               EndIf;
  657.               StatCr = %char(stat);
  658.               Update Avcrmir;
  659.               ErrMsg = 'Execute Prepared Failed!';
  660.               Return *OFF;
  661.             Else;
  662.               //Record verwerkt ==> Aanpassen van AVCRMI
  663.               IndtCr = %int(%char(%date():*iso0));
  664.               tijdc = %char(%time:*HMS);
  665.               tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) + %subst(tijdc:7:2);
  666.               IntdCr = %dec(tijdc:6:0);
  667.               FlagCr = '*';
  668.               Update Avcrmir;
  669.             endif;
  670.  
  671.             JDBC_FreePrepStmt(stmt);
  672.             //Tabel wegschrijven in reeds verwerkte tabellen array.
  673.             VerwTabel(t) = CrmTabel(i);
  674.             t += 1;
  675.           EndIf;
  676.           i += 1;
  677.         EndDo;
  678.  
  679.         return *ON;
  680.  
  681.         //Array met kolomnamen voor tabel opvullen
  682.         BegSr ColArray;
  683.           SqlString = 'Select column_name ' +
  684.              ' From INFORMATION_SCHEMA.COLUMNS' +
  685.              ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
  686.  
  687.           rs = jdbc_ExecQry( conn : SqlString);
  688.           indexCA = 0;
  689.           Dow (jdbc_nextRow(rs));
  690.             indexCA += 1;
  691.             Col(indexCA) = jdbc_getCol(rs: 1);
  692.           Enddo;
  693.           JDBC_FreeResult(rs);
  694.         EndSr;
  695.  
  696.         //Array met Primary key kolomnamen voor tabel opvullen
  697.         BegSr PColArray;
  698.           SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
  699.                      + ' where key_name = ''PRIMARY''';
  700.  
  701.           rs = jdbc_ExecQry( conn : SqlString);
  702.           indexPCA = 0;
  703.           Dow (jdbc_nextRow(rs));
  704.             indexPCA += 1;
  705.             //PCol(indexPCA) = jdbc_getCol(rs: 1);
  706.             PCol(indexPCA) = jdbc_getCol(rs: 5);
  707.           Enddo;
  708.           JDBC_FreeResult(rs);
  709.         EndSr;
  710.       /end-free
  711.      P                 E
  712.  
  713.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  714.       * DeleteRec():  Delete record
  715.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  716.      P DeleteRec       b
  717.      D DeleteRec       PI             1N
  718.      D rc              s             10I 0
  719.      D stmt            s                   like(PreparedStatement)
  720.      D num             s             30P 9
  721.      D SqlString       S           1024A
  722.      D LevDat          s               D   datfmt(*ISO)
  723.      D VerwTabel       S             20A   dim(40)
  724.      D Done            S              1  0
  725.      D indexArray      S              4  0
  726.      D deleteTabel     S              2  0 dim(40)
  727.      D indexDelete     S              2  0
  728.      D n               S              2  0
  729.      D datum           S              8  0
  730.       /free
  731.         i = 1;
  732.         t = 1;
  733.         Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
  734.           //Testen of tabel reeds verwerkt geweest is
  735.           If (%Lookup(CrmTabel(i):VerwTabel) > 0);
  736.             Done = 1;
  737.           Else;
  738.             Done = 0;
  739.           EndIf;
  740.  
  741.           If (Done = 0);
  742.             TeVerwTabel = CrmTabel(i);
  743.             //Alle kolomnamen ophalen van de tabel
  744.             Col = *Blanks;
  745.             Exsr ColArray;
  746.             //Alle kolomnamen ophalen van de primaire sleutel van de tabel
  747.             PCol = *Blanks;
  748.             Exsr PColArray;
  749.  
  750.             //SQL code opbouwen
  751.             SqlString = 'Update ' + %trim(CrmTabel(i)) + ' set';
  752.             indexDelete = 1;
  753.             Select;
  754.               When Bestand = 'OBTFKD';
  755.                 indexArray = %lookup('CODE':VeldAs400);
  756.                 If (indexArray > 0);
  757.                   Select;
  758.                     When Waarde(indexArray) = 'T';
  759.                       SqlString = %trim(SqlString) + ' Telefoon= ''''';
  760.                     When Waarde(indexArray) = 'E';
  761.                       SqlString = %trim(SqlString) + ' Email= ''''';
  762.                     When Waarde(indexArray) = 'G';
  763.                       SqlString = %trim(SqlString) + ' Gsm= ''''';
  764.                     When Waarde(indexArray) = 'F';
  765.                       SqlString = %trim(SqlString) + ' Fax= ''''';
  766.                     When Waarde(indexArray) = 'W';
  767.                       SqlString = %trim(SqlString) + ' Website= ''''';
  768.                     When Waarde(indexArray) = 'L';
  769.                       SqlString = %trim(SqlString) + ' GPS= ''''';
  770.                   EndSl;
  771.                 EndIf;
  772.               When Bestand = 'ORKLEV' or Bestand = 'AVKDBN' or
  773.                    Bestand = 'ORKOMF' or Bestand = 'ORK5BK' or
  774.                    Bestand = 'FINANCIAL' or Bestand = 'ORPDGR' or
  775.                    Bestand = 'ORKPRS' or Bestand = 'ORKFAK';
  776.                 j = 1;
  777.                 Dow (Col(j) <> *Blanks);
  778.                   If (%lookup(Col(j):PCol) = 0);
  779.                     indexArray = %lookup(Col(j):VeldCrm);
  780.                     If (indexArray > 0);
  781.                       SqlString = %trim(SqlString) + ' ' +
  782.                                   %trim(VeldCrm(indexArray)) + '=?,';
  783.                       deleteTabel(indexDelete) = indexArray;
  784.                       indexDelete += 1;
  785.                     EndIf;
  786.                   EndIf;
  787.                   j += 1;
  788.                 EndDo;
  789.                 SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
  790.               Other;
  791.                 SqlString = %trim(SqlString) + ' Deleted = ''X''';
  792.             EndSl;
  793.  
  794.             //Where stuk invullen met primaire sleutelvelden
  795.             SqlString = %trim(SqlString) + ' Where ';
  796.             j = 1;
  797.             Dow (PCol(j) <> *Blanks);
  798.               indexArray = %lookup(PCol(j):VeldCrm);
  799.               If (indexArray > 0);
  800.                 If (j = 2);
  801.                   SqlString = %trim(SqlString) + ' ' +
  802.                             %trim(VeldCrm(indexArray)) + '=?';
  803.                 Else;
  804.                   SqlString = %trim(SqlString) + ' and ' +
  805.                             %trim(VeldCrm(indexArray)) + '=?';
  806.                 EndIf;
  807.                 deleteTabel(indexDelete) = indexArray;
  808.                 indexDelete += 1;
  809.               Else;
  810.                 //ERROR!!!
  811.               EndIf;
  812.               j += 1;
  813.             EndDo;
  814.             //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
  815.             Sqlstring = %trim(Sqlstring) +
  816.                             ' and Deleted IS NULL or Deleted <> ''X''';
  817.  
  818.             stmt = JDBC_PrepStmt(conn : SqlString);
  819.             If (stmt = *NULL);
  820.               ErrMsg = 'Prepare Statement failed!';
  821.               return *OFF;
  822.             EndIf;
  823.  
  824.             //Opvullen parameters
  825.             //Array overlopen waarin de indexen weggeschreven werden.
  826.             //Met deze index het type (N, A of D) gaan ophalen en de waarde
  827.             //converteren naar het juiste type.
  828.             indexDelete = 1;
  829.             Dow (deleteTabel(indexDelete) <> *Zeros);
  830.               n = deleteTabel(indexDelete);
  831.               Select;
  832.                 When (Type(n) = 'N' or Type(n) = 'S');
  833.                   //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
  834.                   If (%lookup(VeldCRM(n):PCol) = 0);
  835.                     num = 0;
  836.                   Else;
  837.                     If (Waarde(n) = *Blanks);
  838.                       num = 0;
  839.                     Else;
  840.                       num = %dec(Waarde(n):30:9);
  841.                     EndIf;
  842.                   EndIf;
  843.                   JDBC_SetDecimal(stmt:indexDelete:num);
  844.                 When (Type(n) = 'A');
  845.                   //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
  846.                   If (%lookup(VeldCRM(n):PCol) = 0);
  847.                     JDBC_SetString(stmt:indexDelete:'');
  848.                   Else;
  849.                     JDBC_SetString(stmt:indexDelete:%trim(Waarde(n)));
  850.                   EndIf;
  851.                 When (Type(n) = 'D');
  852.                   If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
  853.                     //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
  854.                     If (%lookup(VeldCRM(n):PCol) = 0);
  855.                       LevDat = *Loval;
  856.                     Else;
  857.                       LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
  858.                     EndIf;
  859.                     JDBC_SetDate(stmt:indexDelete:LevDat);
  860.                   EndIf;
  861.                   //Waarschijnlijk nog testen toevoegen wanneer het een echt
  862.                   // 'D' RPG-datatype is.
  863.               EndSl;
  864.               indexDelete += 1;
  865.             EndDo;
  866.  
  867.             rc = JDBC_ExecPrepUpd( stmt );
  868.             if (rc <= 0);
  869.               If (StatCr = *Blanks);
  870.                 stat = 1;
  871.               Else;
  872.                 stat = %dec(StatCr:2:0);
  873.                 If (stat < 99);
  874.                   stat += 1;
  875.                 EndIf;
  876.               EndIf;
  877.               StatCr = %char(stat);
  878.               Update Avcrmir;
  879.               ErrMsg = 'Execute Prepared Failed!';
  880.               Return *OFF;
  881.             Else;
  882.               //Record verwerkt ==> Aanpassen van AVCRMI
  883.               IndtCr = %int(%char(%date():*iso0));
  884.               tijdc = %char(%time:*HMS);
  885.               tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) + %subst(tijdc:7:2);
  886.               IntdCr = %dec(tijdc:6:0);
  887.               FlagCr = '*';
  888.               Update Avcrmir;
  889.             endif;
  890.  
  891.             JDBC_FreePrepStmt(stmt);
  892.             //Tabel wegschrijven in reeds verwerkte tabellen array.
  893.             VerwTabel(t) = CrmTabel(i);
  894.             t += 1;
  895.           EndIf;
  896.           i += 1;
  897.         EndDo;
  898.  
  899.         return *ON;
  900.  
  901.         //Array met kolomnamen voor tabel opvullen
  902.         BegSr ColArray;
  903.           SqlString = 'Select column_name' +
  904.              ' From INFORMATION_SCHEMA.COLUMNS' +
  905.              ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
  906.  
  907.           rs = jdbc_ExecQry( conn : SqlString);
  908.           indexCA = 0;
  909.           Dow (jdbc_nextRow(rs));
  910.             indexCA += 1;
  911.             Col(indexCA) = jdbc_getCol(rs: 1);
  912.           Enddo;
  913.           JDBC_FreeResult(rs);
  914.         EndSr;
  915.  
  916.         //Array met Primary key kolomnamen voor tabel opvullen
  917.         BegSr PColArray;
  918.           SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
  919.                      + ' where key_name = ''PRIMARY''';
  920.  
  921.           rs = jdbc_ExecQry( conn : SqlString);
  922.           indexPCA = 0;
  923.           Dow (jdbc_nextRow(rs));
  924.             indexPCA += 1;
  925.             //PCol(indexPCA) = jdbc_getCol(rs: 1);
  926.             PCol(indexPCA) = jdbc_getCol(rs: 5);
  927.           Enddo;
  928.           JDBC_FreeResult(rs);
  929.         EndSr;
  930.       /end-free
  931.      P                 E
  932.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  933.       * CheckFiche():  Checken als fiche al bestaat. Ja ==> verwijderen. +
  934.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  935.      P CheckFiche      b
  936.      D CheckFiche      PI             1N
  937.      D rc              s             10I 0
  938.      D stmt            s                   like(PreparedStatement)
  939.      D rs              S                   like(ResultSet)
  940.      D indexArray      S              4  0
  941.      D SqlString       S           1024A
  942.      D Bedrijf         s              3  0
  943.      D Bestelklant     S             17A
  944.      D Extensie        S              2  0
  945.      D Reeds           S              1  0
  946.       /free
  947.         indexArray = %lookup('Bedrijf':VeldCrm);
  948.         Bedrijf = %dec(Waarde(indexArray):3:0);
  949.         indexArray = %lookup('Bestelklant':VeldCrm);
  950.         Bestelklant = Waarde(indexArray);
  951.         indexArray = %lookup('Bestelklant_Ext':VeldCrm);
  952.         Extensie = %dec(Waarde(indexArray):2:0);
  953.  
  954.         //Eerst opzoeken of reeds verwerkt is
  955.         Reeds = 0;
  956.         indexArray = %lookup(Bedrijf:Bedr);
  957.         If (indexArray > 0);
  958.           Reeds = 1;
  959.           indexArray = %lookup(Bestelklant:Klnr);
  960.           If (indexArray > 0);
  961.             Reeds = 1;
  962.             indexArray = %lookup(Extensie:Exts);
  963.             If (indexArray > 0);
  964.               Reeds = 1;
  965.             Else;
  966.               Reeds = 0;
  967.             EndIf;
  968.           Else;
  969.             Reeds = 0;
  970.           EndIf;
  971.         Else;
  972.           Reeds = 0;
  973.         EndIf;
  974.  
  975.         If (Reeds = 0);
  976.           SqlString = 'Select * From Conditions Where Bedrijf = ' +
  977.                       %char(bedrijf) +
  978.                       ' and Bestelklant = ''' + %trim(Bestelklant) +
  979.                       ''' and Bestelklant_Ext = ' + %char(Extensie);
  980.  
  981.           rs = jdbc_ExecQry( conn : SqlString);
  982.           If jdbc_nextRow(rs);
  983.             //Al records aanwezig ==> Deleten.
  984.             jdbc_FreeResult(rs);
  985.             indexArray = %lookup(*Zeros:Bedr);
  986.             Bedr(indexArray) = Bedrijf;
  987.             Klnr(indexArray) = Bestelklant;
  988.             Exts(indexArray) = Extensie;
  989.             SqlString = 'Update Conditions Set Deleted = ''X''' +
  990.                         ' Where Bedrijf = ' + %char(bedrijf) +
  991.                         ' and Bestelklant = ''' + %trim(Bestelklant) +
  992.                         ''' and Bestelklant_Ext = ' + %char(Extensie);
  993.             stmt = JDBC_PrepStmt(conn: SqlString);
  994.             If (Stmt <> *NULL);
  995.               rc = jdbc_ExecPrepUpd(stmt);
  996.             EndIf;
  997.             JDBC_freePrepStmt(stmt);
  998.           EndIf;
  999.           JDBC_FreeResult(rs);
  1000.         EndIf;
  1001.         Return *On;
  1002.       /end-free
  1003.      P                 E
  1004.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1005.       * CheckDatum():  Checken als DTVN <= huidige datum                +
  1006.       *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1007.      P CheckDatum      b
  1008.      D CheckDatum      PI             1N
  1009.      D indexArray      S              4  0
  1010.      D datum           s              8  0
  1011.      D datumnu         s              8  0
  1012.       /free
  1013.         indexArray = %lookup('DTVN':VeldAs400);
  1014.         datum = %dec(Waarde(indexArray):8:0);
  1015.         datumnu = %int(%char(%date():*Iso0));
  1016.         If (datumnu >= datum);
  1017.           Return *On;
  1018.         Else;
  1019.           Return *Off;
  1020.         EndIf;
  1021.       /end-free
  1022.      P                 E
  1023.  
© 2004-2019 by midrange.com generated in 0.013s valid xhtml & css