Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar String a Integer (https://www.clubdelphi.com/foros/showthread.php?t=14006)

ramonibk 07-09-2004 11:24:23

Pasar String a Integer
 
Buenos dias.
Bueno mi problema es el de siempre. Que todavia no se muchas cosas.......

Pero en concreto ahora me preocupa lo sigiente.

he hecho un Query para generar un Update. y hasta hay perfecto,
pero la cosa es que para que el Update funcione correctamente le tengo que pasar el Id sobre el que quiero que me actue, este Id Lo tengo pintado en el formulario, pero a la hora de pasarlo al Query me da un problema de incompatibilidad de tipos,

la manera de intentarlo es.
qryVisado.ParamByName('_Id').Value:=Ed_Id.text;
pero claro esta el Id del formulario es un String y lo que el Query espera es un Integer.
como puedo pasar de un tipo a otro??????
Se que hay un metodo que es "Val()" pero no me aclaro con el.
Por lo cual solicito ayuda.
Gracias a todos por Buestra atencion.

__cadetill 07-09-2004 11:31:20

StrToInt


No obstante, te aconsejo usar controles específicos para número (estilo a CurrencyEdit de las RxLib)

JoseQ 07-09-2004 11:33:00

inttostr(integer)

strtoint(string)

i asi un sinfin de funciones para pasar de un tipo a otro.

tambien puedes sacarlo directamente de la tabla como un string

tabla1campo.asstring

o integer

tabla1campo.asinteger

existen muchos mas metodos, pulsa F1 i buscalos en la ayuda de delphi

ramonibk 07-09-2004 13:17:00

MUchas Gracias me ha funcionado perfectamente
con StrToInt.

PARF 07-09-2004 14:42:11

Conversion
 
La conversión se hace: StrToInt(Ed_Id.Text);

Se puede utilizar en el query
qryVisado.ParamByName('_Id').AsInteger:=StrToInt(Ed_Id.text);

buitrago 07-09-2004 18:06:13

Try
 
De todos modos, este tipo de conversiones, que pueden EXPLOTAR, debes hacerlas dentro de un TRY

Saludos

Fer

jachguate 08-09-2004 02:00:21

Solo aclarar que el parámetro tiene una propiedad AsString a la que directamente le podrias asignar el string, sin conversión alguna.

query.parambyname('codigo').AsString := label1.caption;

Saludos.

;)

roman 08-09-2004 02:56:49

Cita:

Empezado por jachguate
query.parambyname('codigo').AsString := label1.caption;

Edito:

Si usas AsString, ¿no queda el valor encerrado entre comillas?

// Saludos

Mick 09-09-2004 01:34:05

Cita:

Empezado por roman
Edito:

Si usas AsString, ¿no queda el valor encerrado entre comillas?

// Saludos

No, porque el campo al que asignas no sabe almacenar strings, solo numeros, ya que es de tipo entero. Al usar AsString, le indicas al objeto TField que el numero a asignar esta en forma de string, de modo que el objeto TField hace la conversion STrToInt internamente y despues asigna el entero resultante al campo.

Independiemente de esto las comillas en una variable de cadena no se guardan, las comillas son unos delimitadores del lenguaje para que el compilador sepa que lo que estas asignando es una cadena de texto no un numero. Es decir las comillas que delimitan cadenas solo tienen sentido en el codigo fuente para diferenciar unos tipos de valores de otros, pero no existen, no aparecen por ningun lado en el ejecutable resultante traducido a codigo maquina.

Saludos
Miguel

jachguate 09-09-2004 02:12:39

Cita:

Empezado por Mick
No, porque el campo al que asignas no sabe almacenar strings, solo numeros, ya que es de tipo entero. Al usar AsString, le indicas al objeto TField que el numero a asignar esta en forma de string, de modo que el objeto TField hace la conversion STrToInt internamente y despues asigna el entero resultante al campo.

Pues no estamos hablando de TField sino de TParam. De todas formas supongo que el comportamiento será similar.

Cita:

Empezado por Mick
Independiemente de esto las comillas en una variable de cadena no se guardan, las comillas son unos delimitadores del lenguaje para que el compilador sepa que lo que estas asignando es una cadena de texto no un numero. Es decir las comillas que delimitan cadenas solo tienen sentido en el codigo fuente para diferenciar unos tipos de valores de otros, pero no existen, no aparecen por ningun lado en el ejecutable resultante traducido a codigo maquina.

No creo que le hiciera falta la aclaración a Roman... :D:D. De todas formas, supongo que román se referia a que el dato se trasladara entre comillas al servidor de base de datos. NO estoy seguro de esto, y no habia replicado por ello. Aunque el dato se traslade entre comillas, la mayoría de SGDBs haran una conversión automática de tipos. El problema radica en que si existe la posibilidad que el dato trasladado no sea un número, se hará trabajar innecesariamente al servidor con algo que pudo comprobarse en el cliente.

A los parámetros, puede asignarseles el tipo de dato (DataType) en tiempo de diseño. NO puedo comprobarlo ahora, pero es probable que al tener definido algún tipo de dato numérico (ftInteger, ftSmallInt, ftFloat, ftCurrency o ftBCD) esta comprobación la realizaria también automáticamente. Si alguien puede probarlo y sacarnos de la duda, se le agradece.

Hasta luego.

;)

roman 09-09-2004 02:41:46

¡Uy! Ahora sí me regresaron al kinder :D

A lo que me refería en efecto, es a las comillas en SQL no en el código fuente. Si hago una consulta como

Código SQL [-]
select * from tabla
where nombre = roman

obtendré un error ya que roman se interpretará como nombre de campo en lugar de la cadena "roman".

En una consulta como

Código SQL [-]
select * from tabla
where nombre = :nombre

Cuando asignamos el parámetro con AsString se colocan las comillas alrededor del valor:

Código SQL [-]
select * from tabla
where nombre = 'roman'

Aun siendo el parámetro de tipo entero, AsString coloca las comillas. Mi confusión fue que no tomé en cuenta que el servidor hacía la conversión de tipos.

// Saludos

buitrago 09-09-2004 07:28:43

QuotedStr
 
usa QuotedStr para ponerle comillas a tu texto antes de mandarlo.

Saludos

Fer

jachguate 09-09-2004 17:20:20

:confused: :confused:

:D:D:D

Creo que este tema está confundiendo a los visitantes... :eek:


La franja horaria es GMT +2. Ahora son las 02:24:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi