Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Aprile 14, 2020, 05:40:00 pm

Titolo: [Risolto] stringhe lunghissime dentro una "case...of"
Inserito da: petrusic - Aprile 14, 2020, 05:40:00 pm
purtroppo sono ancora qui. Con questo nuovo linguaggio sto incontrando veri e propri sbarramenti anche nella stesura del codice.
Ho bisogno di eseguire un test di tipo case...of e, per ciascuna condizione interna devo costruire una stringa di caratteri molto lunga, che, per facilità di lettura, mi conviene distribuire in due o più righe.
Ora succede che mi viene segnalato un errore di tipo "illegal expression" proprio sul   ";"  di chiusura dell'istruzione:
Codice: [Seleziona]
procedure carCombo(Fmastro: String);
const
    ctiCassa: array[0..1, 0..1] of string = (('101000000', '101001799'),     // 1° range conti di Cassa (tabella piancont)
                                      ('101001990', '101001999'));       // ultimo range conti di Cassa (tabella piancont)


    ctiPart: array[0..2, 0..1] of string = (('102000000', '103999999'),  // 1° range conti di contropartita pertinenti a "partmovv" (tabella piancont)
                                            ('105000000', '203999999'),   // 2° range conti di contropartita pertinenti a "partmovv" (tabella piancont)
                                            ('205000000', '999999999')); // ultimo range conti di contropartita pertinenti a "partmovv" (tabella piancont)

    ctiPrest: array[0..1, 0..1] of string = (('104000000', '104999999'),     // 1° range conti di contropartita pertinenti a "prestmom" (tabella piancont)
                                             ('204000000', '204999999'));    // ultimo range conti di contropartita pertinenti a "prestmom" (tabella piancont)
var
sql, sql2: String;
sql1: String= 'select NumVoce, NomeVoce, ContrPartSiNo, DtPrimoUso, DtUltimUso ' +
              'from piancont where ';

begin
  case Fmastro of
    'Cas':
      sql2 = ('(NumVoce >=' +  ctiCassa[0,0] + 'and NumVoce <= ' + ctiCassa[0, 1] +
             ') or (NumVoce >= ' + ctiCassa[1, 0] + 'and NumVoce <= ' + ctiCassa[1, 1] + ')';
    'Part':
      sql2 = '(NumVoce >=' +  ctiPart[0,0] + 'and NumVoce <= ' + ctiPart[0, 1] +
             ') or (NumVoce >= ' + ctiPart[1, 0] + 'and NumVoce <= ' + ctiPart[1, 1] +
             ') or (NumVoce >= ' + ctiPart[2, 0] + 'and NumVoce <= ' + ctiPart[2, 1] + ')';
    else  // 'Prest':
      sql2 = '(NumVoce >=' +  ctiPrest[0,0] + 'and NumVoce <= ' + ctiPrest[0, 1] +
             ') or (NumVoce >= ' + ctiPrest[1, 0] + 'and NumVoce <= ' + ctiPrest[1, 1] + ')';
  end;
  sql:= sql1 + sql2 + ' order by NumVoce';                                                             
Da quanto letto prima e dopo avere scritto quelle righe di codice, non riesco a trovare errori. Non capisco quale sia veramente.
Titolo: Re:stringhe lunghissime dentro una "case...of"
Inserito da: bonmario - Aprile 14, 2020, 06:05:27 pm
Non credo che il problema sia nelle stringhe lunghe.
Stai assegnando dei valori alle variabili, quindi devi mettere ":=", tu invece hai messo "="

Ciao, Mario
Titolo: Re:stringhe lunghissime dentro una "case...of"
Inserito da: xinyiman - Aprile 14, 2020, 06:58:34 pm
Il problema è nella sintassi, devi scrivere

sql2 := e non sql =
Titolo: Re:stringhe lunghissime dentro una "case...of"
Inserito da: petrusic - Aprile 14, 2020, 10:20:36 pm
Strano, la correzione che mi suggerite l'avevo già provata ed ottenevo sempre errore. Ora invece è stata accettata e la compilazione è finita senza errori.
Però, finalmente ho fatto un gran passo avanti.
Grazie a tutti.
 :D ;D