2013-09-16 27 views
10

Desidero conoscere la differenza tra le seguenti due istruzioni correlate ai set di dati in Delphi.Qual è la differenza tra AsInteger e Value in Delphi?

dsMyDataSet.ParamByName('ID').AsInteger := 1122; //If ID is integer 
dsMyDataSet.ParamByName('ID').AsString := '1122'; //If ID is string 

e

dsMyDataSet.ParamByName('ID').Value := 1122; //ID is string or integer 

fare queste affermazioni portano lo stesso significato? Il "valore" converte implicitamente intero in stringa?

risposta

12

La proprietà TParam.AsInteger, ad esempio, imposta il valore e il tipo di dati del parametro. TParam.Value fa lo stesso, ma TParam deciderà quale tipo verrà mappato sul valore all'interno dello Variant e non sempre è il tipo di dati che si desidera.

Si consiglia di impostare i valori utilizzando solo le proprietà AsXXX, dal momento che si avrà il controllo del tipo di dati del parametro, che cosa può evitare di avere errori di associazione dei parametri.

Quindi, rispondendo alla tua domanda finale: no, i valori non saranno convertiti nel tipo di dati corretto, devi impostare il tipo di dati selezionando la proprietà giusta per assegnare il valore.

+0

@nkp Si prega di ignorare ciò che ho scritto. Non era corretto –

+0

ok david, che dire del mio dubbio: nel mio codice, in molti posti dsMyDataSet.ParamByName ('ID'). Valore: = 1122; è scritto. Se I Ctrl + clic su valore, mi porta alla proprietà "proprietà Valore: AnsiString leggi GetAsAnsiString scrivi SetAsAnsiString;" che è scritto nel file Data.DB.pas. Questa proprietà restituisce AnsiString. Ora se scrivo una dichiarazione come "dsMyDataSet.ParamByName ('ID'). Valore: = myString". Riceverò il compilatore che avverte che la stringa è implicitamente coperta da ansistring, che può causare la perdita di dati. Come dovrei gestire questo avvertimento? –

+0

@nkp, basta digitare su AnsiString per rimuovere l'avviso. AnsiString ('myString'). –

Problemi correlati