PDA

Visualizza la versione completa : [DELPHI] Controllo errori nell'uso di StrToInt()


sally3000
29-07-2008, 15:52
Se provo a convertire una stringa che contiene valori non numerici mi da errore.... :dhò:
come posso fare per eliminare quello che non è numerico? sapendo che il valore è ricevuto da una inputbox?

conta:=inputbox('Contatore','Modifica:',0);

LeleFT
29-07-2008, 15:54
Di quale linguaggio stiamo parlando?
Il regolamento prevede che tale informazione sia presente, oltre che nella discussione per ovvie motivazioni di buon senso, anche nel titolo.


Ciao. :ciauz:

sally3000
29-07-2008, 15:55
ups ho omesso il linguaggio :stordita: comunque è delphi pardon

mondobimbi
29-07-2008, 16:43
puoi provare a gestire la eccezionie

try ... except ....

ciao
sergio

Caiodark
30-07-2008, 10:07
Come suggerito puoi provare con un blocco try oppure puoi usare la StrToIntDef dove puoi passare un intero di default nel caso non riuscisse a convertire la stringa.

sally3000
30-07-2008, 11:06
ho provato con il try .... ma forse sbaglio qualcosa perchè mi esce comunque il messaggio di errore



conta:=inputbox('Contatore','Modifica il contatore:','0');
try
test:=strtoint(conta);
if (conta<>Mod_dati.FIBQuery.FieldByName('NMCALL').asString) then
begin
// salvare nel db
Lblnumero.Caption:=conta;
end;
end;
except
showmessage('Inserire un numero intero valido');
end;

Caiodark
30-07-2008, 11:37
Primo: indenta il codice o non si capisce nulla.

Secondo: nel codice che hai scritto sembra esserci un end di troppo.

Terzo: per questo caso puoi usare strtointdef, basta passare come valore di default un valore che sei sicuro di non trovare nella query che interroghi. Ti risparmi un blocco try except.

Brendon77
30-07-2008, 21:17
Originariamente inviato da sally3000
ho provato con il try .... ma forse sbaglio qualcosa perchè mi esce comunque il messaggio di errore



conta:=inputbox('Contatore','Modifica il contatore:','0');
try
test:=strtoint(conta);
if (conta<>Mod_dati.FIBQuery.FieldByName('NMCALL').asString) then
begin
// salvare nel db
Lblnumero.Caption:=conta;
end;
end;
except
showmessage('Inserire un numero intero valido');
end;


Ciao, credo che ti dia l'errore siccome hai dimenticato di gestire il tipo di eccezione. Nel tuo caso ti deve mandare il messaggio di errore (cioè invocare lo ShowMessage) se appunto si cerca di convertire una stringa che non contiene numeri, qundi vi è un errore di conversione.

try
X :=strtoInt(label1.caption);
except
on EConvertError do showmessage('Errore');
end;

in questo piccolo esempio cerco di inserire in una variabile intera X il contenuto di una label, nel caso in cui la stringa in questione contenga qualche carattere si solleva un eccezione e in quel caso (cioè di un EConvertError) invoco ShowMessage, ma potevo fare quel che volevo :-).

Ricorda comunque che in fase di esecuzione, il Delphi ti avvertirà sempre con una sua finestra di errore, dicendoti che si è sollevata quell'eccezione, tu premi F9 e continua con l' esecuzione, vedrai che poi apparirà il tuo messaggio di errore e il tuo programma continuerà normalmente. Questo è un comportamento normale di Delphi che può essere aggirato smanettando con quelche settaggio, una volta lo feci, ma ora francamente non mi ricordo quale sia :stordita: .

Spero di averti aiutato.

:ciauz:

papaeredi
03-03-2012, 17:29
ho sbagliato

Loading