2013-09-16 8 views
10

Chcę poznać różnicę między następującymi dwie instrukcje dotyczące zbiorów danych w delphi.Jaka jest różnica między AsInteger i Value w Delphi?

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

i

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

te oświadczenia nosić takie samo znaczenie? Czy "wartość" niejawnie konwertuje liczbę całkowitą na ciąg? Właściwość

Odpowiedz

12

na przykład ustaw wartość i typ danych parametru. TParam.Value robi to samo, ale TParam zdecyduje, który typ będzie odwzorowany na wartość wewnątrz Variant i nie zawsze jest to typ danych, który chcesz.

Zaleca się ustawianie wartości tylko za pomocą właściwości AsXXX, ponieważ będziesz mieć kontrolę nad typem danych parametru, co może zaoszczędzić na błędach wiązania parametrów.

Odpowiadając na ostatnie pytanie: nie, wartości nie zostaną przekonwertowane na właściwy typ danych, należy ustawić typ danych, wybierając właściwość odpowiednią do przypisania wartości.

+0

@nkp Proszę nie brać pod uwagę tego, co napisałem. To było nieprawidłowe. –

+0

ok david, a co z moimi wątpliwościami: W moim kodzie, w wielu miejscach dsMyDataSet.ParamByName ("ID"). Wartość: = 1122; jest napisane. Jeśli Ctrl + kliknięcie wartości, przeniesie mnie do właściwości "Właściwość Wartość: AnsiString odczytać GetAsAnsiString napisać SetAsAnsiString;" który jest zapisany w pliku Data.DB.pas. Ta właściwość zwraca AnsiString. Teraz, jeśli napiszę instrukcję taką jak "dsMyDataSet.ParamByName (" ID "). Wartość: = myString". Dostanę ostrzeżenie kompilatora, że ​​niejawnie zakrył ciąg do ansistrowania, co może spowodować utratę danych. Jak mam obchodzić się z tym ostrzeżeniem? –

+0

@nkp, po prostu typecast do AnsiString, aby usunąć ostrzeżenie. AnsiString ("myString"). –

Powiązane problemy