Asignando sentencias SQL para modificar en IBDataSet
#1
Escrito 28 febrero 2014 - 12:17
Estoy trabajando con un IBDataSet y no se si puedo asignarle esto, sera que se puede.
begin
Case equipo of
rojo:
ibdtst.ModifySQL.Add('update torneo set,');
ibdtst.ModifySQL.Add('clave=:clave,');
ibdtst.ModifySQL.Add('juego_zona_uno=:juego_zona_uno,');
ibdtst.ModifySQL.Add('where clave=clave,');
verde:
ibdtst.ModifySQL.Add('update torneo set,');
ibdtst.ModifySQL.Add('clave=:clave,');
ibdtst.ModifySQL.Add('juego_zona_dos=:juego_zona_dos,');
ibdtst.ModifySQL.Add('where clave=clave,');
azul:
ibdtst.ModifySQL.Add('update torneo set,');
ibdtst.ModifySQL.Add('clave=:clave,');
ibdtst.ModifySQL.Add('juego_zona_tres=:juego_zona_tres,');
ibdtst.ModifySQL.Add('where clave=clave,');
else
ShowMessage('Equipo no esta inscrito!');
end;
end;
#2
Escrito 28 febrero 2014 - 12:52
begin Case equipo of rojo: begin ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add('juego_zona_uno=:juego_zona_uno,'); ibdtst.ModifySQL.Add('where clave=clave,'); end; verde: begin ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add('juego_zona_dos=:juego_zona_dos,'); ibdtst.ModifySQL.Add('where clave=clave,'); end; azul: begin ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add('juego_zona_tres=:juego_zona_tres,'); ibdtst.ModifySQL.Add('where clave=clave,'); end; else ShowMessage('Equipo no esta inscrito!'); end; end;
#3
Escrito 28 febrero 2014 - 01:14
var filtro: string; begin case equipo of rojo : filtro := 'juego_zona_uno=:juego_zona_uno,'; verde: filtro := 'juego_zona_dos=:juego_zona_dos,'; azul : filtro := 'juego_zona_tres=:juego_zona_tres,'; else ShowMessage('Equipo no esta inscrito!'); end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
#4
Escrito 28 febrero 2014 - 03:03
Muchas gracias, ahora si mejorare mi codigo.
te agradezco mucho.
#5
Escrito 28 febrero 2014 - 04:12
function StringToCaseSelect (Selector : string; CaseList: array of string): Integer; var cnt: integer; begin Result:=-1; for cnt:=0 to Length(CaseList)-1 do begin if CompareText(Selector, CaseList[cnt]) = 0 then begin Result:=cnt; Break; end; end; end
y en tu código quedaría así:
var filtro: string; begin case StringToCaseSelect(Equipo, [Rojo,Verde,Azul]) of rojo : filtro := 'juego_zona_uno=:juego_zona_uno,'; verde: filtro := 'juego_zona_dos=:juego_zona_dos,'; azul : filtro := 'juego_zona_tres=:juego_zona_tres,'; else begin ShowMessage('Equipo no esta inscrito!'); Exit; end; end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
Además he agregado la línea Exit en caso de que el equipo no esté inscrito.
Saludos.
#6
Escrito 28 febrero 2014 - 04:45
function StringToCaseSelect (Selector : string; CaseList: array of string): Integer; var cnt: integer; begin Result:=-1; for cnt:=0 to Length(CaseList)-1 do begin if CompareText(Selector, CaseList[cnt]) = 0 then begin Result:=cnt; Break; end; end; end
var filtro: string; begin case StringToCaseSelect(Equipo, [Rojo,Verde,Azul]) of // Se cambian los valores del CASE 0 : filtro := 'juego_zona_uno=:juego_zona_uno,'; 1: filtro := 'juego_zona_dos=:juego_zona_dos,'; 2 : filtro := 'juego_zona_tres=:juego_zona_tres,'; else begin ShowMessage('Equipo no esta inscrito!'); Exit; end; end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
Saludox !
#7
Escrito 28 febrero 2014 - 04:53
Solo una pequeña aclaración, para que ese código te funcione, las variables Equipo, Rojo, Verde, Azul deberían ser de tipo ordinal (entero, char, boolean) , en caso de que estas sean de tipo string puedes valerte de la siguiente función de ZArko:
Tiene usted toda la razón amigo Wilson, pero asumí (mal hecho de mi parte) que rojo, verde y azul, eran variables ordinales y no cadenas
Saludos
#8
Escrito 28 febrero 2014 - 04:55
Pero en todo caso habría que modificar también el case no amigo Wilson ??
¡Hay caramba!, en un rato regreso con otro método mucho mejor
Saludos
#9
Escrito 28 febrero 2014 - 05:02
var filtro: string; begin case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of 0: filtro := 'juego_zona_uno=:juego_zona_uno,'; 1: filtro := 'juego_zona_dos=:juego_zona_dos,'; 2: filtro := 'juego_zona_tres=:juego_zona_tres,'; else begin ShowMessage('Equipo no esta inscrito!'); exit; end; end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
Saludos
#10
Escrito 28 febrero 2014 - 05:12
Pero en todo caso habría que modificar también el case no amigo Wilson ???
Tienes toda la razón mi estimada Fena.
Saludos.
#11
Escrito 28 febrero 2014 - 05:18
A ver que tal
delphi
var filtro: string; begin case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of 0: filtro := 'juego_zona_uno=:juego_zona_uno,'; 1: filtro := 'juego_zona_dos=:juego_zona_dos,'; 2: filtro := 'juego_zona_tres=:juego_zona_tres,'; else begin ShowMessage('Equipo no esta inscrito!'); exit; end; end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
Saludos
Ahora si quedó de novela.
Saludos.
PD: Solo falta que venga el doliente y diga que las variables si eran ordinales.
#12
Escrito 28 febrero 2014 - 05:23
A ver que tal
delphi
var filtro: string; begin case AnsiIndexStr(equipo ,['rojo', 'verde', 'azul']) of 0: filtro := 'juego_zona_uno=:juego_zona_uno,'; 1: filtro := 'juego_zona_dos=:juego_zona_dos,'; 2: filtro := 'juego_zona_tres=:juego_zona_tres,'; else begin ShowMessage('Equipo no esta inscrito!'); exit; end; end; ibdtst.ModifySQL.Clear; ibdtst.ModifySQL.Add('update torneo set,'); ibdtst.ModifySQL.Add('clave=:clave,'); ibdtst.ModifySQL.Add(filtro); ibdtst.ModifySQL.Add('where clave=clave,'); end;
Saludos
Acabo de encontrar un detalle en el código. hay que quitar las comillas a las variables Rojo, Verde, Azul.
Saludos.
#13
Escrito 28 febrero 2014 - 05:51
Acabo de encontrar un detalle en el código. hay que quitar las comillas a las variables Rojo, Verde, Azul.
Claro, siempre y cuando esas sean variables conteniendo 'rojo, 'verde' y 'azul', en todo caso habrá que hacer una ligera prueba
Saludos
PF, Y si resulta que en realidad fueran ordinales
#14
Escrito 28 febrero 2014 - 11:02
Gracias, mejor que tener un profesor en casa....