PDA

Ver la Versión Completa : comparar do tedit.text


gonza_619
14-09-2010, 21:13:36
hola amigos bueno miren tengo 2 edit.text y hago lo sig

if edit1.text>edit2.text then
showmessage 'es menor'

pero no me lo compara como podria hacer?

Caral
14-09-2010, 21:16:54
Hola
Pues no veo el problema, salvo los parentesis hace la comparacion:

if edit1.text > edit2.text then
showmessage('es menor');

Saludos

gonza_619
14-09-2010, 21:19:50
bien el codigo es el sig:


query1.SQL.Clear;
Query1.sql.text:= 'Select sum(importe) as Monto from cobranzas where alucurso ='+IntToStr( x ) ;
query1.Active:=true;
Edit2.Text:= Query1.FieldByName('Monto').asstring;

//edit4.text:=floattostr(strtofloat(edit2.Text)+ StrToFloat(dbedit4.Text));
f:= StringReplace(dbedit12.Text, '$', '', [rfReplaceAll]);
g:= StringReplace(dbedit10.Text, '$', '', [rfReplaceAll]);
h:= FloatToStr(StrToFloat(f) + StrToFloat(g));
edit3.Text:=h;
if edit2.text < edit3.text then
showmessage('todavia debe cuotas');

me da todo bien menos la comparacion ya q no me tira el mensaje saludos

Caral
14-09-2010, 21:24:06
Hola
La pregunta que se me ocurre es:
El Edit2 carga el dato de la tabla, este dato, segun entiendo viene acompañado del signo de $ ????
Si es asi, el edit 3 no lo tiene, por ende la comparacion la hace pero nunca hara la operacion.
Me equivoco?
Saludos

Caral
14-09-2010, 21:32:44
Hola

query1.SQL.Clear;
Query1.sql.text:= 'Select sum(importe) as Monto from cobranzas where alucurso ='+IntToStr( x ) ;
query1.Active:=true;
Edit2.Text:= StringReplace(Query1.FieldByName('Monto').asstring, '$', '', [rfReplaceAll]);

f:= StringReplace(dbedit12.Text, '$', '', [rfReplaceAll]);
g:= StringReplace(dbedit10.Text, '$', '', [rfReplaceAll]);
edit3.Text:= FloatToStr(StrToFloat(f) + StrToFloat(g));

if edit2.text < edit3.text then
showmessage('todavia debe cuotas');
Saludos

Delphius
14-09-2010, 21:35:48
¿Puedo preguntar el porqué de comparar texto si lo que se busca comparar números? :confused:

A mi modo de ver se están haciendo conversiones innecesarias. Directamente que se comparen números y no estar convirtiendo de un tipo a otro.

Saludos,

gonza_619
14-09-2010, 21:36:44
recien lo probe pero tampoco me tira el mensaje perdon por no se mas extenso pero nose porq la razon de no hacer la operacion
bien probare pasarlo a integer

Caral
14-09-2010, 21:40:39
Hola
Sigo insistiendo con la pregunta:
El edit2 muestra el dato con el signo de Dolares ($) ????.
El edit3 veo que no, pero lo tiene?.
Saludos
PD: Delphius: Me imagino que hace la comparacion en los edit ya que es ahi donde se muestran los datos.

egostar
14-09-2010, 21:45:12
recien lo probe pero tampoco me tira el mensaje perdon por no se mas extenso pero nose porq la razon de no hacer la operacion
bien probare pasarlo a integer


Esto es simple, las cadenas se ordenan de esta forma:

'1 '
'10'
'2 '
'3 '
'4 '

Y si tuvieras esto:

edit2.text = '2 '
edit3.text = '10'

Al hacer la comparación, lo hace correctamente ya que '2 ' NO es menor a '10'

Como te dice Delphius, usa mejor campos numericos.

Salud OS

gonza_619
14-09-2010, 21:45:57
los edits no muestran el signo pesos gracias
tendria que sumarlos en $ pero no se si se puede
h:= FloatToStr(StrToFloat(f) + StrToFloat(g));
esta operacion funciona pero lo q tendria hacer es comparar
con el edit2 y ahi ya no funciona, es decir los flotantes los suma, tendria hacer
w:=float tostr(edit2.text)?

Caral
14-09-2010, 21:56:51
Hola
Como te han dicho, la mejor manera es cambiar el dato de string a float.
Simplemente:

var a,b: real;
begin
query1.SQL.Clear;
Query1.sql.text:= 'Select sum(importe) as Monto from cobranzas where alucurso ='+IntToStr( x ) ;
query1.Active:=true;
Edit2.Text:= Query1.FieldByName('Monto').asstring;

f:= StringReplace(dbedit12.Text, '$', '', [rfReplaceAll]);
g:= StringReplace(dbedit10.Text, '$', '', [rfReplaceAll]);
edit3.Text:= FloatToStr(StrToFloat(f) + StrToFloat(g));

a:= StrToFloat(edit2.text);
b:= StrToFloat(edit3.text);

if a < b then
showmessage('todavia debe cuotas');
Saludos

gonza_619
14-09-2010, 22:02:33
bueno muchas gracais a todos , ahora si hizo la comparacion gracias de verdad, igualmenete segire preguntando espero le sirva a lguien mas saluudos

Caral
14-09-2010, 22:07:29
Hola
Pues a mi me sirvio la lección de mi amigo Egostar, no sabia que las cadenas venían asi:

'1 '
'10'
'2 '
'3 '
'4 '

Hice la prueba (como buen escéptico :D) y efectivamente.
Pero siempre digo; Delphi es tan bueno que ayuda en todo.;)
Saludos

Casimiro Notevi
14-09-2010, 22:55:48
Es que en caso de caracteres el orden es el de la tabla ascii:


!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Los números van primero, luego las letras mayúsculas y después las letras minúsculas.

ecfisa
14-09-2010, 23:18:03
Es por lo comentado por egostar, que desde la epoca del TP y del BC++, me quedó la costumbre de rellenar los códigos con ceros a la izquierda para evitar esos 'desordenes' numéricos...

A por por cierto, acertada observación la de Delphius.

Saludos. :)

gonza_619
14-09-2010, 23:18:30
bien ahora el problema es que el campo "ctrlconcepto" es integer y en esta parte de asignacion max:= Query1.FieldByName('maximo').AsString
no permite integer sino .string y .value. se que si lo denomino .value ahi que pasarlo al tipo q quiero. como seria?


query1.SQL.Clear;
query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso =IntToStr( x ) and concepto=IntToStr(dbedit9.text)' ;
query1.Active:=true;
max:= Query1.FieldByName('maximo').AsString;

asi como esta me tira error supongo porq max es integer, bien lo declare integer

max:= inttostr(query1.fieldbyname('maximo').value);

digo ya que el campo "maximo" es integer

Caral
14-09-2010, 23:26:08
Hola

query1.SQL.Clear;
query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso = '+ IntToStr( x )+' and concepto = '+ IntToStr(dbedit9.text) ;
query1.Active:=true;
max:= Query1.FieldByName('maximo').Value;
Saludos

gonza_619
14-09-2010, 23:32:24
me tira error de capability not suported.
que qiere decir cuando pongo al final .value?
quizas sea algo en la consulta pero el error me lo marca en la asignacion al MAX
no me tira error en la ocnsulta:
query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso =IntToStr( x ) and concepto=IntToStr(dbedit9.text)' ;

Caral
14-09-2010, 23:43:30
Hola
La variable max que es ????
Saludos

gonza_619
14-09-2010, 23:51:09
la variable max es integer pero al parecer es en la cinsulta de esta manera funciona

query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso ='+IntToStr( x )

pero al tomar 2 campos como referencia ya no, es que el otro cmapo necesito agregarlo depues ese campo es tambien integer, sino tendre que pasarlo a un variable X como hice antes

strtoint(dbedit11.text)

query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso ='+IntToStr( x ) and conceptoctrl = strtoint(dbedit11.text)
aca nose si esta bien

Caral
14-09-2010, 23:58:39
Hola

query1.SQL.Clear;
query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso = :uno and concepto = :dos';
Query1.Params[0].Value:= IntToStr( x );
Query1.Params[1].Value:= dbedit9.text;
query1.Active:=true;
max:= Query1.Fields[0].Value;
Saludos

ecfisa
15-09-2010, 00:10:41
me tira error de capability not suported.
que qiere decir cuando pongo al final .value?
quizas sea algo en la consulta pero el error me lo marca en la asignacion al MAX
no me tira error en la ocnsulta:



Hola gonza.
Ya en otro post (http://www.clubdelphi.com/foros/showthread.php?t=69869) que hiciste te conteste que esto:
query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso =IntToStr( x ) and concepto=IntToStr(dbedit9.text)' ;
no va a funcionar.

IntToStr no es una sentencia SQL, tenés que sacar a IntToStr fuera de las comillas... :)

Saludos.

gonza_619
15-09-2010, 00:13:55
bueno me da error de type missmatch in expression.
bien es que resulta tengo que hacer un control

tablaxx
cmapo1 campo2 campo3
1 1 1
1 1 2
1 2 1

como veras si en campo 2 cambia , tambien tiene q cambiar campo3
si cambia campo2 entonces cambia campo3 = 1
si campo2 sigue con el mismo valor(1) entonces campo2 sera 2, si campo2 sigue (1), campo3 cambia =3 y asi.
ahora si campo2 cambia a(2) entonce campo3 vuelve a=1

por eso en la consulta referencio los campos campo1 y campo2,

BIEN AHORA PROBE ASI: SEGUN LO ENTENDI ANTERIORMENTE

query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso ='+IntToStr( x ) 'and concepto='+inttostr(dbedit2.text);

DEJANDO AFUERA LOS INTOSTR Y ME DICE MISSING OPERATOR OR SEMICOLON
ANTES DE ESTA PARTE +inttostr(dbedit2.text);

ecfisa
15-09-2010, 00:26:49
Si por que a golpe de ojo veo que te falta un '+' en la concatenación.

gonza, por que no probas así...


query1.sql.text:= 'Select max(ctrlconcepto) as maximo from cobranzas where alucurso = '+
QuotedStr(IntToStr(x)) + ' and concepto = ' + QuotedStr(IntToStr(dbedit9.text));


Saludos.:)

Caral
15-09-2010, 00:40:29
Hola
type missmatch in expression es simplemente que la evaluación no es la correcta, osea, el dato que se da al parametro no coincide con el del campo.
Puse los parametros por que es conveniente irse acostumbrando a usarlos, es una buena politica, da orden al codigo etc. etc,.
Lo que te explica el Maestro ecfisa es un cambio en la condicion de los datos usando el QuotedStr, que es en esencia lo que indica el error, un tipo erroneo de dato o expresion.
Saludos